redis缓存有效期
A. redis怎么清除缓存
Redis清除缓存的方法有多种,可以通过不同的命令和策略来实现。
详细解释如下:
1. 使用FLUSH命令
Redis提供了FLUSH命令来清除缓存。其中,`FLUSHALL`命令用于清除所有key,而`FLUSHDB`命令仅清除当前数据库的key。这些命令会立即删除所有相关键,从而清空缓存。但需要注意的是,这些操作是不可逆的,一旦执行,数据将永久丢失。因此,在执行前需要谨慎考虑。
2. 使用DEL命令
除了FLUSH命令,还可以使用DEL命令来删除特定的key,从而清除相应的缓存项。与FLUSH不同,DEL允许你按需删除特定的数据。这是一种更灵活的方式,可以根据实际需求来清除缓存。
3. 使用EXPIRE命令设置缓存过期时间
另一种策略是设置缓存的过期时间。通过EXPIRE命令,你可以为key设置一个过期时间。当key达到设定的时间后,Redis会自动删除该key及其相关的缓存数据。这种方式适用于那些有生命周期限制的缓存数据。
4. 使用Redis策略配置
除了上述操作命令,还可以通过Redis的配置策略来管理缓存。例如,可以设置Redis的持久化策略,定期将数据持久化到磁盘,同时清理内存中的缓存数据。此外,还可以结合Redis的驱逐策略,在缓存达到上限时自动删除不常用的数据。
总的来说,Redis提供了多种方法和策略来清除缓存。在使用时,应根据实际需求和数据重要性来选择合适的方法。同时,操作前务必谨慎,确保不会误删重要数据。通过合理配置和使用Redis,可以有效地管理缓存,提高系统的性能和响应速度。
B. 自定义rediscachemanager
在项目的Redis配置类RedisConfig中,自定义名为cacheManager的Bean组件,用于Redis缓存管理。
java
@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
创建String和JSON格式序列化对象,分别用于缓存数据key和value的转换。
RedisSerializer strSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);
解决查询缓存转换异常问题,使用ObjectMapper进行序列化。
ObjectMapper om = new ObjectMapper();
设置ObjectMapper的可见性和非最终类型,以适应序列化。
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
定制序列化方式,使用序列化对象对key和value进行序列化。
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofDays(1))
.serializeKeysWith(RedisSerializationContext.SerializationPair
.fromSerializer(strSerializer))
.serializeValuesWith(RedisSerializationContext.SerializationPair
.fromSerializer(jacksonSeial))
.disableCachingNullValues();
构建缓存管理器,设置缓存默认配置。
RedisCacheManager cacheManager = RedisCacheManager
.builder(redisConnectionFactory).cacheDefaults(config).build();
返回自定义的缓存管理器。
}
自定义的RedisCacheManager中,通过`@Bean`注解实现,包含对缓存数据key和value的序列化方式定制。使用`StringRedisSerializer`和`Jackson2JsonRedisSerializer`分别进行字符串和JSON格式的序列化,同时设定缓存有效期为1天。
完成自定义后,可进行测试以验证效果。使用自定义序列化机制的RedisCacheManager时,实体类无需实现序列化接口。
学习上述内容,可参考拉勾教育的《Java工程师高薪训练营》课程,该课程提供全面的知识体系和内推大厂服务。建议感兴趣的朋友也查看。
C. Redis缓存过期机制
一、针对与设置了过期时间的key值
1.(主动)定期删除:定时随机的检查过期的key,如果过期则清理删除
redis.conf(每秒检查的次数1-500)配置: hz 10
2.(被动)惰性删除:当客户端请求到一个已经过期的key时,redis会检查是否过期并删除
所以,虽然key过期了,但是没被清理的话,还是会占内存的。
二、内存淘汰管理机制Memory Management
当内存占满之后,redis提供缓存淘汰机制。
redis.conf: maxmemory <bytes>
* noeviction:旧缓存永不过期,新缓存设置不了,返回错误
* allkeys-lru:清除最少用的旧缓存,然后保存新的缓存(推荐使用)
* allkeys-random:在所有的缓存中随机删除(不推荐)
* volatile-lru:在那些设置了expire过期时间的缓存中,清除最少用的旧缓存,然后保存新的缓存
* volatile-random:在那些设置了expire过期时间的缓存中,随机删除缓存
* volatile-ttl:在那些设置了expire过期时间的缓存中,删除即将过期的