文章目录
视频: https://www.bilibili.com/video/BV1Rv41177Af
笔记: https://pan.baidu.com/s/1gqLrT3hcR-9s9VYl7dPGpg 提取码:hfl3
本博客是对上述笔记的补充。
基础补充
StringRedisTemplate
StringRedisTemplate
继承自RedisTemplate<String, String>
,当操作对象都是String类型的时候,就使用StringRedisTemplate
即可。
注意:StringRedisTemplate
的valueSerializer
是StringRedisSerializer
,它只序列化字符串,不能序列化对象!
集群
Redis6
开始,自动集成了Rubby,不需要手动装了!
主从
哨兵
命令方式设置主从机的情况下,若不使用哨兵,会有以下问题:
- 若主机挂了,从机原地待命。
- 若从机挂了,重启后不再是从机(除非从机是在配置文件中配置的)
Redis6
开始,从机优先级配置项改为了replica-priorit
。
JedisSentinalPool
中设置的是哨兵服务器的IP和端口号
@Bean
public JedisSentinelPool jedisSentinelPool(){
Set<String> sentinels = new HashSet<String>();
// 哨兵服务器的IP和端口号
sentinels.add("192.168.142.129:26379");
// Jedis连接池的配置类
JedisPoolConfig config = new JedisPoolConfig();
// 这里"mymaster"与sentinel.conf文件中”sentinel monitor mymaster 192.168.142.129 6379 2 ” 的"mymaster"对应
JedisSentinelPool jedisPool = new JedisSentinelPool("mymaster",sentinels,config);
return jedisPool;
}
Redis与Spring Boot整合
Jedis是Redis官方推荐的面向Java的操作Redis的客户端,而RedisTemplate是SpringDataRedis中对JedisApi的高度封装。SpringDataRedis相对于Jedis来说可以方便地更换Redis的Java客户端,比Jedis多了自动管理连接池的特性,方便与其他Spring框架进行搭配使用如:SpringCache。
Lettuce 和 Jedis 的都是连接Redis Server的客户端程序。Jedis在实现上是直连redis server,多线程环境下非线程安全,除非使用连接池,为每个Jedis实例增加物理连接。Lettuce基于Netty的连接实例(StatefulRedisConnection),可以在多个线程间并发访问,且线程安全,满足多线程环境下的并发访问,同时它是可伸缩的设计,一个连接实例不够的情况也可以按需增加连接实例。
spring-boot-starter-redis 在2017年6月后就改为了 spring-boot-starter-data-redis。
SpringBoot2.x 后默认使用的不再是Jedis而是lettuce,所以spring-boot-starter-data-redis 依赖了:lettuce-core、spring-data-redis、spring-boot-starter。
9.1 整合步骤
教程中使用默认的lettuce客户端,没有使用集群,且没有使用分布式锁(第16.4节基于redisTemplater实现的简单分布式锁)。若要使用Jedis客户端,且使用集群,且使用基于jedisCluster实现的简单分布式锁(redisson的分布式锁可参考16.4节的补充),就步骤如下。
pom文件:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath />
</parent>
<!-- Redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<!-- 1.5的版本默认采用的连接池技术是jedis,2.0以上版本默认连接池是lettuce, 因为此次是采用jedis,所以需要排除lettuce的jar -->
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- jedis客户端 -->
<dependency