c# vb.net Redis 左侧添加,右侧添加(添加到头部,添加到尾部)

「左侧 / 右侧添加」其实对应列表的「头部 / 尾部」,可以简单理解为:LPush 是「向前 / 头部」加元素,RPush 是「向后 / 尾部」加元素------Redis 的列表本质是「双向链表」,左右侧就是链表的头尾两端,我用直观的例子帮你彻底搞懂。

一、先明确核心概念(一句话记牢)

表格

命令 含义 通俗理解
LPush Left Push(左推) 加到列表最前面 / 头部
RPush Right Push(右推) 加到列表最后面 / 尾部

二、用实例演示:一看就懂

我们通过连续添加元素,看列表的变化(最直观):

cs 复制代码
' 先清空测试列表(避免旧数据干扰)
redisClient.Del("vbnet:list:fruit")

' 1. 第一次 LPush(左加):向头部加「苹果」
redisClient.LPush("vbnet:list:fruit", "苹果")
' 此时列表:[苹果](只有一个元素,头尾都是它)

' 2. 第二次 LPush(左加):向头部加「香蕉」
redisClient.LPush("vbnet:list:fruit", "香蕉")
' 此时列表:[香蕉, 苹果](香蕉跑到最前面)

' 3. RPush(右加):向尾部加「橙子」
redisClient.RPush("vbnet:list:fruit", "橙子")
' 此时列表:[香蕉, 苹果, 橙子](橙子跑到最后面)

' 4. 再 LPush(左加):向头部加「葡萄」
redisClient.LPush("vbnet:list:fruit", "葡萄")
' 最终列表:[葡萄, 香蕉, 苹果, 橙子]

' 读取全部元素验证(LRange 0 -1 取所有)
Dim allItems = redisClient.LRange("vbnet:list:fruit", 0, -1)
Debug.WriteLine(String.Join(",", allItems)) ' 输出:葡萄,香蕉,苹果,橙子

三、为什么叫「左 / 右」而不是「前 / 后」?

Redis 列表的「左」= 链表头(索引 0),「右」= 链表尾(索引 - 1),可以用「排队」类比:

  • LPush(左加) :新来的人直接插到队伍最前面(插队);
  • RPush(右加) :新来的人站到队伍最后面(正常排队)。

四、补充:弹出元素的对应逻辑(和添加呼应)

添加和弹出是成对的,理解后能更灵活使用:

表格

添加命令 对应弹出命令 含义 示例
LPush LPop 从头部(左) 弹出 redisClient.LPop("key") → 取第一个元素
RPush RPop 从尾部(右) 弹出 redisClient.RPop("key") → 取最后一个元素

比如基于上面的最终列表 [葡萄, 香蕉, 苹果, 橙子]:

复制代码
Dim lpopItem = redisClient.LPop("vbnet:list:fruit") ' 弹出「葡萄」(头部)
Dim rpopItem = redisClient.RPop("vbnet:list:fruit") ' 弹出「橙子」(尾部)
' 剩余列表:[香蕉, 苹果]

总结

  1. 核心结论 :
    • LPush = 向前 / 头部 / 左侧添加(插队);
    • RPush = 向后 / 尾部 / 右侧添加(正常排队);
  2. 记忆技巧:L=Left(左 / 前),R=Right(右 / 后);
  3. 使用场景 :
    • 想让新元素「优先被读取」→ 用 LPush;
    • 想让新元素「最后被读取」→ 用 RPush(比如消息队列的正常入队)。

这个逻辑是 Redis 列表的基础,理解后不管是添加还是弹出,都能精准控制元素的顺序~

相关推荐
imDwAaY16 分钟前
操作系统如何管理程序运行?从线程、进程到内存隔离与用户态切换:CS162 Note2
android·java·redis
步步为营DotNet1 小时前
Async 状态机要搬进运行时了:.NET 10 Runtime Async 实测,快的地方快 1.5 倍,贵的地方贵 5 倍
性能优化·c#·.net·async·runtime
hixiong1231 小时前
C# 使用 ZXingCpp.Angle 进行条码、二维码识别
开发语言·c#·扫码
码途行者1 小时前
处理超时未支付订单:两套轻量化方案,附 PHP 极简实现
开发语言·redis·php
步步为营DotNet2 小时前
System.Text.Json 源生成:三个“看起来已经生效“的静默失效
c#·.net·native aot·源生成
草莓熊Lotso5 小时前
【C++ 基于微服务的即时通讯系统】etcd + brpc 从安装到服务注册发现全链路实战
网络·数据库·c++·redis·微服务·etcd
我不会起名字32213 小时前
Redis 突然只能读不能写:MISCONF 报错的 3 类触发条件与 4 步恢复
运维·redis·持久化·排查·misconf
我不会起名字32214 小时前
Redis 从 0 到 1(九):主库宕机 30 秒自动切主——1 主 2 从 3 哨兵 + Go 客户端
redis·docker·sentinel·高可用·哨兵
用户7884773163416 小时前
用 C# 把每周 6 小时的 PDF 录入干到 20 分钟:一份可复制的桌面 OCR 方案
c#