资讯专栏INFORMATION COLUMN

springboot注解方式使用redis缓存

Muninn / 3423人阅读

摘要:引入依赖库在中引入依赖库,如下注解使用自定义应用到写数据的方法上,如新增修改方法即应用到移除数据的方法上,如删除方法提供的上下文数据提供了一些供我们使用的上下文数据,下表直接摘自官方文档名字位置描述示例对象当前被调用的方法

引入依赖库

在pom中引入依赖库,如下


    org.springframework.boot
    spring-boot-starter-data-redis


    redis.clients
    jedis
注解使用
@Cacheable

@Cacheable("product")
@Cacheable(value = {"product","order"}, key = "#root.targetClass+"-"+#id")
@Cacheable(value = "product", key = "#root.targetClass+"-"+#id")
自定义cacheManager
@Cacheable(value = "product", key = "#root.targetClass+"-"+#id” cacheManager="cacheManager")
@CachePut
应用到写数据的方法上,如新增/修改方法
@CachePut(value = "product", key = "#root.targetClass+"-"+#product.id")
@CacheEvict 
即应用到移除数据的方法上,如删除方法
@CacheEvict(value = "product", key = "#root.targetClass+"-"+#id")
提供的SpEL上下文数据

Spring Cache提供了一些供我们使用的SpEL上下文数据,下表直接摘自Spring官方文档:

名字 位置 描述 示例
methodName root对象 当前被调用的方法名 #root.methodName
method root对象 当前被调用的方法 #root.method.name
target root对象 当前被调用的目标对象 #root.target
targetClass root对象 当前被调用的目标对象类 #root.targetClass
args root对象 当前被调用的方法的参数列表 #root.args[0]
caches root对象 当前方法调用使用的缓存列表(如@Cacheable(value={"cache1", "cache2"})),则有两个cache #root.caches[0].name
argument name 执行上下文 当前被调用的方法的参数,如findById(Long id),我们可以通过#id拿到参数 #user.id
result 执行上下文 方法执行后的返回值(仅当方法执行之后的判断有效,如‘unless’,"cache evict"的beforeInvocation=false) #result
自定义Cache配置
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
    /**
    * 自定义redis key值生成策略
    */
    @Bean
    @Override
    public KeyGenerator keyGenerator() {
        return (target, method, 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();
        };
    }
    
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
      ObjectMapper om = new ObjectMapper();
      om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
      om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
      //redis序列化
      Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
      jackson2JsonRedisSerializer.setObjectMapper(om);

      StringRedisTemplate template = new StringRedisTemplate(factory);
      template.setValueSerializer(jackson2JsonRedisSerializer);
      template.afterPropertiesSet();
      return template;
    }

    /**
    * 自定义CacheManager
    */
    @Bean
     public CacheManager cacheManager(RedisTemplate redisTemplate) {
         //全局redis缓存过期时间
         RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofDays(1));  
         RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisTemplate.getConnectionFactory());
        return new RedisCacheManager(redisCacheWriter, redisCacheConfiguration);
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/62021.html

相关文章

  • java并发编程学习20--基于springboot的秒杀系统实现2--redis缓存

    摘要:在查询的服务方法上添加如下注解表明该方法的返回值需要缓存。当被缓存的数据发生改变,缓存需要被清理或者修改,这里使用如下注解清除指定的缓存。事务是一个原子操作,所有的缓存,消息,这种非强一致性要求的操作,都应该在事务成功提交后执行。 【为什么使用redis 性能极高,redis能读的速度是110000次/s,写的速度是81000次/s 丰富的数据类型,redis支持二进制案例的 Str...

    bovenson 评论0 收藏0
  • Redis详解 - SpringBoot整合RedisRedisTemplate和注解两种方式的使

    摘要:和注解的方法返回值要一致删除缓存在需要删除缓存的方法上加注解,执行完这个方法之后会将中对应的记录删除。代表返回值,意思是当返回码不等于时不缓存,也就是等于时才缓存。返回值特定值如果被设置了如果没有被设置例子自动将对应到并且返回原来对应的。 本文主要讲 Redis 的使用,如何与 SpringBoot 项目整合,如何使用注解方式和 RedisTemplate 方式实现缓存。最后会给一个用...

    SexySix 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<