# 服务器中的数据库
# 切换数据库
# 数据库键空间
# 设置键的过期时间
# 设置过期时间
- EXPIRE
- PEXPIRE
- EXPIREAT
- PEXPIREAT
服务器内部对这四种命令的实现实质上是一样的,最终都会转换成 PEXPIREAT。
# 保存过期时间
# 移除过期时间
- PERSIST
# 计算并返回剩余过期时间
- TTL
- PTTL
# 过期键的判定
- 是否存在过期字典中,不存在返回 -1
- 检查当前 UNIX 时间戳是否大于键的过期时间,如果是的话键已过期,否则未过期
# 过期键删除策略
# 定时删除
使用定时器,在键过期之后立马删除。
优点:
- 保证过期键尽快被删除,并释放内存
缺点:
- 占用 CPU,可能会影响响应时间和吞吐量
- 当前时间事件使用无序链表实现,查找复杂度高,不能高效处理大量时间事件
# 惰性删除
在获取键的时候检查过期。
优点:
- 不会消耗 CPU
缺点:
- 浪费内存,过期键不能及时删除,也可能永远不被删除
# 定期删除
每隔一段时间,检查数据库所有键是否过期。
是定时删除和惰性删除的折中,需要合理设置删除的时长和频率。
# AOF、RDB 和复制功能对过期键的处理
- 生成 RDB 文件时,不会将过期的数据保存进去;载入 RDB 文件时,如果以主服务器模式运行会忽略过期键,如果以从服务器模式运行,会在主从数据同步的时候,从库中的过期数据被清空。
- AOF 文件写入时,会在过期被删除之后,向 AOF 中追加删除命令;AOF 重写时,不会保存已过期的数据。
- 复制模式下,从服务器不会删除过期键,是主服务器发送一个删除命令后才会删除,保证主从数据一致性。
# 数据库通知
- 键空间通知,关注某个键执行了什么命令
- 键事件通知,关注某个命令被什么键执行了