Redis--数据库

文章目录

目录

文章目录

前言

一、redis服务器如何存储数据库/客户怎么切换数据库

二、数据库键空间--dict字典

三、数据库过期键---expires字典

四、数据库通知功能的实现

总结


前言

主要学习了redis的数据库实现以及过期键处理策略和数据库通知功能。


一、redis服务器如何存储数据库/客户怎么切换数据库

  • redisServer保存一个db数组,指向redis的所有数据库,默认数据库个数为16
  • redisClient的db指针指向当前操作的数据库,即指向server的db数组中的某一个,通过select index可以改变db指针指向,实现切换数据库功能

二、数据库键空间--dict字典

  • 定义
    • 数据库通过字典存储键值对,这个字典dict被称为键空间
  • 对数据库操作---对键空间的操作---对dict字典的操作
    • 添加新键:SET key string、LPUSH key ”a“ ”b“ “b”、SADD key “a” “b”、ZSADD key “a” 10 “b” 8、HSET key k1 v1 k2 v2
    • 删除键:DEL
    • 更新键:像插入新键一样,只不过key已经存在了,redis会用新value覆盖旧value
    • 取值:GET、LRANGE
    • FLUSHDB删除某个数据库,FLUSHALL删除所有数据库
    • DBSIZE计算数据库里所有键值对数量
  • 对键空间的维护
    • 过期键删除
    • 数据库通知功能可以在键修改后,通知相应数据库
    • 更新LRU最后一次使用时间
    • 被WATCH的键修改会被设置为dirty
    • 修改一个键,会让脏键计数器+1

三、数据库过期键---expires字典

  • 过期字典expires保存过期时间
    • 过期字典key:指向一个设置了过期时间的键值对
    • 过期字典value:保存过期时间值
  • 过期时间的操作---对expires字典的操作
    • EXPIRE设置过期时间
      • EXPIRE key time设置key对应值的过期时间
      • 调用EXPIRE命令就是在expire字典里新建了key对应的k-v
    • PERSIST移除过期时间
      • PERSIST key删除过期时间,就是移除过期字典expire里key对应的k-v
    • TTL返回过期时间
      • TTL key / PTTL key通过key去expire字典里取得过期时间,和当前UNIX时间戳进行计算,得到还有多久存活时间
  • 过期键删除策略
    • 定时删除
      • 为每一个键值对设置一个定时器,定时器时间到就删除该过期键
      • 对内存友好,可以及时释放内存
      • 对CPU不友好,需要维持很大数量的定时器,且如果过期键太多,CPU要花费很多时间去删除过期键
    • Redis使用懒惰删除和定期删除
      • 懒惰删除
        • 取出键时,对键进行过期检查
        • 对内存不友好,已经过期的键只有被使用时才会被发现并删除
        • 对CPU友好,无需设置定时器,且只对当前处理的过期键删除,不管其他过期键
      • 定期删除
        • 每隔一段时间执行一次过期删除策略,只随机扫描一部分键,然后删除其中的过期键
        • 对定时删除和懒惰删除的综合,即能够及时释放内存,又能使CPU不会因为删除过期键消耗太多性能
  • 持久化 / 主从复制功能过期键处理
    • RDB
      • 生成RDB文件:只会将未过期键值对写入RDB文件,已过期键不写
      • 载入RDB文件
        • 主服务器模式:只会载入未过期键值对,已过期键值对不载入
        • 从服务器模式:不论是否过期,一起载入
    • AOF
      • 过期键没有被删除对AOF文件无影响,过期键被删除时会在AOF文件内追加一条DEL命令
      • AOF重写:只会重写未过期键,已过期键不写
    • 服务器运行在主从复制模式
      • 过期键的删除动作统一由主服务器控制,保证主从服务器数据的一致性
      • 举例说明
        • 向从服务器请求一个过期键可以得到这个值,且该过期键不会被删除
        • 向主服务器请求一个过期键无法得到这个值,主服务器内该过期键会被删除,同时主服务器会显示的要求从服务器去删除该过期键

四、数据库通知功能的实现

  • Redis命令对数据库进行修改时,服务器根据配置向客户端发送数据库通知
  • 数据库通知分类
    • 键空间通知---key-space notification
      • 可以知道某个键执行了哪些操作
    • 键事件通知---key-event notification
      • 可以知道某个命令被那些键执行了

总结

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值