Redis总结(拓展篇)

1. Stream

  • 概述

Stream是Redis5.0新增数据结构

Stream是一个新的强大的支持多播的可持久化的消息队列

首次使用xadd指令时,自动创建

每个Stream都支持多个消费组,每个消费组会有一个游标last_delivered_id在Stream数组上往前移动

同一个消费组可以挂多个消费者,消费者之间是竞争关系

消费者内部会记录一个状态变量pending_ids,官方称之为PEL。用来确保客户端至少消费了一次

消息id形式是timestampInmMilis-sequence

消息内容:就是各种k-v数据结构

  • 指令

xadd:追加消息

xdel:从Stream中删除消息,但是只是标志删除,不影响消息总长度

xrange:获取消息列表,自动过滤已删除的消息

xlen:获取Stream长度,会统计已删除消息

del删除整个Stream

  • 消费方式

消费者读到一个消息,相应的消息ID就会加入消费者的PEL结构,客户端处理完毕使用xack指令通知服务器,告知本条消息已处理完毕,ID会从PEL中移除

  • Stream消息过多

Redis支持设置Stream设置最大长度,可以将老消息干掉,确保链表不会超过最大长度

  • PEL原理

对于每一个Stream,服务端为每一个消费组维护一个PEL,如果客户端消费的时候异常,再次链接的时候,可以获取到PEL信息,重新消费,保证每一个消息至少消费一次

  • Stream的高可用

在集群环境下,Stream是高可用的。但是由于持久化是异步的,宕机可能导致小部分数据丢失

  • 分区partition

redis是不支持分区的,要想支持,客户端需要分配多个Stream,并设置不同名称,通过hash取模决定往哪塞

2. 再谈分布式锁

  • 概述

在Redis的应用-分布式锁中,在集群环境下是不安全的

  • 开源Redlock算法

加锁时,会向过半节点发送加锁指令,只要过半节点加锁成功,就认为获取锁成功

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

后端开发面试高频八股+算法 文章被收录于专栏

涵盖各大厂考官最爱问知识点,22年最新整理!

全部评论

相关推荐

2024-11-18 09:18
北京邮电大学 C++
回暖了回暖了,大家都给我回暖这几天天气回暖了,今天穿个外套坐地铁差点给我·热死我分享一下这几天总结的嵌入式面经1. 在SPI通信中,时钟极性和时钟相位的设置对数据传输有何影响?2. CAN总线的基本结构和工作原理是什么?如何进行数据发送和接收?3. 操作系统中的进程和线程有什么区别?它们的调度策略有何不同?4. 任务优先级反转是什么?如何通过调度算法来解决这个问题?5. 信号量和互斥量的区别是什么?在多线程编程中如何使用它们?6. 什么是活锁?与死锁相比,它有什么不同的表现?7. 如何通过资源分配图来检测死锁?这种方法的局限性是什么?8. 互斥锁的实现方式有哪些?请举例说明其优缺点。9. 在FreeRTOS中,如何实现任务间的通信?有哪些常用的方法?10. ARM Cortex-M系列处理器的中断控制机制是怎样的?如何配置优先级?11. C语言的预处理阶段主要做什么?常用的预处理指令有哪些?12. ELF文件格式的基本结构是什么?各个部分的作用是什么?13. 静态变量和动态变量的存储位置及生命周期有什么不同?14. 你是否有MQTT协议的使用经验?请简要描述其工作原理。15. HTTP协议和HTTPS协议的主要区别是什么?在什么情况下选择使用HTTPS?16. DHCP协议的工作流程是怎样的?它如何分配IP地址?17. TCP的三次握手和四次挥手过程是什么?为什么需要这些步骤?18. IPv4和IPv6的主要区别是什么?IPv6的优势在哪里?19. ARP缓存的作用是什么?如何管理ARP缓存?20. 在局域网中,如何选择合适的交换机类型以满足网络需求?21. M4内核的特权级别如何划分?不同特权级别的使用场景是什么?22. 如何实现用户态和内核态之间的切换?涉及哪些系统调用?问题答案已经整理到专栏中了,关注我分享更多知识。  c++/嵌入式面经专栏-牛客网 https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
点赞 评论 收藏
分享
评论
点赞
13
分享
牛客网
牛客企业服务