专栏首页数据库Redis列表的“绝地反击”

Redis列表的“绝地反击”

大家晚上好,今天介绍Redis中的列表数据结构。

Redis中的列表是用来存储多个有序的字符串的,最神奇的地方是:竟然可以在列表两端插入(push)和弹出(pop)。

第一:先介绍一下列表中的常用命令(点击可放大截图):

1. 从右端插入数据

rpush key value [value...]

实例操作为:

从左到右查看列表所有的元素:

2. 从左端插入数据

lpush key value [value...]

实例操作为:

3. 获取指定范围的元素列表

lrange key start end

实例操作为:

特别注意:列表的索引从左到右是0到N-1,从右到左是-1到-N。还有,命令中的结束索引end包含了自身,就像上边的lrange listkey 1 3,就是获取列表中的索引为1到索引为3的数据,包括索引为3的那个数据。

4. 获取指定索引对应的元素

lindex key index

实例操作为:

5. 获取列表长度

llen key

实例操作为:

6. 从列表左侧(右侧)弹出数据

左侧弹出: lpop key

右侧弹出: rpop key

实例操作为:

第二:使用场景

实际上,列表的使用场景实在是太多了,限于篇幅只介绍部分。

1. 模拟“栈”数据结构:

我们都知道,“栈”是一种“先进后出,后进先出”的数据结构,那么,使用Redis中的列表就可以很容易的模拟出“栈”数据结构:

准确地说,是通过lpush+lpop这两个命令的组合就可以模拟“栈”数据结构,请看实例操作:

2. 模拟“队列”数据结构

“队列”是一种“先进先出”的数据结构,使用lpush+rpop就可以轻松模拟队列数据结构,请看实例操作:

3. 模拟“消息队列”

与队列相似,使用Redis的lpush+brpop就可以模拟“消息队列”。

具体地说,就是:在生产者客户端,使用lpush从列表左侧插入数据,多个消费者客户端使用brpop命令阻塞式地抢列表的尾部的数据。

这个操作比较难模拟,可以先开启两个消费者客户端,先进行阻塞式弹出:

“消费者”客户端一:

“消费者”客户端二:

“生产者”客户端:

当“生产者”向这个空队列存入两个数据(hello和redis)后,两个“消费者”客户端就开始“抢”数据了,如图:

Redis的列表真的很厉害,称为“绝地反击”一点都不为过!

各位,冲啊!

本文来自企鹅号 - 攀言媒体

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java字符串的10大热点问题盘点

    往期精选 下面我为大家总结了10条Java开发者经常会提的关于Java字符串的问题,如果你也是Java初学者,仔细看看吧: 1、如何比较字符串,应该用”==”还...

    企鹅号小编
  • R包系列——stringr包

    stringr包是Hadley Wickham大神贡献的R包之一,主要用于字符串的处理。对于经常需要对数据进行预处理的分析人员来说,简直是一把“利器”,可谓是上...

    企鹅号小编
  • 保存数据到MySql数据库——我用scrapy写爬虫(二)

    写在前面 上一篇(https://www.tech1024.cn/original/2951.html )说了如何创建项目,并爬去网站内容,下面我们说一下如何保...

    企鹅号小编
  • liunx下sed命令的用法

    单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义,但是单引号”‘”是没有办法用反斜线”\”转义的,这时候只要把命令中的单...

    繁花云
  • 【R语言】基本知识|R 语言字符串处理函数你晓得几个?

    grep(pattern,x)语句在字符串向量x里搜索给定字符串pattern。如果x里面有n个元素,则grep(pattern,x)会返回长度不超过n的向量。

    黑妹的小屋
  • 2019-1-25-wcf入门(5)

    如图所示在创建双工模式的协定时,我们需要定义两个接口IDuplex用于客户端向服务端发送消息(或者称之为调用服务端方法),IDuplexCallback用于服务...

    黄腾霄
  • 存储器层次结构介绍

    这里先说一下存储器系统: 寄存器 -----> 高速缓存 -----> 主存储 存储器对程序的性能有着巨大的影响,程序的运行就是对数据的不停的计算和搬移,其中最...

    HeaiKun
  • NewLife.Net——开始网络编程

    网络编程的重要性就不说了,先上源码:https://github.com/nnhy/NewLife.Net.Tests

    大石头
  • 每日一题--2-求一个文件里面指定字符出现的次数

    张琳兮
  • SignalR使用笔记

    2) 默认情况下,这是IPrincipal.Identity.Name,但是可以通过向全局主机注册IUserIdProvider的实现来更改。

    用户6362579

扫码关注云+社区

领取腾讯云代金券