Redis 是一个键值对数据库服务器,服务器中每个数据库都由 redisDB 结构表示。其中,redisDB 结构的 dict 字典保存了数据库中所有的键值对,这个字典被称为键空间
键空间和用户所见的数据库是直接对应的:
- 键空间的键就是数据库的键,每个键都是一个字符串对象
- 键空间的值就是数据库的值,每个值是任意一种 Redis 对象
所有针对数据库的操作,比如 crud,实际上都是通过对键空间字典进行操作实现的
读写键空间时的维护操作
当使用 Redis 命令对数据库进行读写时,服务器不仅会对键空间执行指定的读写操作,还会执行一些额外的维护操作,其中包括:
- 读取一个键后(读写操作都要对键进行读取),服务器会根据键是否存在来更新服务器的键空间命中(hit)次数或键空间不命中(miss)次数,这两个可以在 INFO stats 命令的 keyspace_hits 属性和 keyspace_misses 属性中查看
- 在读取一个键后,服务器会更新键的 LRU 时间,这个值可以用于计算这个键的闲置时间,使用 OBJECT idletime <key> 命令可以查看
- 如果服务器读取键后发现已经过期,就会先删除这个键,然后再执行其他操作
- 如果由客户端使用 WATCH 命令监视某个键,那么服务器对被监视的键修改以后,会将这个键标记为 dirty,从而让事务程序注意到这个键已经被修改过
- 服务器每次修改一个键后,都会对 dirty 键计数器的值增 1,这个计数器会触发服务器的持久化及复制操作
- 如果服务器开启了数据库通知功能,那么对键修改之后,服务器将按配置发送
相应的数据库通知
网友评论