首页 > 数据库 >redis + 注解自动缓存

redis + 注解自动缓存

时间:2022-11-28 14:44:06浏览次数:35  
标签:缓存 redis supervision key new 注解 id

1、redis配置

  引入依赖

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

 redis配置

spring:
  redis:
    port: 6379
    host: 127.0.0.1
    password: 123456
@Configuration
@EnableCaching
public class RedisCacheManagerConfig {
    @Bean
    public CacheManager RedisCacheManager(RedisConnectionFactory factory) {
        FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);

        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
        serializer.setObjectMapper(mapper);

        // 配置序列化解决乱码的问题
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                // 设置缓存过期时间  为解决缓存雪崩,所以将过期时间加随机值
                .entryTtl(Duration.ofSeconds(60 * 60 + new Random().nextInt(60 * 10)))
                // 设置key的序列化方式
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
                // 设置value的序列化方式
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(serializer));
        // .disableCachingNullValues(); //允许缓存null值
        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                .cacheDefaults(config)
                // 启用RedisCache以将缓存 put/evict 操作与正在进行的 Spring 管理的事务同步
                .transactionAware()
                .build();
        return cacheManager;
    }
}

2、注解使用

@Override
    @CachePut(cacheNames = "supervision",key = "#request.id")
    public Supervision editSupervision(SupervisionAddRequest request) {
        Supervision supervision = new Supervision();
        supervision.setId(request.getId());
        supervision.setEnterpriseId(request.getEnterpriseId());
        supervision.setAnswer(request.getAnswer());
        supervision.setDeleted(0);
        return supervision;
    }

    @Override
    @Cacheable(cacheNames = "supervision", key = "#id",condition = "#result!=null")
    public Supervision info(Integer id) {
        return getById(id);
    }

    @Override
    @CacheEvict(cacheNames = "supervision", key = "#id")
    public Boolean delete(Integer id) {
        Supervision supervision = new Supervision();
        supervision.setId(id);
        supervision.setDeleted(1);
        return updateById(supervision);
    }

 

@CachePut:更新缓存,没有就新增
@Cacheable:先查缓存,缓存中没有就执行方法,将结果值存入缓存
@CacheEvict:删除缓存
  cacheNames,key:在redis中的key。以上在redis中的key为:supervision::id。类型为string
 

 
 

标签:缓存,redis,supervision,key,new,注解,id
From: https://www.cnblogs.com/junnnnnnnn/p/16932153.html

相关文章

  • Mysql与Redis如何保证数据的一致性?
    问题分析:当MySQL中的数据发生更新时,就面临一个问题,如何确保MySQL与Redis数据的一致性,我们有两个选择:先更新MySQL,后删除(或更新)Redis先删除(或更新)Redis,后更新MySQL......
  • 注解开发-->面向切面
    1.创建一个接口 2.编写切面的方法   3.在方法上调用注解 ......
  • redisOject 和 底层数据结构对应 学习笔记
    笔记摘抄自https://pdai.tech/md/db/nosql-redis/db-redis-data-type-enc.htmlredisObject查看编码命令setk11objectencodingk1setk2helloobjectencoding......
  • 面试官:介绍一下 Redis 三种集群模式
    小码今天去面试。面试官:给我介绍一下Redis集群,小码:啊,平时开发用的都是单机Redis,没怎么用过集群了。面试官:好的,出门右转不谢。小码内心困惑:在小公司业务量也不大,单机的......
  • Redis学习(十)之redis中的数据类型之Streams类型
      1、redis流这种结构类似于日志追加; 2、redis生成一个唯一id为每个流,使用id检索他们的关联条目或者处理后续条目,这个怎么理解???到底是怎么关联的? 3、redis流支持多......
  • django-缓存
    缓存缓存的作用是缓解服务器压力,或者者说是数据库的压力,我们可以将一些常用的页面或数据放入缓存中,用户查询时,直接去缓存里面查,以此来缓解服务器压力 django提供的缓存......
  • MySQL进阶实战6,缓存表、视图、计数器表
    一、缓存表和汇总表有时提升性能最好的方法是在同一张表中保存衍生的冗余数据,有时候还需要创建一张完全独立的汇总表或缓存表。缓存表用来存储那些获取很简单,但速度较慢的数......
  • 封装Redis工具类
    基于StringRedisTemplate封装一个缓存工具类,满足下列需求:方法1:将任意Java对象序列化为json并存储在string类型的key中,并且可以设置TTL过期时间方法2:将任意Java对象序......
  • Redis这些知识你了解吗?
    Redis非关系型数据库一、关于Redis1.什么是NoSql?NoSQL(NoSQL=NotOnlySQL),意即“不仅仅是SQL”,泛指非关系型的数据库.它们都有些共同的特征:不需要预定义......
  • Centos7下redis5安装、部署、开机自启
    不知道为何,使用centos7安装redis4.0以上版本的yum源一直找不到,官网也没有,具体原因没有去调查,所以这里使用源码安装做个记录 1.由于Redis是用C语言编写,所以编译......