Redis最大的特点是不仅可以保存key/value数据对象,还可以对这个键设置过期时间,有没有想过在设置过期时间时,Redis是如何维护这些key,和普通的没有设置过期时间的key有什么区别吗?当Key的过期时间到大之后,Redis是通过什么方式来删除这些Key的呢?带着这些问题我们一起看看吧~
Redis的数据库
在了解键的过期机制之前,我们先了解一下Redis中的数据库,当使用Redis可视化工具时,连接到Redis时,可以看到很多个数据库,在执行select
命令时就会切换数据库。
可以看到有16个数据库,每个数据库都是相互隔离,互不影响,这主要是Redis关于数据库的设计导致。
-
Redis数据库结构
struct redisServer { //... // 一个数组,保存的是服务器中的所有数据组,数组中每个对象都是RedisDb redisDb *db; // 服务器的数据库数量,默认16个 int dbnum; //... } // 每个数据库对象 typedef struct redisDb { //... // 数据库键空间,保存着数据库中的所有键值对 dict *dict; //... }
其中RedisDb对象中保存的dict是一个字典,这个字典被称为键空间。
键空间中的键就是数据库中的键,是一个字符串对象。
键空间中的值就是数据库中的值,每个值可以是字符串对象、哈希对象、列表对象、集合对象、有序集合对象。
在执行Redis命令,例如: