redis -- 过期 淘汰 事务原子机制

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/danneel/article/details/70983914

redis的过期机制:

1、创建一个key value的时候同时指定存活时间:

set key value EX 60 #键值对存活60秒 
set key value PX 60 #键值对存活60毫秒

2、为已经存在的key设置过期时间:

expire key 60 #key60秒之后失效,在2.6版本之后使用pexpire设置毫秒数

3、查看一个key的有效期:

ttl key #在2.6版本以上可以使用pttl,查看毫秒数

4、撤销一个键的生存期

PERSIST key #撤销键的生存期设定

在reids里面有两个全局的哈希表:
一个是所有的key-value的,设置了过期时间的key-value单独保存在一个哈希表。
redis何时进行过期处理:
1、必要的时候:当访问的时候key可能过期了,这时候作过期处理
2、cpu空闲时:有两个时间,一个是一次事件循环结束,进入事件侦听前;第二个是系统空闲的时候后台做定期任务,只占用cpu25%的时间(每次100ms,25ms用于清理,其他时间其他业务)。

过期key的清理算法

依次遍历所有的db,从db中随机取20个key,判断是否过期,如果过期,去除。如果有5个以上的key过期,重复步骤,否则进入下一个db,进行相同的操作。
注意:当在操作的过程中,达到了时间的限定,操作停止。

在配置文件中有关于设置删除过期key的频率的值hz:

数值设置越大,表示去除过期key的频率越高,删除过期key会越及时。

redis淘汰机制


1、判断是否设置了最大允许的内存maxmemory
2、如果设置了,调用freeMemoryIfNeeded,判断内存是否超出了最大内存限制
3、如果超出了最大内存设置,按照设定的淘汰策略淘汰key,直到内存小于最大内存。

设定的淘汰策略:

redis的一般六种淘汰策略:

淘汰算法:

1、依次遍历所有的db
2、按照淘汰策略挑选一个key进行淘汰,若果不是随机删除,还要参考设定的样本数:

在样本中挑选最佳的
3、遍历完成,计算是否还超过最大内存。
4、如果还超过最大内存,重复步骤1.

redis原子事物性:

事务是完成一个工作的一系列的操作,在事务中每个命令逐条执行,事务是一个原子性的动作,要么全部操作完成,要么全部不做。
事务的操作过程:
1、使用multi命令标示事务的开始
2、命令入队
2、使用exec执行事务的所有指令

如果在键入命令的时候选择放弃事务绑定,可以使用 discard命令。
相关的命令操作:
watch key:监视一个多个key如果这些被监视的key被其他命令修改,则该事务取消。
例子:
redis-cli 1:
监视mykey:并设定事务

这时候,在第二个终端将其进行修改:

在第一个客户端查看:

可以看到第一个设定的事务没有执行的效果,它被取消了。


all

猜你喜欢

转载自blog.csdn.net/danneel/article/details/70983914
今日推荐