文章目录
参考蚂蚁课堂
1.Redis淘汰策略简介
Redis数据存放在内存里面内存有可能撑爆,为了不让内存撑爆所以Redis必须得有一些淘汰策略。一旦达到Redis缓存阈值就会触发淘汰策略。
在redis.conf文件中,我们可以设置Redis内存大小的限制。
如图所示我们能看出redis默认缓存限制就是你的内存大小,redis没有指定特殊的阈值。但实际生产中我们一般都会进行设置。
2.Redis六种淘汰策略
- noeviction:当内存使用达到阈值的时候,所有引起申请内存的命令会报错。
- allkeys-lru:在所有的key中,优先移除最近未使用的key(推荐)。
- volatile-lru:在设置了过期时间的键空间中,优先移除最近未使用的key
- allkeys-random:在所有的key中,随机移除某个key。
- volatile-random:在设置了过期时间的键空间中,随机移除某个key。
- volatile-ttl:在设置了过期时间的键空间中,具有更早过期时间的key优先移除。
如果我们要设置具体的缓存策略的话也可以在redis.conf文件里进行设置。
把这块的注释去掉然后改成自己想要设置的淘汰策略就行了。
3.Redis中的自动过期机制
3.1简介
处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态。
1.这个我们可以这样处理首先我们可以采用定时任务,30分钟之后检查该笔订单是否已经支付。
2.根据key有效期事件回调实现。
原理:
1.创建订单的时候绑定一个token存放在redis中(有效期只有30分钟)key = token value为订单Id。
2.对该key绑定过期事件回调。
执行我们的回调方法传递我们的key到数据库中找你的订单如果还没支付的话我就把他的状态改成已超时。如果发现这个订单已支付的情况下那我就啥也不干。
3.2开启回调监听机制
在redis配置文件中我们可以开启事件回调监听
就是把notify-keyspace-events Ex注释去掉放开
3.3SpringBoot整合redis实现key失效监听
首先我们添加配置类
@Configuration
public class RedisListenerConfig {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;