redis(8)数据库

1、redis服务器中的数据库,都保存在服务器状态redisserver结构的db数组中,每一个项都是redisdb

dbnum : 服务器数据库数量,默认创建16个数据库

2、切换数据库

redisclient 保存着数据库的指针 select 2 ,切换到下标为2的数据库,通过修改Redisclient.db指针实现

3、数据库键空间

redisdb结构的dict字典保存了数据库中的所有键值对,将这个字典称为键空间(key space)

键空间中的键是一个字符串对象,值可以是字符串对象,列表对象,hash对象,集合对象,有序集合对象任意一种redis对象

3.1、redis支持 添加新键,删除键,对键取值,清空数据库

4、读写键空间时的维护

读取一个键后,服务器会根据键是否存在来更新服务器键空间命中(hit)次数或键空间不命中(miss)次数,值可以通过info stats 命令查询keyspace_hits 属性和keyspace_misses属性

读取后悔更新lru,最后一次使用时间,这个值可以用于计算键的空置时间,使用objectidletime key来查看key闲置时间

如果服务器读取一个键时发现该键过期,会先删除这个过期键,然后执行余下操作

如果客户端使用watch命令监视了某个键,那么服务器被监视的键修改之后,会将这个键标记为脏,从而让事务程序注意到已经被修改,每次修改,都会对脏键计数器增1

5、设置键的生存时间或过期时间 expire pexpire expireat pexpireat

5.1、保存过期时间,redisdb结构的expires字典保存了数据库中所有键的过期时间,我们称为字典的过期字典,键是一个指针,指向键空间中某个键对象,值是一个long类型整数,保存了键所指向的数据库的过期时间

6、移除过期时间 persist

7、过期键删除

定时删除,设置过期时间同时,创建一个定时器,让定时器在键的过期时间来临时,删除键,主动删除,耗CPU,节省内存

惰性删除,放任键过期不管,但是每次从键空间中获取时,都检查取得的键是否过期,如果过期就删除该键,如果没有过期,就返回该键,被动删除,耗内存,省CPU

定期删除:每个一段时间,就对数据库进行一次检查,删除里面的过期键,至于删除多少个数据库,则由算法决定 ,需要合理设置执行时长和执行频率

可以配合使用第一种和第二种

8、aof rdb 和复制功能对过期键的处理

执行save或者bgsave命令创建一个新的rdb文件时,程序会对数据库中的键进行检查,已过期键不会被保存到rdb文件中

当启动redis服务器时候,如果开启了rdb功能,,服务器将载入rdb文件

当服务器以aof持久化模式运行,某个过期键被删除,aof文件会追加(append)一条del命令,来显式地记录该键已被删除

复制

主服务器命令会同步到从服务器

9、数据库通知

你可能感兴趣的:(redis(8)数据库)