Springboot 整合Redis

pom.xml

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

application.yml

server:
  port: 9891

spring:
  redis:
    host: 106.xx.xxx.229
    port: 6379
    password: 123456

具体配置属性在org.springframework.boot.autoconfigure.data.redis.RedisProperties
测试代码

@RestController
public class RedisController {
    @Autowired
    StringRedisTemplate redisTemplate;

    @GetMapping(value="/put/")
    public String put(){
        try{
            redisTemplate.opsForValue().set("key1","hello world!");
            return redisTemplate.opsForValue().get("key1");
        }catch (Exception e){
            return e.getMessage();
        }
    }
    @GetMapping(value="/get/")
    public String get(){
        try{
           String mes= redisTemplate.opsForValue().get("key1");
            return mes;
        }catch (Exception e){
            return e.getMessage();
        }
    }
}


SpringBoot Redis使用
RedisTemplate
  • 使用RedisTemplate时对象需要实现序列化接口
  • 需要重新配置序列化(默认JdkSerializationRedisSerializer,转化为byte[]redis服务器中不便查看,其它序列化方式在org.springframework.data.redis.serializer包下,存储形式如下)
    测试
 @GetMapping(value="/put/obj")
    public String putList(){
        try{
            redisTemplate.opsForValue().set("user1",new User("张三","北京"));
            return redisTemplate.opsForValue().get("user1").toString();
        }catch (Exception e){
            return e.getMessage();
        }
    }
    @GetMapping(value="/get/obj")
    public String getList(){
        try{
            User user= (User)redisTemplate.opsForValue().get("user1");
            return user.toString();
        }catch (Exception e){
            return e.getMessage();
        }
    }

默认


创建配置类自定义序列化类

@Configuration
public class RedisConfig extends CachingConfigurerSupport {
    /**
     * 配置Jackson2JsonRedisSerializer序列化策略
     */
    private Jackson2JsonRedisSerializer<Object> Jackson2JsonSerializer() {
        // 使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();

        // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

        // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);

        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
        return jackson2JsonRedisSerializer;
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        // 用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
        redisTemplate.setValueSerializer(Jackson2JsonSerializer());

        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        // 使用StringRedisSerializer来序列化和反序列化redis的key值
        redisTemplate.setKeySerializer(stringRedisSerializer);
        //其他数据类型略...
        
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

Sentinel 哨兵模式(springboot创建JedisConnectionFactory时会先判断是否是哨兵模式或者集群、最后才是单机模式)
spring:
  redis:
    timeout: 10000  # 连接超时时间(毫秒)
# 单机模式
#    host: 106.xx.xxx.229
#    port: 6379
    password: 123456
#哨兵模式

    sentinel:
      #password: 123456
      master: mymaster
#两个sentinel
      nodes:
        - 106.xx.xxx.229:6384 
        - 106.xx.xxx.229:6383

    jedis:
      pool:
        max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
        max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-idle: 8 # 连接池中的最大空闲连接
        min-idle: 0  # 连接池中的最小空闲连接
private JedisConnectionFactory createJedisConnectionFactory(
			ObjectProvider<JedisClientConfigurationBuilderCustomizer> builderCustomizers) {
		JedisClientConfiguration clientConfiguration = getJedisClientConfiguration(builderCustomizers);
		if (getSentinelConfig() != null) {
			return new JedisConnectionFactory(getSentinelConfig(), clientConfiguration);
		}
		if (getClusterConfiguration() != null) {
			return new JedisConnectionFactory(getClusterConfiguration(), clientConfiguration);
		}
		return new JedisConnectionFactory(getStandaloneConfig(), clientConfiguration);
	}
原文地址:https://www.cnblogs.com/jinit/p/13739703.html