redis第九章 数据库
简单知识总结:
1.redis默认会创建16个数据库。
2。切换数据库:默认是0数据库,如果要切换的话 用select 2,就切到2号数据库。
3.redis 每个库中所有的键值对都保存在dict字典中,这个字典称键空间。
4.对key设置有效期,有两个方法。一个是expire命令,一个是setex命令,后者是一个类型限定的命令,只能对字符串设置过期时间。
5.redisDB结构的expires字典保存了数据库中所有键的过期时间,我们称这个字典为过期字典。
6.过期键删除策略:
6.1)定时删除:在给一个键设置有效期的时候,创建一个定时器,让定时器在键的过期时间来临的时候,立即执行对键的删除。但是这样会增加cpu的负担。
6.2)惰性删除:每次对键操作的时候,才会判断该键是否过期。但这样会导致所有过期的键不回被删除,增加硬盘压力。
6.3)定期删除:每隔一段时间,redis会清除过期的键。虽然这种方式减轻了cpu负担,对硬盘压力也减少了,但是存在一个过期的键没有被及时删除的问题,导致脏数据。
7.redis的过期删除策略
redis是使用定期删除和惰性删除结合使用的策略。
8。aof ,rdb 和复制功能对过期键的处理
8.1)生成RDB文件:在执行save ,或者BGSAVE命令创建一个新的RDB文件时,程序会对数据库中的键惊醒检查,如果是过期的key,不回被写入到新的RDB文件中
8.2)载入RDB文件:如果服务器以主服务器模式运行,过期的键不回被载入到数据库中。
如果服务器以从服务器模式运行,RDB中的键都会被载入到数据库中,然后 主从数据库在数据同步的时候,会删除过期键。
AOF文件写入:当库中某个键过期,但是并没有惰性删除或者定期删除的时候,aof不回因为这个过期键而产生影响。当过期键被删除,则会记录一条DEL的命令,来记录该键被删除。
AOF重写:已过期键不会被写入到AOF文件中
复制
当服务器运行在复制模式下时,从服务器过期键的删除动作由主服务器控制。
1) 当主服务器在删除一个过期键后,会显示地向所有从服务器发送一个DEL命令,告知从服务器删除这个过期键。
2)从服务器在执行客户端发送的读命令时,及时碰到过期键也不会将过期键删除,而是继续返回过期键的值,就像该键没有过期一样。
3)从服务器只有在街道主服务器发来的DEL命令,才会删除键