将Redis用作缓存时,如果内存空间用满,就会自动驱逐老的数据。
noeviction
:当内存使用达到阈值的时候,执行命令直接报错
allkeys-lru
:在所有的key中,优先移除最近未使用的key。(推荐)
volatile-lru
:在设置了过期时间的键空间中,优先移除最近未使用的key。
allkeys-random
:在所有的key中,随机移除某个key。
volatile-random
:在设置了过期时间的键空间中,随机移除某个key。
volatile-ttl
:在设置了过期时间的键空间中,具有更早过期时间的key优先移除。
在redis.conf文件中,
设置Redis 内存大小的限制,我们可以设置maxmemory ,
当数据达到限定大小后,会选择配置的策略淘汰数据
比如:maxmemory 300mb。
通过配置 设置Redis的淘汰策略。
比如:maxmemory-policy volatile-lru
实现需求:处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态
实现方案1:
原理:
1. 创建订单的时候绑定一个订单的token, 存放在redis中(有效期30分钟)
2. key=token value就是订单id
3. 对该key绑定过期事件回调,执行回调方法:传递key
使用定时任务30分钟后检查
按照每分钟轮训检查
当我们的key失效时,可以执行我们的客户端回调监听的方法。
需要在Redis中配置:
notify-keyspace-events "Ex"
# watch 可以监听一个或者多个key,在提交事务之前是否有发生了变化 如果发生边了变化就不会提交事务,没有发生变化才可以提交事务 版本号码 乐观锁
watch name
# Multi开启事务
multi
set name xiaoxiao
# EXEC提交事务
exec
# 取消提交事务
Discard
注意:Redis官方是没有提供回滚方法,值提供了取消事务。
Redis中本身就是单线程的能够保证线程安全问题。
mysql:
redis: