美文网首页
Redis数据库实现

Redis数据库实现

作者: Robin92 | 来源:发表于2021-07-25 23:57 被阅读0次

《Redis 设计与实现》
《Redis 设计与实现》图片集

看图了解数据库结构,图中的信息不再赘述。

数据库结构一览.jpg

键的过期时间

有四个命令可以设置键的过期时间,EXPIREPEXPIREEXPIREATPEXPIREAT。命令最终都会转化成 PEXPIREAT来执行,存的时间是毫秒级。

移除过期时间用命令 PERSIST,它会从expires表中删除对应键。

命令 TTLPTTL,返回键的剩余生存时间。它的不同返回值:

  • 返回 nil,表示键不存在;
  • 返回 n(n>0),表示剩余生存时间;
  • 返回 -1,表示此键无过期时间(永不过期)

带P的表示毫秒级操作

过期键的删除策略

Redis用了两种策略:

  • 惰性删除(使用时检查):每次读写数据之前先对数据过期时间进行判断。对CPU友好,但对内存不友好(用不到的键无法被释放,内存浪费);
  • 定期删除(同期性定量删):周期性任务,分批定量检查过期键。需要合理地设置执行时长执行频率

还有一种策略,但Redis没用,即定时删除策略,设置过期时间时,为这个键创建一个删除用的定时器,这种方式对内存友好,但对CPU不友好(频繁删除时),而且不高效,查找一个事件的复杂度为O(n);

持久化、主从复制对过期键的影响

  • 生成 RDB 会过滤掉过期的键;
  • 载入 RDB 时如果是主服务器,那么会过滤掉过期键的载入;如果是从服务器则会全部载入,然后依靠主服务器同步信息来删除。
  • AOF 写入时,过期键被删除时会写一个 DEL 命令到 AOF 中;
  • AOF 重写(重新生成优化的AOF文件)时,会忽略已过期的键。
  • 在主从复制中,从服务器从不主动删除过期键,而是由主服务器控制,只有在主服务器发送给从服务器DEL命令时才删除。

最后一条,当主服务器中过期键A已经过期但还未删除,这时如果客户端从从服务器GET A,那也是可以正常获取到的(就像没过期一样)。这会是个坑。

数据库通知

数据库通知是 2.8 版本新增的功能。通过订阅对应的频道或模式,来获知键的事件。

订阅分为键空间通知键事件通知

键空间通知:关注某个键被什么命令执行了。SUBSCRIBE __keyspace@0__:message,即订阅 0 号数据库中 message 这个键上执行的所有命令(只返回命令名)。

键事件通知:关注哪些键执行了某个命令(事件)。SUBSCRIBE __keyevent__@0__:del,即订阅 0 号数据库中哪些键执行了 DEL 命令。

服务器配置项 notify-keyspace-events决定服务器可以什么类型的对象可以发送事件以及发送什么类型的事件。

事件订阅和通知的实现原理

(先略,书后面有的话再补充)

相关文章

  • Thinkphp5怎么扩展Redis数据库,实现Redis的CU

    Thinkphp5怎么扩展Redis数据库,实现Redis的CURD操作 Redis怎么使用Redis数据库,本篇...

  • redis的数据库和键过期的实现原理

    redis 数据库实现原理 redis是内存数据库,非关系型数据库,存储的是键值对 redis底层是用hash表的...

  • Redis基本使用

    Redis数据库 Redis 是一个高性能的key-value数据库 主要用Redis实现缓存数据的存储,可以设置...

  • Redis作用

    Redis数据库Redis 是一个高性能的key-value数据库。主要用Redis实现缓存数据的存储,可以设置过...

  • redis对象

    一 redis是怎样实现键值对数据库的redis使用对象系统来实现键值对数据库,这个系统包括:字符串对象、列表对...

  • 分布式锁入门

    目前主流的有三种: 基于数据库实现 基于Redis实现 基于ZooKeeper实现 1. 基于数据库实现: 基于数...

  • Redis字典

    本文摘抄自redis阅读笔记 典在Redis中应用十分广泛,它是实现数据库的基础,特别的它是数据库键空间的实现方式...

  • Springboot2.0 + jpa + redis缓存

    本文基于Springboot2.0,使用mysql数据库,通过jpa实现orm,再用redis实现数据库的缓存。目...

  • 1.Redis操作key-value数据

    Spring Data Redis包含了多个模板的实现,用来完成Redis数据库的数据存取功能。1.Redis连接...

  • 01-《Redis的操作与使用》

    一、Redis只是用数字作为多个数据库的实现,Redis默认配置中是有16个【0--15】数据库: 0号数据库和...

网友评论

      本文标题:Redis数据库实现

      本文链接:https://www.haomeiwen.com/subject/aygimltx.html