Redis事务
一个指令队列连续执行
事务的边界
multi 开始
exec 结束位置
set age 30
QUEUE
get age
QUEUE
set age 31
QUEUE
exec
一起执行
discard取消事务
事务中,如果有错误的语法命令,所有的指令都不执行
事务中,语法不错能执行,
已经执行的命令不会回滚。
手动回滚,记录之前的状态,出错,整体克隆
锁
watch key1 监控key,监控的key有改变,下面的指令不会执行,必须在事务外使用watch
unwatch
分布式锁
setnx lock-key value
有值则设置失败,无值则设置成功
操作完毕del key
解决超卖问题
expire lock-key second 设置锁的过期时间
pexpire lock-key milliseconds
删除策略
ttl获取指令状态
xx:具有时效性的数据
-1:永久性的数据
-2:已经过期的数据或被删除的数据或未定义的数据
过期数据删除策略:
1 定时删除
省内存,抢占cpu
2 惰性删除
获取这个key的时候在删除。节约cpu,占用内存
3 定期删除
轮询各个库,随机删除expire,挑选key的数量W可以设置。
逐出算法
执行每个命令前会调用函数检测内存是否够用,内存不足就淘汰数据。逐出算法有可能失败
相关配置
最大可用内存 maxmemory
每次选取待删除的数据个数 maxmemory-samples
删除策略 maxmemory-policy
检测亦失数据
1 volatile-lru 最近最少使用的数据淘汰
2 volatile-lfu 挑选最近使用次数最少的数据淘汰
3 volatile-ttl 挑选将要过期的数据淘汰
4 volatile-random 任意选择数据淘汰
检测全库数据
5 allkeys-lru 挑选最近最少使用的数据淘汰
6 allkeys-lfu 挑选最近使用最少的数据淘汰
7 allkeys-random 任意选择数据淘汰
放弃数据驱逐
8 no-enviction 禁止驱逐数据,会引发oom
配置 maxmemory-policy volatile-lru