Redis设计与实现——Redis 数据库知识点整理

Redis 数据库整理

1. Redis服务器默认创建16个数据库

在这里插入图片描述
db 是一个数组,保存服务器中所有的数据库
dbnum 表示需要创建的数据库数量

2. 切换数据库

SELECT 2  //表示选择的数据库

这时,clientServer中的db就会指向db[2]

3. 数据库中值得保存——以键值对形式保存

Redis中,每个RedisDb结构中都有dict字典,这个字典保存数据库中的所有键值对。

4. 读写键空间时的维护操作

a. 服务器读取一个键后,会根据键是否存在更新服务器中的键空间命中次数(keyspace-hits)和键空间不命中次数(keyspace-misses)。
b. 服务器在更新一个键后会更新LRU(最后一次使用)时间,用来计算键的空闲时间。
c. 如果读取时发现一个键过期,就会删除这个键,在进行其他操作。
d. 如果客户端使用WATCH见识某个键,在该键修改后会被标记为dirty。
e. 服务器每次修改一个键后都会对脏键计数器加1,用于持久化和复制操作。
f. 如果服务器开启数据库通知功能,那么对键修改后会进行相应的数据库通知。

5. 键的生存时间和过期时间

5.1 设置生存时间命令:

EXPIRE KEY 5 	//设置键key的生存时间为5s

PEXPIRE KEY 5	//设置键key的生存时间为5ms

SETEX key 5 "aaa" //只针对字符串,设置键key的生存时间为5s

设置过期时间命令:过期时间是一个时间戳

EXPIREAT key 1377257300		//key到1377257300时,就会删除,时间戳以秒为单位

PEXPIREAT key 1377257300000		//key到1377257300000时,就会删除,时间戳以毫秒为单位

其他命令

TTL key //查询这个键的剩余生存时间
PTTL key //同上,但以毫秒为单位

5.2 过期时间的保存
redisdb结构中,维护一个expires字典用于保存过期时间,所以称为过期字典:
过期字典的键是一个指针,指向空间中某个键对象。
过期字典的值是一个龙long long类型的整数(以毫秒单位)

6.过期键的判定:

先判断键是否存在过期时间,如果有,获取过期时间;
判断当前时间时间戳是否大于过期时间,如果是,则认为过期。

7.过期键的删除策略

删除策略有三种:

删除策略内容优劣
定时删除在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作过期键会被尽可能快的删除,但对CPU不友好
惰性删除放任键的过期,在每次取键时进行判断是否过期,如果过期则删除该键,否则返回该键对内存不友好,一些不太会用到的数据就不太能被删除掉,占用内存空间
定期删除每隔一段时间,程序对数据库进行一次检查,删除里面的过期键对删除执行的时长和频率需要判断

Redis结合惰性删除和定期删除
定期删除补充:

  • 每次删除都是随机去除一定数量的键进行检查删除。
  • 全局变量current_db会记录检查进度,并在下一次检查时,接着上一次的进度进行处理。
  • 如果所有服务器都被检查了一遍,则current_db会重置为0,然后开始新的检查。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值