Redis数据库

- Redis服务器的所有数据库都保存在服务器状态redis.h/redisServer结构的db数据中。
- 切换数据库
Redis切换数据库用select语句。
目前redis没有可以返回客户端目标数据库的命令,谨慎使用。
3.数据库键空间操作
添加 set date “2016.01.02”
删除 del date
更新 set date “2016.02.03”
4.使用Redis命令时,服务器还会执行一些额外的维护操作。
- 读取一个键后,服务器会根据键是否存在来更新服务器的键空间命中(hit)次数或不命中次数(miss)次数,这两个值可以在INFO stats命令的keyspace_hits和keyspace_miss中查看
- 读取一个键后,服务器会更新键LRU(最后一次使用)时间,这个值可以计算键的空闲时间,使用OBJECT idletime 来查看键的空闲时间
- 如果服务器在读取一个键时发现键已经过期,服务器会先删除这个过期键,然后执行其他操作。
- 如果客户端使用watch命令来监视某个键,那么服务器在对被监视的键进行修改之后,会将这个键标记为脏(dirty),让事物程序注意到这个键被修改了。
- 服务器每次修改键,会对脏键计数加1,这个计数器会触发服务器的持久化以及复制操作。
- 如果服务器开启了数据库通知功能,在对键修改之后,服务器将按配置发送相对应的数据库通知。
5.设置键的过期时间
通过expire命令或者pexpire命令
set key value
Redis数据库
Redis数据库
6.过期键删除策略
Redis数据库

  • 定时删除
    Redis数据库

  • 惰性删除
    Redis数据库
    redis命令在执行前会通过调用expireIfNeeded函数对输入键进行检查,如果过期expireIfNeeded函数会将键删除,如果没过期不做动作。
    当键存在按键存在的情况执行,不存在则按照键不存在情况执行。

  • 定期删除
    Redis数据库
    函数每次运行,会从一定量的数据库中抽取一定数量的随机键进行检查,并删除其中的过期键。
    全局变量current_db记录当前activeExprieCycle函数检查的进度。当检查完所有数据库会将current_db重置为0,重新一轮检查。
    7.AOF、RDB和复制功能对过期键的处理

  • 执行Save命令或者BGSAVE命令创建新的RDB持久化文件,程序会对数据库会中的键进行检查,过期的键不保存到RDB文件中。

  • 载入RDB文件
    1.如果服务器以主服务器模式运行,载入RDB文件时候,会忽略掉过期键。
    2.以从服务器运行,文件保存所有键,但是主从服务器进行数据同步的时候,从服务器的数据库会被清空,所有过期键对载入的RDB文件的从服务器也不会有影响。
  • AOF文件写入
    服务器已AOF持久化运行,也不会有过期键的影响。
    重写也不会有过期键的影响。

  • 复制

  • Redis数据库
    8.数据库通知

  • 可以让客户端通过订阅给定的频道或者模式。