SpringBoot整合Redis

1. SpringBoot整合Redis

  1. 导入依赖

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

  2.  在application.propertis 或者application.yml中配置 Redis连接词

#=======redis连接池配置==============

# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-active=20
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.jedis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=10
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0

  3. 配置类将对象序列化为JSON字符型存入Redis,如果不需要序列化,则不用配置类

@Configuration
@EnableCaching // 启用缓存,使用 Lettuce,自动注入配置的方式
@AutoConfigureAfter(RedisAutoConfiguration.class)
public class RedisConfig extends CachingConfigurerSupport {

    //缓存管理器
    @Bean
    @SuppressWarnings("all")
    public CacheManager cacheManager(LettuceConnectionFactory factory) {
        RedisCacheWriter writer = RedisCacheWriter.lockingRedisCacheWriter(factory);
        RedisSerializationContext.SerializationPair pair =
                RedisSerializationContext.SerializationPair.fromSerializer(
        new Jackson2JsonRedisSerializer(Object.class));
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();

        return new RedisCacheManager(writer, config);
    }
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(connectionFactory);

        // String 序列化方式
        StringRedisSerializer stringSerializer = new StringRedisSerializer();
        // 使用Jackson2JsonRedisSerialize替换默认序列化
        Jackson2JsonRedisSerializer 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);

        // 设置key的序列化规则
        redisTemplate.setKeySerializer(stringSerializer);
        redisTemplate.setHashKeySerializer(stringSerializer);
        // 设置value的序列化规则
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);

        return redisTemplate;
    }

    // 重新定义缓存 key 的生成策略
    @Bean
    @Override
    public KeyGenerator keyGenerator() {
        return new KeyGenerator() {
            @Override
            public Object generate(Object target, Method method,  Object... params){
                    StringBuilder sb = new StringBuilder();
                    sb.append(target.getClass().getName());
                    sb.append(method.getName());
                for(Object obj:params){
                  sb.append(obj.toString());
                }
                return sb.toString();
          }};
  }
}
View Code

  4. redisTemplate常用方法

    字符串:

      redisTemplate.boundValueOps( K  key ).set(Object value );                 设置值

      redisTemplate.boundValueOps( K  key ).set(Object value,long timeout  TimeUnit  uint);       设置值,和存储时间

      redisTemplate.boundValueOps(K  key).get();                        获取值

      redisTemplat.getExpire(Key,TimeUnit)                           获得失效时间

      redisTemplat.opsForValue().increment(key, new Double(1))                自增加1

    Hash 散列

      redisTemplate.boundHashOps(K  key ).put(HK  hashkey, HV   value);                设置值

      Set<HK> redisTemplate.boundHashOps(Key  k).keys();                                      获得当前键值对于的散列域

      List<HV>  redisTemplate.boundHashOps(Key  k).values();                                  获取所有散列的值

      Object  redisTemplate.boundHashOps(Key  k).get(Strint  name);                                                  获取对应的键值

    List 列表

      redisTemplate.boundListOps(Key  k).leftPush("b");                      左插入

      redisTemplate.boundListOps(Key  k).rightPush("a");                    右插入 

      redisTemplate.boundListOps(Key  k).leftPop();                       左弹出

      redisTemplate.boundListOps(Key  k).rightPop();                       右弹出

      List  redisTemplate.boundListOps(Key  k).range(0, -1);                                                                 获取从开始到结束的值

    Set  无序集合

      redisTemplate.boundSetOps(Key  k).add(Objcet ...);                     设置值

      Set  redisTemplate.boundSetOps(Key  k).members();                    获得所有的值

    sorted set有序集合

      redisTemplate.boundZSetOps(Key  k).add(Objcet  分数);                 添加值              

      Set  redisTemplate.boundZSetOps(Key  k.range(开始值,结束值);                获得从开始到结束的值

 

posted @ 2020-11-16 18:38  浊酒一杯温如言  阅读(219)  评论(0)    收藏  举报