redis整体架构

本文深入讲解Redis的整体架构,涵盖客户端与Redis的通信流程、数据结构、底层编码实现、集群数据存储、缓存一致性策略、淘汰和删除策略、数据持久化机制以及高可用机制,包括主从同步、哨兵系统和去中心化分片集群。通过对这些核心概念的理解,帮助读者全面掌握Redis的设计与使用。
摘要由CSDN通过智能技术生成

面试-客户端与redis的完整通信

一个服务端进程可以同时处理多个套接字描述符【Socket】。

IO多路复用程序负责监听多个套接字并向文件事件分派器传送那些产生了事件的套接字文件事件分派器接收IO多路复用程序传来的套接字,并根据套接字产生的事件的类型,调用相应的事件处理器

事件分派器每次从队列中取出一个 socket,根据 socket 的事件类型交给对应的事件处理器进行处理

建立连接

  • 服务端进程初始化的时候,server socket 定义一个AE_READABLE 事件与连接应答处理器关联

  • 客户端 socket01redis 进程的 server socket 请求建立连接,此时 server socket 会产生一个 AE_READABLE 事件,IO 多路复用程序监听到 server socket 产生的事件后,将该 server socket压入队列中

  • 文件事件分派器从队列中获取 socket,交给连接应答处理器

  • 创建一个能与客户端通信的 客户端 socket01,并将该客户端 socket01 的 AE_READABLE 事件与命令请求处理器关联

执行一个set请求

  • 客户端发送了一个 set key value 请求,此时 redis 中的 socket01 会产生 AE_READABLE 事件,IO 多路复用程序将 socket01 压入队列

  • 事件分派器将事件交给命令请求处理器来处理。命令请求处理器读取 socket01 的 key value 并在自己内存中完成 key value 的设置,它会将 socket01 的 AE_WRITABLE 事件与命令回复处理器关联

  • 如果此时客户端准备好接收返回结果了,那么 redis 中的 socket01 会产生一个 AE_WRITABLE 事件,同样压入队列中

  • 事件分派器找到相关联的命令回复处理器,由命令回复处理器对 socket01 输入本次操作的一个结果,比如 ok,之后解除 socket01 的 AE_WRITABLE 事件与命令回复处理器的关联

面试-Redis的数据结构有哪些

数据类型

  • 字符串

    • 编码格式int编码(小于等于12字节并且字符串可以表示为整数);embstr编码【SDS】(字符串长度小于等于39字节时);raw编码【SDS】(大于39字节或者字符串不能表示为整数)

    • 网站的访问次数统计(自增自减),限流(incr和expire命令),Session会话管理缓存;分布式锁

  • 哈希

    • 编码格式ziplist(压缩列表):当Hash类型的元素比较少,且元素的大小比较小(小于64字节)时;hashtable(字典)

    • 存储对象:(购物车)将对象的属性和属性值存储在哈希类型中

  • 列表

    • 编码格式ziplist(压缩列表):最大长度为2^16-1个元素;linkedlist(任意长度)

    • 应用场景轻量级消息队列时间序列(LPUSH和RPUSH);排行榜(比如直播间进入,ZADD broadcast:20210108231 1 zhangsan;后期更新对应的得分;ZRANGE获取排行榜);关注好友(ZADD 1:follow time(时间戳) 2)–后期补充

  • 不重复集合

    • 编码格式intset(整数集合):只包含整数类型的数据,并且元素数量较少(小于512个)时;hashtable(字典)

    • 应用场景:朋友圈点赞、用户(微博好友)关注、相关关注、共同关注、好友关系等

    <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值