目录
1.数据库![](https://img-blog.csdnimg.cn/fbe23c518e084b7ab5b8031c605de315.png)
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定期删除![](https://img-blog.csdnimg.cn/49a3f7e6c6e64f64850f1ef470758dec.png)
1.6Redis的过期键删除策略
redis服务器实际使用的是定期删除和惰性删除两种策略:合理使用CPU时间和避免内存空间浪费之间取得平衡。
1.6.1惰性删除策略的实现![](https://img-blog.csdnimg.cn/f14f8d73fdd246e38bff466b8c16fe9a.png)
1.6.2定期删除策略的实现
activeExpireCycle函数工作模式:
1.7AOF、RDB和复制功能对过期键的处理
1.7.1生成RDB文件 ![](https://img-blog.csdnimg.cn/0af3fd73ffa34ca1a3861d85738852a9.png)
1.7.2载入RDB文件 ![](https://img-blog.csdnimg.cn/e72cb2bff04940e28cedd78efcf164d1.png)
1.7.3AOF文件写入
1.7.4AOF重写![](https://img-blog.csdnimg.cn/911d677876cb4335a3fce9460f0d6b71.png)
1.7.5复制![](https://img-blog.csdnimg.cn/cec63ea0eccf47e7906afd822cbe21c5.png)
1.8数据库通知
这个功能可以让客户端通过订阅给定的频道或者模式,莱霍智数据库中键的变化,以及数据库中命令的执行情况。
1.8.1发送通知![](https://img-blog.csdnimg.cn/19a9969c5c374d16b414f865d4071f6a.png)
1.8.2发送通知的实现