- 内存中数据的状态
- 通过TTL指令获取
- XX:具有时效性的数据
- -1:永久有效的数据
- -2:已经过期的数据或被删除的数据或未定义的数据
注:过期的数据不一定被删除了
-
时效性数据的存储结构
在redis存储空间中,有一个expires区域,将数据的地址作为field,将数据的过期时间作为value
-
数据删除策略
- 定时删除
- 惰性删除
- 定期删除
2、定时删除与惰性删除注:数据删除策略的目标并不是真正的删除数据,而是在内存占用和cup占用之间寻找一种平衡。
-
定时删除
创建一个定时器,当key的过期时间到达时,立即执行对键的删除操作
优点:节约内存
缺点:cpu压力大
-
惰性删除
数据到达过期时间后,不立即删除.等下次访问该数据时,再删除.
3、定期删除优点:节约cpu性能
缺点:内存压力大
-
redis存储空间
-
定期删除过程解释
redis会顺序的对16个expires进行检测。对某个expires检测时,随机挑选w个key检测是否超时。如果超时,删除key。如果一轮中删除的**key的数量>w乘以25%,循环该过程。如果一轮中删除的key的数量<**w*25%,检测下一个expires。
-
定期删除原理
- 读server.hz的值,确定每次检测多久。
- durrent_db:记录执行到了哪个expires位置
-
删除策略对比
- 使用淘汰策略场景
新数据进入redis时,内存空间不足
-
怎么判断内存空间剩余大小呢?
redis在执行每个命令前,会调用freeMemoryIfNeeded()检测内存空间是否充足。
-
逐出算法
及清理数据的策略。该过程并不是100%能清理出足够可用的内存空间,如果不成功,则反复执行。如果全部数据都尝试完毕,则会返回错误信息。
-
那么,如何确定该删除哪些数据呢?
通过配置:maxmemory-policy XXX
XXX可选:
- volatile-lru:淘汰最久没有访问的数据
- volatile-lfu:淘汰最少访问的数据
- volatile-ttl:淘汰将要过期的数据
- volatile-random:任意选择淘汰
注:这是expires里面的淘汰策略
检索全库数据:
放弃数据驱逐(淘汰)配置:no-enviction



