目录
1.数据库
1.1服务器中的数据库
redis服务器将所有的数据库都保存在redisserver结构的db数组中。db数组的每一个项都是一个redisDb结构,每个结构代表一个数据库1.2切换数据库
默认情况下redis哭护短的目标数据库为0号数据库,但客户端可以通过执行SELECT命令来切换目标数据库。
在服务器内部,客户端状态redisclient结构的db记录的是客户端当前的目标数据库,这个db是一个指向redisDb的指针。(redisDb是个数组,里面放的就是数据库)
通过修改redisClient.db指针来实现切换数据库的功能。
1.3数据库键空间
服务器中的每个数据库都由一个redisDb结构表示,其中redisDb结构中的dict字典保存了数据库中所有的键值对:
数据库的键空间是个字典,所以所有针对数据库的操作都是通过对键空间字典进行操作实现的。
1.3.1添加新键
添加一个新键值对到数据库,实际上就是将一个新键值对添加到键空间字典里,其中键为字符串对象,而值这位任意一种类型的redis对象。
1.3.2删除键
删除数据库中的一个键,实际上就是在键空间里面删除键所对应的键值对对象。
1.3.3更新键
对一个数据库键进行更新,实际上就是对键空间里面键所对应的值对象进行更新,更新值对象类型不同,具体方法也会不同
1.3.4对键取值
对一个数据库键进行取值,实际上就是在键空间中取出所对应的值对象,根据值对象的类型不同,具体方法也会不同。
1.3.5其他键空间操作
1.3.6读写键空间时的维护操作
1.4设置键的生存空间或过期空间
服务器会自动删除生存时间为0的键,而用户可以为键设置生存时间:
1.4.1设置过期时间
1.4.2保存过期时间
1.4.3移除过期时间
1.4.4计算并返回剩余生存时间
1.4.5过期键的判定
1.5过期键的删除策略
1.5.1定时删除
1.5.2惰性删除
1.5.3定期删除
1.6Redis的过期键删除策略
redis服务器实际使用的是定期删除和惰性删除两种策略:合理使用CPU时间和避免内存空间浪费之间取得平衡。
1.6.1惰性删除策略的实现
1.6.2定期删除策略的实现
activeExpireCycle函数工作模式:
1.7AOF、RDB和复制功能对过期键的处理
1.7.1生成RDB文件
1.7.2载入RDB文件
1.7.3AOF文件写入
1.7.4AOF重写
1.7.5复制
1.8数据库通知
这个功能可以让客户端通过订阅给定的频道或者模式,莱霍智数据库中键的变化,以及数据库中命令的执行情况。
1.8.1发送通知
1.8.2发送通知的实现