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 条评论
登录 后参与评论

相关文章

来自专栏增长技术

git对象模型

所有用来表示项目历史信息的文件,是通过一个40个字符的(40-digit)“对象名”来索引的,对象名看起来像这样:

1033
来自专栏决胜机器学习

设计模式专题(十七) ——单例模式

设计模式专题(十七)——单例模式 (原创内容,转载请注明来源,谢谢) 一、概述 单例模式(Singleton)保证一个类仅有一个实例,并提供一个访问它的全局访...

3227
来自专栏java一日一条

Java 编程要点之并发(Concurrency)详解

计算机用户想当然地认为他们的系统在一个时间可以做多件事。他们认为,他们可以工作在一个字处理器,而其他应用程序在下载文件,管理打印队列和音频流。即使是单一的应用程...

672
来自专栏数据结构笔记

实战:简书爬取之多线程爬取(二)速度提升何止10倍

其次就是这样的代码往往会有很严重的竞争问题,需要很多的资源锁来保证线程安全,这样就拉低了程序执行的速度。

1412
来自专栏Android群英传

Gradle函数复用的一点实践

921
来自专栏未闻Code

使用生成器把Kafka写入速度提高1000倍

通过本文你会知道Python里面什么时候用yield最合适。本文不会给你讲生成器是什么,所以你需要先了解Python的yield,再来看本文。

1082
来自专栏JAVA技术zhai

JVM虚拟机详解

  JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿...

1222
来自专栏MoeLove

[译]Tornado并发爬虫

Tornado 4.3于2015年11月6日发布,该版本正式支持Python3.5的async/await关键字,并且用旧版本CPython编译Tornado同...

1172
来自专栏未闻Code

使用生成器把Kafka写入速度提高1000倍

通过本文你会知道Python里面什么时候用yield最合适。本文不会给你讲生成器是什么,所以你需要先了解Python的yield,再来看本文。

791
来自专栏coding

python的中异常处理处理ZeroDivisionError异常处理 FileNotFoundError 异常异常时保持静默

Python 使用被称为 异常 的特殊对象来管理程序执行期间发生的错误。每当发生让 Python 不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异...

1552

扫码关注云+社区