目录
dict 用来维护一个 Redis 数据库中包含的所有 Key-Value 键值对,expires则用于维护一个 Redis 数据库中设置了失效时间的键(即key与失效时间的映射)。
设置了失效时间的key和具体的失效时间全部都维护在 expires 这个字典表中。
当我们使用 expire命令设置一个key的失效时间时,Redis 首先到 dict 这个字典表中查找要设置的key是否存在,如果存在就将这个key和失效时间添加到 expires 这个字典表。
当我们使用 setex命令向系统插入数据时,Redis 首先将 Key 和 Value 添加到 dict 这个字典表中,然后将 Key 和失效时间添加到 expires 这个字典表中。
惰性删除、主动删除。
Redis 服务器不主动删除过期的键值,而是当访问键值时,再检查当前的键值是否过期,如果过期则执行删除并返回 null 给客户端;如果没过期则正常返回值信息给客户端。
优点是不会浪费太多的系统资源,只是在每次访问时才检查键值是否过期。
缺点是删除过期键不及时,造成了一定的空间浪费。
根据缓存被存储的时间,离当前最远的数据优先被淘汰。
根据最近被使用的时间,离当前最远的数据优先被淘汰。
核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。
在一段时间内,缓存数据被使用次数最少的会被淘汰。
核心思想是“如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小”。
随机删除
从将要过期的数据集中选择数据删除。
当Redis节点分配的内存使用到达最大值以后,Redis会启动内存淘汰策略。
volatile前缀的策略都是从已设置过期时间数据集中进行淘汰。
allkeys前缀的策略都是面向所有key进行淘汰。
LRU(least recently used)最近最少用到的。
以上内容为个人学习理解,如有问题,欢迎在评论区指出。
部分内容截取自网络,如有侵权,联系作者删除。