# 【SpringBoot】Redis

出處 [https://www.cnblogs.com/rb2010/p/12905470.html](https://www.cnblogs.com/rb2010/p/12905470.html)

pom.xml

```XML
< dependency > 
    < groupId > org.springframework.boot </ groupId > 
    < artifactId > spring-boot-starter-data-redis </ artifactId > 
</ dependency >
```

二、設定YML檔（二選一）

1\. **sentinel模式**

```YAML
spring:
  redis:
    sentinel:
      nodes: 
          - 192.168.0.106:26379
          - 192.168.0.106:26380
          - 192.168.0.106:26381 //哨兵的ip和端口
      master: mymaster //這就是哨兵設定檔中sentinel monitor mymaster 192.168.0.103 6379 2設定的mymaster
```

**2.Cluster模式**

```YAML
spring:
  redis:
    cluster:
      nodes: 192.168.0.106:7000,192.168.0.106:7001,192.168.0.106:7002,192.168.0.106:7003
```

三、配置RedisTemplate模版

```Java
@Configuration
 public  class RedisConf {
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object. class );
        RedisTemplate <Object, Object> template = new RedisTemplate<> ();
        template.setConnectionFactory(redisConnectionFactory);
        template.setKeySerializer(serializer); //設定key序列化(不一定要)
        template.setValueSerializer(serializer);//設定value序列化(不一定要)
return template; } 
 
   // 讀寫分離
   @Bean
	public LettuceClientConfigurationBuilderCustomizer clientConfigurationBuilderCustomizer() {
 		return clientConfigurationBuilder -> {
      		clientConfigurationBuilder.readFrom(ReadFrom.REPLICA_PREFERRED);
 			};
	}
 }

```

四、測試（簡單的model就省略了）

```Java
@RestController
 public  class RedisTestController {
    @Autowired
    RedisTemplate redisTemplate;

    @GetMapping( "set" )
     public  void set(){
        redisTemplate.opsForValue().set( "key1","123" );
        User u = new User();
        u.setId( 1 );
        u.setName( "name姓名" );
        redisTemplate.opsForValue().set( "user" ,u);
    }
    @GetMapping( "get" )
     public Map get(){
        Map map = new HashMap();
        map.put( "v1",redisTemplate.opsForValue().get("key1" ));
        map.put( "v2",redisTemplate.opsForValue().get("user" ));
         return map;
    }
}
```

---

相關連結

- [redis分佈鎖](https://blog.piaoruiqing.com/2019/05/19/redis%E5%88%86%E5%B8%83%E5%BC%8F%E9%94%81/)
- [Springboot集成Redis实现分布式锁](https://www.jianshu.com/p/5c30f7d58dd3)
- [阿里華為等大廠的Redis分散式鎖是如何設計的?](https://tw511.com/a/01/31949.html)
- [spring-boot-redisson 与 spring-data-redis 共存问题](https://pushyzheng.com/snippets/spring-boot-redisson-%E4%B8%8E-spring-data-redis-%E5%85%B1%E5%AD%98%E9%97%AE%E9%A2%98/)