文章目录
Redis常用的java客户端:Jedis、lettuce、Redisson
三者区别: https://www.cnblogs.com/liyan492/p/9858548.html
目前最新版本的spring-boot-starter-data-redis同时整合了lettuce和jedis。
Spring Data Redis(SDR):RedisTemplate是Spring Data Redis的一个核心类,RedisTemplate提供一套与客户端无关的api供我们使用,spring-boot-data-redis 内部实现了对Lettuce和jedis两个客户端的封装,具体使用哪个客户端由我们通过配置来选择,但默认使用的是Lettuce【即实际依赖了Lettuce客户端】。如果使用Jedis客户端,就需要先排除Lettuce的jar包,再依赖jedis的jar包。https://www.jianshu.com/p/c7b4cd47ad65
- RedisTemplate和StringRedisTemplate的区别:
https://blog.youkuaiyun.com/yifanSJ/article/details/79513179
(1)StringRedisTemplate继承RedisTemplate,且StringRedisTemplate只支持key和value为String类型
(2)两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。
(3)Spring Data Redis默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。
StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。
要实现JDK序列化策略必须要实现java.io.Serializable接口
1. SpringBoot整合Jedis
RedisFactory–>RedisConfig–>RestTemplate
spring boot框架中已经集成了redis,在1.x.x的版本时默认使用的jedis客户端,现在是2.x.x版本默认使用的lettuce客户端
- 添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.3.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.3.0.RELEASE</version>
<exclusions>
<!--排除lettuce客户端(默认使用lettuce客户端)-->
<exclusion>
<artifactId>lettuce-core</artifactId>
<groupId>io.lettuce</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- 引入jedis客户端,jedis整合了 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
</dependencies>
- 配置文件
spring:
redis:
database: 0
host: www.onething.top
port: 6379
password: 123456
#配置jedis客户端,这里也可以jedis替换为lettuce客户端,下级配置都一样
jedis:
pool:
# 连接池中的最大空闲连接 默认8
max-idle: 8
# 连接池中的最小空闲连接 默认0
min-idle: 0
# 连接池最大连接数 默认8 ,负数表示没有限制
max-active: 8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认-1
max-wait: -1
timeout: 3000
- 配置Redis序列化器
/**
* @param redisConnectionFactory:配置不同的客户端,这里注入的redis连接工厂不同: JedisConnectionFactory、LettuceConnectionFactory
* @功能描述 :配置Redis序列化,原因如下:
* (1) StringRedisTemplate的序列化方式为字符串序列化,
* RedisTemplate的序列化方式默为jdk序列化(实现Serializable接口)
* (2) RedisTemplate的jdk序列化方式在Redis的客户端中为乱码,不方便查看,
* 因此一般修改RedisTemplate的序列化为方式为JSON方式【建议使用GenericJackson2JsonRedisSerializer】
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
// key采用String的序列化方式
redisTemplate.setKeySerializer(StringRedisSerializer.UTF_8);
// value序列化方式采用jackson
redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
// hash的key也采用String的序列化方式
redisTemplate.setHashKeySerializer(StringRedisSerializer.UTF_8);
//hash的value序列化方式采用jackson
redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
2.Spirng整合Lettuce
- 添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.3.0.RELEASE</version>
</dependency>
<!-- spring-boot-starter-data-redis支持lettuce、jedis,默认提供了lettuce的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.3.0.RELEASE</version>
</dependency>
<!--配置连接池:使用对象池,每次创建的对象并不实际销毁,而是缓存在对象池中,
下次使用的时候,不用再重新创建,直接从对象池的缓存中取即可-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.8.0</version>
</dependency>
</dependencies>
- 配置yml文件
spring:
redis:
database: 0
host: www.onething.top
port: 6379
password: 123456nw
#配置jedis客户端,这里也可以jedis替换为lettuce客户端,下级配置都一样
jedis:
pool:
# 连接池中的最大空闲连接 默认8
max-idle: 8
# 连接池中的最小空闲连接 默认0
min-idle: 0
# 连接池最大连接数 默认8 ,负数表示没有限制
max-active: 8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认-1
max-wait: -1
timeout: 3000
- 配置Redis的序列化方式【与jedis相同】
3. RedisTemplate中定义了对5种数据结构操作
redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set
redis实现目录层级结构存储
在redis中set key的时候把目录层级用冒号连接
StringRedisTemplate和RedisTemplate的区别
(1)StringRedisTemplate继承了RedisTemplate
(2) 两者的数据是不共通,StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。
(3)StringRedisTemplate默认采用String的序列化策略,保存的key和value都采用此序列化策略序。RedisTemplate默认采用JDK序列化策略,保存的key和value都采用此序列化策略