- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-redis</artifactId>
- </dependency>
- @Configuration
- public class RedisConfig {
-
- }
1.pojo序列化——jdk默认的序列化
- import lombok.AllArgsConstructor;
- import lombok.Data;
- import lombok.NoArgsConstructor;
- import org.springframework.stereotype.Component;
-
- import java.io.Serializable;
-
- @Component
- @Data
- @AllArgsConstructor
- @NoArgsConstructor
- public class User implements Serializable {
- private String name;
- private int age;
- }
- @SpringBootTest
- class DemoApplicationTests {
-
- @Autowired
- private RedisTemplate redisTemplate;
-
- @Test
- void TestSerializable() {
- User user = new User("zhangsan", 30);
- redisTemplate.opsForValue().set("user", user);
- User userResult = (User)redisTemplate.opsForValue().get("user");
- System.out.println(userResult);
- }
- }
2.手动转json
- @Component
- @Data
- @AllArgsConstructor
- @NoArgsConstructor
- public class User {
- private String name;
- private int age;
- }
- @SpringBootTest
- class DemoApplicationTests {
-
- @Autowired
- private RedisTemplate redisTemplate;
-
- @Test
- void TestTransportByJson() {
- User user = new User("zhangsan", 30);
- String jsonUser = JSON.toJSONString(user);
- redisTemplate.opsForValue().set("user", jsonUser);
- String jsonResult = (String) redisTemplate.opsForValue().get("user");
- User userResult = JSON.parseObject(jsonResult, User.class);
- System.out.println(userResult);
- }
-
- }
- @Configuration
- public class RedisConfig {
- @Bean
- public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
- RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
- redisTemplate.setConnectionFactory(factory);
-
- //配置序列化方式
- //1.jackson
- Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
- ObjectMapper objectMapper = new ObjectMapper();
- objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
- objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
- jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
- //2.String
- StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
-
- redisTemplate.setKeySerializer(stringRedisSerializer);//key采用String的序列化方式
- redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);//value采用jackson的系列化方式
- redisTemplate.setHashKeySerializer(stringRedisSerializer);//hash的key采用String的序列化方式
- redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);//hash的value采用jackson的系列化方式
- redisTemplate.afterPropertiesSet();//把所有的配置加进去
-
- return redisTemplate;
- }
- }
RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为RDB文件,默认是保存在当前运行目录。
RDB持久化在四种情况下会执行:
(1)执行save命令
(2)执行bgsave命令
(3)Redis停机时
(4)触发RDB条件时


AOF全称为Append Only File(追加文件)。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。

















三个sentinel实例信息如下:
| 节点 | IP | PORT |
|---|---|---|
| s1 | 192.168.150.101 | 27001 |
| s2 | 192.168.150.101 | 27002 |
| s3 | 192.168.150.101 | 27003 |
(1)要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。我们创建三个文件夹,名字分别叫s1、s2、s3
# 进入/tmp目录 cd /tmp
# 创建目录 mkdir s1 s2 s3
(2)然后我们在s1目录创建一个sentinel.conf文件,添加下面的内容:
port 27001
sentinel announce-ip 192.168.150.101
sentinel monitor mymaster 192.168.150.101 7001 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
dir "/tmp/s1"

(3)然后将s1/sentinel.conf文件拷贝到s2、s3两个目录中,修改s2、s3两个文件夹内的配置文件,将端口分别修改为27002、27003:
sed -i -e 's/27001/27002/g' -e 's/s1/s2/g' s2/sentinel.conf
sed -i -e 's/27001/27003/g' -e 's/s1/s3/g' s3/sentinel.conf
为了方便查看日志,我们打开3个ssh窗口,分别启动3个redis实例,启动命令:
# 第1个 redis-sentinel s1/sentinel.conf
# 第2个 redis-sentinel s2/sentinel.conf
# 第3个 redis-sentinel s3/sentinel.conf
1. 在配置文件application.yml中指定redis的sentinel相关信息:
- spring:
- redis:
- sentinel:
- master: mymaster
- nodes:
- - 192.168.150.101:27001
- - 192.168.150.101:27002
- - 192.168.150.101:27003
2.在项目的启动类中,添加一个新的bean:
- @Bean
- public LettuceClientConfigurationBuilderCustomizer clientConfigurationBuilderCustomizer(){
- return clientConfigurationBuilder -> clientConfigurationBuilder.readFrom(ReadFrom.REPLICA_PREFERRED);
- }

