Spring boot整合Redis
Jedis、Spring-data-redis的配置以及区别
Jedis如何配置
- jedis引入依赖
1 | <!-- Jedis引入依赖--> |
-
连接Redis客户端
-
Jedis直连
1
2
3Jedis jedis = new Jedis("192.168.30.0", 6379);
jedis.set("hello", "world");
String value = jedis.get("hello"); -
JedisPool 连接池的使用
配置文件
jedis.properties
1
2
3
4
5
6
7
8# 资源池最大连接数
maxTotal=50
# 资源池允许最大空闲连接数
maxIdle=10
# redis服务器地址
host=192.168.30.0
# redis开放端口
port=6379类
JedisUtils.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class JedisUtils {
//创建一个连接池
private static JedisPool jedisPool;
//
static{
//读取配置文件
InputStream is = JedisUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
Properties pro=new Properties();
try {
pro.load(is);
} catch (IOException e) {
e.printStackTrace();
}
//连接池配置
JedisPoolConfig config=new JedisPoolConfig();
config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
//初始化连接池,把对应参数传递进去
jedisPool=new JedisPool(config,pro.getProperty("host"), Integer.parseInt(pro.getProperty("port")));
}
//设置好后返回,返回一个Jedis对象
public static Jedis getJedis(){
return jedisPool.getResource();
}
}测试类
JedisTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18public static void main(String[] args) {
Jedis jedis = null;
try {
//获取连接池对象
jedis = JedisUtils.getJedis();
//执行操作
jedis.set("java", "good");
System.out.println(jedis.get("java"));
} catch (Exception e) {
e.printStackTrace();
} finally {
if (jedis != null) {
//这里使用的close不代表关闭连接,指的是归还资源
jedis.close();
}
}
}
-
-
Jedis
直连
与Jedis连接池
使用的对比方案 优点 缺点 Jedis直连 简单方便
适用于连接数较少且使用时间较长,可构成长连接场景存在每次新建/关闭TCP开销
资源无法控制,存在连接泄露的可能
Jedis对象线程不安全Jedis连接池 Jedis预先生成,降低开销
连接池的形成保护和控制资源的使用相对于直连,使用相对麻烦,尤其在资源管理上需要很多参数来保证,一旦规划不合理就会出现问题
Spring-data-redis如何配置
- spring-data-redis引入依赖
1 | <!-- redis--> |
- 添加配置文件
application.properties
1 | #Redis服务器地址 |
- 添加Redis配置类
RedisConfig.java
1 |
|
- 创建Controller试验一下
1 |
|
- 根据自己开设的端口访问
http://localhost:8080/redisTest
常见问题及解决方法
1、查看是否启动Redis服务器
2、查看目标IP地址是否可以ping通
3、Redis的配置application.yml(或application.properties)中spring.redis.timeout连接超时时间(毫秒)中设置不能为0
4、修改redis的配置文件redis.conf
- protected-mode yes 改为 protected-mode no
(该配置项表示是否开启保护模式,默认是开启,开启后Redis只会本地进行访问,拒绝外部访问) - 注释掉 bin127.0.0.1 即 #bin 127.0.0.1
(PS: 不注释掉,表示指定 Redis 只接收来自于该 IP 地址的请求,注释掉后,则表示将处理所有请求)
修改配置文件redis.conf后记得保存重启redis
5、如果在Redis中没有配置requirepass,那么在application.properties(或application.yaml)中就不要写spring.redis.password
6、开放对应端口
1 | firewall-cmd --permanent --add-port=6379/tcp # 开放6379端口号 |
总结
Jedis
是Redis官方推荐的面向Java的操作Redis的客户端,而RedisTemplate
是Spring-data-redis
中对Jedis
Api的高度封装。
Spring-data-redis
相对于Jedis来说可以方便地更换Redis的Java客户端,比Jedis多了自动管理连接池的特性,方便与其他Spring框架进行搭配使用
总体来说,Jedis
,更像spring 与 MySQL
结合,通过操作连接池,获取实例操作数据库,而Spring-data-redis
与spring的整合,更像spring 与 mybatis
整合,通过工厂,创建实例,再操作实例。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ztop の 空间站!
评论