redis的list数据类型相关命令介绍及使用


Posted in Redis onJanuary 18, 2022

list列表简介

  • list是简单的字符串列表(说通俗点,存储的还是字符串),按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边),个列表最多可以包含^32-1个元素(每个列表超过40亿个元素)。
  • Redis中的list和Java中的LinkedList很像,底层都是一种链表结构,list的插入和删除操作非常快,时间复杂度为 0(1),不像数组结构插入、删除操作需要移动数据。像归像,但是redis中的list底层可不是一个双向链表那么简单。
  • 当数据量较少的时候它的底层存储结构为一块连续内存,称之为ziplist(压缩列表),它将所有的元素紧挨着一起存储,分配的是一块连续的内存;当数据量较多的时候将会变成quicklist(快速链表)结构。
  • 可单纯的链表也是有缺陷的,链表的前后指针prev和next会占用较多的内存,会比较浪费空间,而且会加重内存的碎片化。在redis 3.2之后就都改用ziplist+链表的混合结构,称之为quicklist(快速链表)。

常用命令

添加命令

lpush key value

从左边插入元素(将一个或多个值插入到列表头部)

127.0.0.1:6379> lpush ids 1
(integer) 1
127.0.0.1:6379> lrange ids 0 -1
1) "1"
127.0.0.1:6379> lpush ids 2
(integer) 2
127.0.0.1:6379> lrange ids 0 -1
1) "2"
2) "1"

rpush key value

从右边插入元素(将一个或多个值插入到列表的尾部(最右边))

127.0.0.1:6379> rpush ids 3
(integer) 3
127.0.0.1:6379> lrange ids 0 -1
1) "2"
2) "1"
3) "3"

linsert key BEFORE|AFTER pivot value
向某个元素前/后插入元素,返回结果为当前列表长度,注意列表不存在或者指定元素不存在列表中时,都将不执行任何操作。

//元素3前插入0
127.0.0.1:6379> linsert ids before 3 0
(integer) 4
127.0.0.1:6379> lrange ids 0 -1
1) "2"
2) "1"
3) "0"
4) "3"
//元素3后插入0
127.0.0.1:6379> linsert ids after 3 4
(integer) 5
127.0.0.1:6379> lrange ids 0 -1
1) "2"
2) "1"
3) "0"
4) "3"
5) "4"

查询命令

lrange key start end
获取列表中指定范围内的元素列表;若start值大于列表end值则返回空列表
如上已经展示过了

lindex key index
获取列表指定索引下标的元素

127.0.0.1:6379> lindex ids 0
"2"
127.0.0.1:6379> lindex ids -1
"4"

llen key
获取列表长度;列表不存在则返回0

127.0.0.1:6379> llen ids
(integer) 5

弹出/删除命令

lpop key
从列表左侧弹出元素并返回头部元素

127.0.0.1:6379> lpop ids
"2"
127.0.0.1:6379> lrange ids 0 -1
1) "1"
2) "0"
3) "3"
4) "4"

rpop key
从列表右侧弹出元素并返回尾部元素

127.0.0.1:6379> rpop ids
"4"
127.0.0.1:6379> lrange ids 0 -1
1) "1"
2) "0"
3) "3"

lrem key count value
从列表中找到等于value的元素进行删除,根据count的不同分为三种情况:
count > 0,从表头开始向表尾,移除数量为count个元素;
count < 0,从表尾开始向表头,移除数量为count的绝对值个元素;
count = 0,移除表中所有与 value 相等的值

127.0.0.1:6379> lrem ids 0 3
(integer) 1
127.0.0.1:6379> lrange ids 0 -1
1) "1"
2) "0"

ltrim key start end
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除

127.0.0.1:6379> ltrim ids 0 0
OK
127.0.0.1:6379> lrange ids 0 -1
1) "1"

修改命令

lset key index value
修改指定下标的元素的值设置为value

127.0.0.1:6379> lset ids 0 0
OK
127.0.0.1:6379> lrange ids 0 -1
1) "0"

阻塞弹出命令

blpop key [key …] timeout
移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时(单位秒)或发现可弹出元素为止

