Reids事务及分布式锁

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

原创文章 41 获赞 11 访问量 1475

猜你喜欢

转载自blog.csdn.net/weixin_44038332/article/details/105873190