SpringBoot中使用Jedis进行缓存

9 篇文章 0 订阅
7 篇文章 0 订阅

1.引入Jedis依赖

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

2.配置Jedis

        # 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.pool.max-active=13
        # 连接池最大阻塞等待时间(使用负值表示没有限制)
        spring.redis.pool.max-wait=-1
        # 连接池中的最大空闲连接
        spring.redis.pool.max-idle=0
        # 连接池中的最小空闲连接
        spring.redis.pool.min-idle=0
        # 连接超时时间(毫秒)
        spring.redis.timeout=1800000

3.在@Configuration中配置Jedis

        /**
         * 缓存管理器
         * 
         * @param redisTemplate
         * @return
         */
        @Bean
        public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {
            RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
            // 设置缓存过期时间
            cacheManager.setDefaultExpiration(10000);
            return cacheManager;
        }

        /**
         * RedisTemplate模板配置,设置数据存入 redis 的序列化方式
         * 
         * @param redisConnectionFactory
         *            redis连接工厂
         * @return RedisTemplate 对象
         */
        @SuppressWarnings({ "unchecked", "rawtypes" })
        @Bean
        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
            redisTemplate.setConnectionFactory(redisConnectionFactory);
            // 使用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);
            // 设置value的序列化规则和 key的序列化规则
            redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
            redisTemplate.setKeySerializer(new StringRedisSerializer());
            redisTemplate.setHashKeySerializer(jackson2JsonRedisSerializer);
            redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
            redisTemplate.setDefaultSerializer(jackson2JsonRedisSerializer);
            redisTemplate.setEnableDefaultSerializer(true);
            redisTemplate.afterPropertiesSet();
            return redisTemplate;
        }

        /**
         * 实例化 HashOperations 对象,可以使用 Hash 类型操作
         *
         * @param redisTemplate
         * @return
         */
        @Bean
        public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
            return redisTemplate.opsForHash();
        }

        /**
         * 实例化 ValueOperations 对象,可以使用 String 操作
         *
         * @param redisTemplate
         * @return
         */
        @Bean
        public ValueOperations<String, Object> valueOperations(RedisTemplate<String, Object> redisTemplate) {
            return redisTemplate.opsForValue();
        }

        /**
         * 实例化 ListOperations 对象,可以使用 List 操作
         *
         * @param redisTemplate
         * @return
         */
        @Bean
        public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {
            return redisTemplate.opsForList();
        }

        /**
         * 实例化 SetOperations 对象,可以使用 Set 操作
         *
         * @param redisTemplate
         * @return
         */
        @Bean
        public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {
            return redisTemplate.opsForSet();
        }

        /**
         * 实例化 ZSetOperations 对象,可以使用 ZSet 操作
         *
         * @param redisTemplate
         * @return
         */
        @Bean
        public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {
            return redisTemplate.opsForZSet();
        }

4.在Service层使用注解
@CacheConfig(cacheNames = “areaLinkageService”) :cacheNames为key的名称前缀,areaLinkageService会转换成Bean的全路径
@Cacheable(value=”findProvince”):声明使用缓存,value会和参数一起做为key,当缓存中存在的情况不会调用方法,而是直接从缓存中返回结果
@CachePut(value=”findProvince”):该注解表示每次请求都会写入缓存,但是不会从缓存中取数据
@CacheEvict(value=”findProvince”, allEntries=true) :注解表示清除指定缓存
详细属性参考:https://www.cnblogs.com/fashflying/p/6908028.html
5.在启动类上启用缓存

        @EnableCaching
        public class TemplateApplication {...}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值