数据库
介绍服务器保存数据库的方法,客户端切换数据库的方法,数据库保存键值对的方法,以及对数据库的增删改查
服务器中的数据库
Redis服务器将所有数据库都保存在服务器状态redisServer结构的db数组中,db数组的每一项都是一个redisDb结构,代表一个数据库
struct redisServer{
redisDb *db; //一个数组,保存所有数据库
int dbnum; //服务器数据库数量
}
初始化服务器时,根据redisServer的dbnum属性决定创建多少个数据库,默认为16
切换数据库
Redis客户端的目标数据库默认为0号,执行SELECT命令切换目标数据库
服务器内部,客户端状态redisClient结构的db属性记录客户端当前的目标数据库,这个属性是一个指向redisDb结构的指针:
typedef struct redisClient{
redisDb *db; //记录客户端正在使用的数据库
}
数据库键空间
Redis是KV数据库服务器,服务器每个数据库都是一个redisDb结构表示,redisDb结构的字典dict保存数据库中所有键值对,这个字典称为键空间(key space)
typedef struct redisDb{
dcit *dict; //保存数据库中所有键值对
}
键空间和用户所见的数据库是直接对应的
- 键空间的键也就是数据库的键,每个键都是一个字符串对象
- 键空间的值也就是数据库的值,可以是字符串、列表、哈希表、集合、有序集合对象
数据库的键空间是一个字典,所以对数据库的增删改查都是通过对字典进行操作来实现
键空间操作
redis> SET string_key, object_value1 //添加键
redis> DEL string_key //删除键
redis> SET string_key, object_value2 //更新键
redis> GET string_key //对键取值
FLUSHDB:清空数据库
RANDOMKEY:随机返回键
DBSIZE:返回数据库键数量
LRANGE
EXISTS
RENAME
KEYS
…
(待补充)
键生存/过期时间
过期时间是一个UNIX时间戳,当键过期时间来临,服务器自动从数据库中删除这个键
TTL/PTTL命令接受一个带生存时间或过期时间的键,返回其剩余生存时间
设置过期时间
Redis提供了4个命令设置过期时间:
- EXPIRE<key> <ttl>:将key的生存时间设为ttl秒。
- PEXPIRE<key> <ttl>:将key的生存时间设为ttl毫秒。
- EXPIREAT<key> <timestamp>:将key的过期时间设置为timestamp秒数时间戳。
- PEXPIREAT<key> <timestamp>:将key的过期时间设置为timestamp毫秒数时间戳。
保存过期时间
redisDb中有一个expires的字典数据结构保存所有键的过期时间,也称为过期字典。
- 过期字典的键是一个指针,指向键空间的某个键对象
- 过期字典的值是一个long long类型的整数,保存了键所指向的数据库键的过期时间(毫秒精度的Unix时间戳)
typedef struct redisDb{
dict *expires; //过期字典,保存键的过期时间
}
RDB持久化
AOF持久化
事件
客户端
服务器
(待补充)