brpop key [key …] timeout
移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
演示:
开启三个reids连接窗口,第一个执行blpop ,第二个执行brpop ,第三个执行添加:
可以看到窗口1和2执行完都已经阻塞在这里,这是因为ids中没有元素

redis的list数据类型相关命令介绍及使用

redis的list数据类型相关命令介绍及使用

窗口3执行添加:lpush ids 1 2 3 4 5 6
可以看到窗口1和2立即弹出对应元素:

redis的list数据类型相关命令介绍及使用

redis的list数据类型相关命令介绍及使用

应用场景

消息队列:lpop和rpush(或者反过来,lpush和rpop)能实现队列的功能

朋友圈的点赞列表、评论列表、排行榜:lpush命令和lrange命令能实现最新列表的功能,每次通过lpush命令往列表里插入新的元素,然后通过lrange命令读取最新的元素列表。

到此这篇关于redis的list数据类型相关命令介绍及使用的文章就介绍到这了,更多相关redis list数据类型内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Redis 相关文章推荐
浅谈redis五大数据结构和使用场景
Apr 12 Redis
redis内存空间效率问题的深入探究
May 17 Redis
Redis源码阅读:Redis字符串SDS详解
Jul 15 Redis
Redis中一个String类型引发的惨案
Jul 25 Redis
详解Redis在SpringBoot工程中的综合应用
Oct 16 Redis
高并发下Redis如何保持数据一致性(避免读后写)
Mar 18 Redis
Redis 哨兵机制及配置实现
Mar 25 Redis
Redis基本数据类型哈希Hash常用操作命令
Jun 01 Redis
Redis实现分布式锁的五种方法详解
Jun 14 Redis
一文教你快速生成MySQL数据库关系图
Jun 28 Redis
Redis sentinel哨兵集群的实现步骤
Jul 15 Redis
如何使用注解方式实现 Redis 分布式锁
Jul 23 Redis
关于使用Redisson订阅数问题
Jan 18 #Redis
Redis中缓存穿透/击穿/雪崩问题和解决方法
linux下安装redis图文详细步骤
Springboot/Springcloud项目集成redis进行存取的过程解析
使用RedisTemplat实现简单的分布式锁
Nov 20 #Redis
redis缓存存储Session原理机制
CentOS8.4安装Redis6.2.6的详细过程
You might like
php 截取字符串并以零补齐str_pad() 函数
2011/05/07 PHP
php处理文件的小例子(解压缩,删除目录)
2013/02/03 PHP
深入PHP数据缓存的使用说明
2013/05/10 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
2017/04/25 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
Jquery下EasyUI组件中的DataGrid结果集清空方法
2014/01/06 Javascript
php中给js数组赋值方法
2014/03/10 Javascript
js 动态为textbox添加下拉框数据源的方法
2014/04/24 Javascript
jsPDF导出pdf示例
2014/05/02 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
vue-cli监听组件加载完成的方法
2018/09/07 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
python3编写C/S网络程序实例教程
2014/08/25 Python
Python中json格式数据的编码与解码方法详解
2016/07/01 Python
python解决pandas处理缺失值为空字符串的问题
2018/04/08 Python
Python PyCharm如何进行断点调试
2019/07/05 Python
对Django 转发和重定向的实例详解
2019/08/06 Python
基于h5py的使用及数据封装代码
2019/12/26 Python
Python字典添加,删除,查询等相关操作方法详解
2020/02/07 Python
Python 随机生成测试数据的模块:faker基本使用方法详解
2020/04/09 Python
python利用platform模块获取系统信息
2020/10/09 Python
Django 权限管理(permissions)与用户组(group)详解
2020/11/30 Python
IE下实现类似CSS3 text-shadow文字阴影的几种方法
2011/05/11 HTML / CSS
用HTML5实现网站在windows8中贴靠的方法
2013/04/21 HTML / CSS
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
Quiksilver荷兰官方网站:冲浪和滑雪板
2019/11/16 全球购物
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
校园绿化美化方案
2014/06/08 职场文书
2015年物业管理工作总结
2015/04/23 职场文书
大学生团日活动总结
2015/05/06 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书
Python绘制分类图的方法
2021/04/20 Python
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android
德生TECSUN S-2000使用手册文字版
2022/05/10 无线电