黑马Redis原理篇

黑马Redis原理篇

  • 1、数据结构
    • 1.1、动态字符串SDS
    • 1.2、IntSet
    • 1.3、Dict
    • 1.4、ZipList
    • 1.5、QuickList
    • 1.6、SkipList
    • 1.7、RedisObject
    • 1.8、五种数据结构
      • 1. String(小EMBSTR,大RAW (SDS),少量整数INT)
      • 2. List(Redis3.2之后使用QuickList实现)
      • 3. Set(少量整数IntSet,正常采用Dict,元素存在key中,value为null)
      • 4. ZSet(少量数据使用ZipList,使用Dict和SkipList)
      • 5. Hash(少量数据ZipList,大量数据Dict)
  • 2、网络模型
    • 2.1、用户空间和内核空间
    • 2.2、阻塞IO
    • 2.3、非阻塞IO
    • 2.4、IO多路复用
      • 2.4.1 Linux中的I/O多路复用
      • 2.4.1 epoll中的事件通知机制
    • 2.5、信号驱动IO
    • 2.6、异步IO
    • IO操作同步异步总结(重要)
    • 2.7、Redis网络模型(I/O多路复用+事件派发)
  • 3、通信协议
    • 3.1、RESP协议
  • 4、内存策略
    • 4.1、过期策略
    • 4.2、淘汰策略


1、数据结构

1.1、动态字符串SDS

Redis是基于C语言实现的。
黑马Redis原理篇_第1张图片
黑马Redis原理篇_第2张图片
黑马Redis原理篇_第3张图片

1.2、IntSet

黑马Redis原理篇_第4张图片
黑马Redis原理篇_第5张图片
黑马Redis原理篇_第6张图片
黑马Redis原理篇_第7张图片

1.3、Dict

黑马Redis原理篇_第8张图片黑马Redis原理篇_第9张图片黑马Redis原理篇_第10张图片渐近式rehash:
黑马Redis原理篇_第11张图片黑马Redis原理篇_第12张图片

1.4、ZipList

黑马Redis原理篇_第13张图片黑马Redis原理篇_第14张图片黑马Redis原理篇_第15张图片
黑马Redis原理篇_第16张图片

1.5、QuickList

黑马Redis原理篇_第17张图片黑马Redis原理篇_第18张图片

1.6、SkipList

黑马Redis原理篇_第19张图片黑马Redis原理篇_第20张图片

1.7、RedisObject

黑马Redis原理篇_第21张图片黑马Redis原理篇_第22张图片黑马Redis原理篇_第23张图片

1.8、五种数据结构

1. String(小EMBSTR,大RAW (SDS),少量整数INT)

黑马Redis原理篇_第24张图片黑马Redis原理篇_第25张图片

2. List(Redis3.2之后使用QuickList实现)

黑马Redis原理篇_第26张图片

3. Set(少量整数IntSet,正常采用Dict,元素存在key中,value为null)

黑马Redis原理篇_第27张图片

4. ZSet(少量数据使用ZipList,使用Dict和SkipList)

黑马Redis原理篇_第28张图片黑马Redis原理篇_第29张图片

5. Hash(少量数据ZipList,大量数据Dict)

黑马Redis原理篇_第30张图片


2、网络模型

2.1、用户空间和内核空间

黑马Redis原理篇_第31张图片黑马Redis原理篇_第32张图片

2.2、阻塞IO

黑马Redis原理篇_第33张图片

2.3、非阻塞IO

黑马Redis原理篇_第34张图片

2.4、IO多路复用

2.4.1 Linux中的I/O多路复用

黑马Redis原理篇_第35张图片
黑马Redis原理篇_第36张图片
黑马Redis原理篇_第37张图片

2.4.1 epoll中的事件通知机制

黑马Redis原理篇_第38张图片
黑马Redis原理篇_第39张图片

2.5、信号驱动IO

黑马Redis原理篇_第40张图片

2.6、异步IO

黑马Redis原理篇_第41张图片

IO操作同步异步总结(重要)

黑马Redis原理篇_第42张图片

2.7、Redis网络模型(I/O多路复用+事件派发)

黑马Redis原理篇_第43张图片
黑马Redis原理篇_第44张图片
黑马Redis原理篇_第45张图片


3、通信协议

3.1、RESP协议

黑马Redis原理篇_第46张图片
黑马Redis原理篇_第47张图片


4、内存策略

4.1、过期策略

黑马Redis原理篇_第48张图片
Redis 通过一个叫做过期字典(可以看作是 hash 表)来保存数据过期的时间。

惰性删除:不是在TTL到期后就立刻删除,而是在访问一个key的时候,检查该key的存活时间,如果已经过期才执行删除。这样对 CPU 最友好,但是可能会造成太多过期 key 没有被删除。
定期删除:每隔一段时间抽取一批 key 执行删除过期 key 操作。并且,Redis 底层会通过限制删除操作执行的时长和频率来减少删除操作对 CPU 时间的影响。

定期删除的两种模式:

  1. SLOW模式执行频率默认为10,每次不超过25ms
  2. FAST模式执行频率不固定,但两次间隔不低于2ms,每次耗时不超过1ms
    黑马Redis原理篇_第49张图片

4.2、淘汰策略

内存淘汰:就是当Redis内存使用达到设置的上限时,主动挑选部分key删除以释放更多内存的流程。Redis会在处理客户端命令的方法processCommand()中尝试做内存淘汰
黑马Redis原理篇_第50张图片


你可能感兴趣的:(redis,redis,数据库,java)