Redis (二) 数据库

前言

本文基于 黄建宏-《Redis设计与实现》总结。第二部分为Redis 数据库,RDB持久化,AOF持久化,事件,客户端,服务器

数据库

服务器中的数据库

Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每个项都是一个redis.h/redisDb结构,每个redisDb结构代表一个数据库。
在初始化服务器时,会根据redisServer的dbnum属性来创建多少个数据库,默认值为16

服务器数据库示例

在这里插入图片描述

切换数据库

	默认情况下,Redis客户端的目标数据库为0号数据库,可以通过select命令来切换目标数据库,如 SELECT 1 OR SELECT 2
	### 客户端状态与服务器状态之间的关系

在这里插入图片描述
在不同语言的客户端中,没有都一直显示目标数据库的号码,为了避免对数据库进行误操作,在执行Redis命令之前,先执行SELECT命令,切换到指定数据库再执行别的命令。

数据库键空间

Redis服务器中每个数据库redis.h/redisDb结构的dict字典保存了该数据库的所有键值对,这个字典称为键空间

数据库键空间示例

redis>SET message "hello world"
OK
redis>RPUSH alphabet "a" "b" "c"
(integer)3
redis>HSET book name "Redis in Action"
(integer)1
redis>HSET book author "Josiah L. Carlson"
(integer)1
redis>HSET book publisher "Manning"
(integer)1

在这里插入图片描述

读写键空间时的维护操作

当使用Redis命令对数据库进行读写操作时,服务器不仅会对键空间执行指定的读写操作,还会执行一些额外的维护操作,包括

  • 在读取一个键后,服务器会根据键是否存在来更新服务器的键空间 hit/miss 次数,这两个值可以在INFO stats命令的keyspace_hits/keyspace_misses属性查看
  • 在读取一个键后,服务器会更新键的LRU时间,这个值可以用于计算键的闲置时间,使用OBJECT idletime命令可以查看键的闲置时间
  • 如果服务器读取键时发现该键已经过期,那么会先删除这个过期键,再执行余下操作
  • 如果客户端使用WATCH命令监视了某个键,那么服务器再对该键进行修改后,会将其标记为dirty,从而让事务程序注意到该键已经被修改过
  • 服务器每次修改一个键,都会对dirty键计数器的值加一,这个计数器会触发服务器的持久化以及复制操作
  • 如果服务器开启了数据库通知功能,对键修改后,服务器会按配置发送响应的数据库通知

设置键的生存时间/过期时间

通过EXPIRE(设置秒)或PEXPIRE(设置毫秒)可以给键设置生存时间TTL,过后服务器会自动删除生存时间为0的键

EXPIRE key 5

通过EXPIREAT或PEXPIREAT可以给键设置过期时间,过期时间时一个UNIX时间戳,过后服务器会自动删除这个键

EXPIREAT key 1377257300

TTL或PTTL命

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值