redis结合springboot设置不同缓存失效配置

5 篇文章 2 订阅
2 篇文章 0 订阅

redis 设置多个缓存不同时间失效 (JAVA) 

先说问题,在使用Spring Data Redis时,先设置不同cacheName 或者 key 的失效时间。官方文档中https://docs.spring.io/spring-data/redis/docs/2.0.0.RELEASE/reference/html/也只是提到Support for Spring Cache Abstraction,并没有实际的案例。网上有的也是命令行的操作(大家都知道)。没办法,看文档中cache 也只提到了RedisCacheMaager这个类,那么只能看看能不能在它上面做做文章。下面是他的几个属性。


使用过redis的童鞋一定会对expires这个单词敏感,因为设置缓存失效时间经常用到,下面我们就看看这个集合在哪里被用到。
protected RedisCache createCache(String cacheName) {
    long expiration = this.computeExpiration(cacheName);
    return new RedisCache(cacheName, this.usePrefix?this.cachePrefix.prefix(cacheName):null, this.redisOperations, expiration);
}

protected long computeExpiration(String name) {
    Long expiration = null;
    if(this.expires != null) {
        expiration = (Long)this.expires.get(name);
    }

    return expiration != null?expiration.longValue():this.defaultExpiration;
}

我们可以看到computeExpiration这个方法中对其进行了使用。createCashe这个方法根据cacheName进行创建。
当然这个类也提供设置casheNames的方法。
public void setCacheNames(Collection<String> cacheNames) {
    Object newCacheNames = CollectionUtils.isEmpty(cacheNames)?Collections.emptySet():new HashSet(cacheNames);
    this.configuredCacheNames = (Set)newCacheNames;
    this.dynamic = ((Set)newCacheNames).isEmpty();
}

这时我们的路就越来越清晰了。只要配置自己的RedisCasheManager。方法也很简单。
@Configuration
//@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600 * 12)
@EnableCaching
public class RedisAutoConfig extends CachingConfigurerSupport {

    @Bean
    public CacheManager cacheManager(RedisTemplate redisTemplate) {
        RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
        //设置缓存过期时间
        Map<String, Long> expires = new HashMap<>();
        expires.put("12h",3600 * 12L);
        expires.put("1h",3600 * 1L);
        expires.put("10m",60 * 5L);
        rcm.setExpires(expires);
//        rcm.setDefaultExpiration(60 * 60 * 12);//秒
        return rcm;
    }
这样我们就定义了3个不同失效时间的cache。(key=12h,失效时间12个小时)
然后通过@Cacheable注解就可以很方便的使用了。
@Cacheable(value = "12h", keyGenerator = "keyGenerator")
public PagingResultDTO<YearlySalesDto> queryYearlySales(@RequestBody SalesOrderQuery query) {
    PageHelper.startPage(query.getPageNum(), query.getPageSize());
    return MybatisPaginationUtil.paginationResult(salesOrderDao.queryYearlySales(query));
}

使用redis结合springboot实现增删查改操作可以通过引入spring-boot-starter-data-redis依赖,并在配置文件中设置redis相关的配置信息。然后可以通过使用RedisTemplate类提供的方法来实现增删查改操作。 具体步骤如下: 1. 首先,在pom.xml文件中引入spring-boot-starter-data-redis依赖,以便使用redis相关的功能。 2. 在application.properties或application.yml文件中配置redis相关的信息,包括主机名、端口、密码等。 3. 创建一个RedisTemplate的实例,在这个实例中设置redis连接工厂和序列化器等配置。 4. 在需要使用redis的类中,通过注入RedisTemplate来实现对redis的操作。 5. 使用RedisTemplate的opsForValue()、opsForHash()等方法来实现redis的增删查改操作。 例如,实现对redis中String类型数据的增删查改操作可以按以下步骤进行: 1. 在需要使用redis的类中注入RedisTemplate,例如: ```java @Autowired private RedisTemplate<String, String> redisTemplate; ``` 2. 使用RedisTemplate的opsForValue()方法获取ValueOperations对象,通过这个对象可以对redis中的String类型数据进行操作。 3. 使用ValueOperations对象的set()方法设置key-value对,并使用get()方法来获取key对应的value。 4. 使用ValueOperations对象的delete()方法来删除指定的key。 5. 使用ValueOperations对象的increment()方法来对key对应的value做增加或减少操作。 这样就可以实现对redis中String类型数据的增删查改操作了。 需要注意的是,以上是一个简单的示例,实际使用中还需要考虑异常处理、事务管理等方面的处理。同时,对于其他类型的数据(如Hash、List、Set等),可以使用相应类型的操作方法来实现类似的增删查改操作。 提供了一个基于Spring Boot & MyBatis & Redis的种子系统,可以参考该项目的代码和配置文件来了解更多关于redis结合springboot实现增删查改操作的实例。 希望以上信息对您有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Spring Boot整合MyBatis Plus,实现增删改查(CRUD)](https://blog.csdn.net/guo_erbin/article/details/130006646)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [springboot-mapper-redis:springbootredis以及通用mapper等的一个结合框架,可快速构建普通业务系统,...](https://download.csdn.net/download/weixin_42134234/18686126)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值