Redis批量操作是什么?怎么实现延时队列及订阅模式+LRU

本文介绍了Redis的批量操作——管道(pipeline)的工作原理和使用,强调了其非原子性和集群模式下的注意事项。同时,详细讲解了如何利用Redis实现消息队列和延时队列,以及Redis的过期策略,包括定期删除、惰性删除和内存淘汰机制。此外,还探讨了Redis的订阅模式及其局限性,并简单提到了LRU算法的应用。
摘要由CSDN通过智能技术生成

前言

这次的内容是我自己为了总结Redis知识而扩充的,但是Redis的强大,以及适用范围之广可不是单单一篇博文就能总结清的。所以这次准备继续总结,因为第一个问题,Redis的批量操作,是我在面试过程中被真实问到的,当时没答上来,也是因为确实没了解过Redis的批量操作。

当时的问题,我还记得比较清晰:Redis执行批量操作的功能是什么?使用场景就是搞促销活动时,会做预缓存,会往缓存里放大批数据,如果直接放的话那么会很慢,怎么能提高效率呢?

Redis的批量操作-管道(pipeline)

首先Redis的管道(pipeline)并不是Redis服务端提供的功能,而是Redis客户端为了减少网络交互而提供的一种功能。

正常的一次Redis网络交互如下:

​pipeline主要就是将多个请求合并,进行一次提交给Redis服务器,Redis服务器将所有请求处理完成之后,再一次性返回给客户端。

下面我们分析一下 pipeline 的原理

​pipeline的一个交互过程是这样的:

  1. 客户端进程调用 write 命令将消息写入到操作系统内核为套接字分配的 发送缓冲区send buffer 。

  2. 客户端操作系统通过网络路由,将 send buffer 中的数据发送给服务器操作系统为套接字分配的接 收缓冲区 receive buffer 。

  3. 服务端进程调用 read 命令从 receive buffer 中取出数据进行处理,然后调用 write 命令将相应信息写入到服务端的 send buffer 中。

  4. 服务端操作系统通过网络路由,将 send buffer 中的数据发送给客户端操作系统的 receive buffer 。

  5. 客户端进程调用read命令将数据从 receive buffer 中取出进行业务处理。

在使用 pipeline 时需要注意:

  • pipeline执行的操作,和mget,mset,hmget这样的操作不同,pipeline的操作是不具备原子性的。

  • 还有在集群模式下因为数据是被分散在不同的slot里面的,因此在进行批量操作的时候,不能保证操作的数据都在同一台服务器的slot上,所以集群模式下是禁止执行像mget、mset、pipeline等批量操作的,如果非要使用批量操作&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值