一、列表(List)简介

  1. 单键多值:Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
  2. 它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
  3. 其底层有linkedList、zipList和quickList这三种存储方式。

list在redis常用作堆,栈。

二、常用命令

1、lpush/rpush lpush/rpush<key><value1> <value2><value3> 从左边/右边插入一个或多个值。
127.0.0.1:6379> lpush list a				#在list左边插入a值
(integer) 1
127.0.0.1:6379> lpush list b #在list左边插入b值
(integer) 2
127.0.0.1:6379> lrange list 0 -1 #获取当前list所有值
1) "b"
2) "a"
127.0.0.1:6379> rpush list c #在list右边插入c值
(integer) 3
127.0.0.1:6379> rpush list d #在list右边插入d值
(integer) 4
127.0.0.1:6379> lrange list 0 -1 #获取list所有值
1) "b"
2) "a"
3) "c"
4) "d"
127.0.0.1:6379>

2、lpop/rpop lpop/rpop <key>从左边/右边吐出一个值。(值在键在,值光键亡。)
127.0.0.1:6379> lrange list 0 -1				#查看当前list所有值
1) "b"
2) "a"
3) "c"
4) "d"
127.0.0.1:6379> lpop list 1 #在左边弹出一个值
1) "b"
127.0.0.1:6379> rpop list 1 #在右边弹出一个值
1) "d"
127.0.0.1:6379> lrange list 0 -1 #获取list当中所有的值
1) "a"
2) "c"
127.0.0.1:6379> keys * #查看数据库的键
1) "list"
127.0.0.1:6379> rpop list 2 #将list中所有的都弹出去
1) "c"
2) "a"
127.0.0.1:6379> keys * #查看键是否存在
(empty array)
127.0.0.1:6379>

通过上述测试验证了,值在键在,值光键亡。

3、lrange lrange <key><start><stop> 按照索引下标获得元素(从左到右)
127.0.0.1:6379> lrange mylist 0 -1				#获取mylist里面的所有值,-1右边第一个
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> lrange mylist 0 2 #获取下标0到2的值
1) "d"
2) "c"
3) "b"
127.0.0.1:6379> lrange mylist 0 1 #获取下标0到1的值
1) "d"
2) "c"
127.0.0.1:6379>
4、lindex lindex<key><index>按照索引下标获得元素(从左到右)
127.0.0.1:6379> lrange mylist 0 -1			#获取mylist里面的所有值,-1右边第一个
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> lindex mylist 0 #获取mylist集合中第0个元素
"d"
127.0.0.1:6379> lindex mylist 1 #获取mylist集合中第1个元素
"c"
127.0.0.1:6379> lindex mylist 2 #获取mylist集合中第2个元素
"b"
5、llen llen <key>获得列表长度
127.0.0.1:6379> lrange mylist 0 -1			#
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> llen mylist #获取mylist的长度
(integer) 4
127.0.0.1:6379> lpush mylist1 l #将l值加入mylist1中
(integer) 1
127.0.0.1:6379> llen mylist1 #获取mylist1的值
(integer) 1
6、linsert linsert <key> before/after <value><newvalue>在的后面插入插入值
127.0.0.1:6379> lrange mylist 0 -1			#获取mylist里面的所有值,-1右边第一个
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> linsert mylist before a m #在指定的值前面添加一个元素m
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1 #查看mylist里面的所有值
1) "d"
2) "c"
3) "b"
4) "m"
5) "a"
127.0.0.1:6379> linsert mylist after a n #在指定的值后边添加一个元素n
(integer) 6
127.0.0.1:6379> lrange mylist 0 -1 #查看mylist里面的所有值
1) "d"
2) "c"
3) "b"
4) "m"
5) "a"
6) "n"
127.0.0.1:6379>
7、lrem lrem <key><n><value>从左边删除n个value(从左到右)
127.0.0.1:6379> lrange mylist 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> lrem mylist 2 z #移除mylist中z元素,没有返回0
(integer) 0
127.0.0.1:6379> lrem mylist 2 a #移除mylist中2个a元素,如果只有一个a,就只能移除一个
(integer) 1
8、lset lset <key><index><value>将列表key下标为index的值替换成value
127.0.0.1:6379> lrange mylist 0 -1			#获取mylist立面的值
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> lset mylist 0 m #将第0个元素替换成m
OK
127.0.0.1:6379> lrange mylist 0 -1 #获取mylist所有元素
1) "m"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379>

三、总结

  • list实际上是一个链表,before Node after ,left right都可以插入值

  • 如果key不存在,创建新的链表

  • 如果key存在,新增内容

  • 如果移除了所有值,空链表,代表不存在

  • 在两边插入或者改动值,效率最高!中间元素效率相对较低

  • 消息队列(Lpush Rpop) 栈(Lpush Lpop)

6、Redis五大数据类型---列表(List)的更多相关文章

  1. Redis五大数据类型的常用操作

    在上一篇博文<centos安装redis>中,已经详细介绍了如何在centos上安装redis,今天主要介绍下Redis五大数据类型及其五大数据类型的相关操作. Redis支持五种数据类型 ...

  2. redis 五大数据类型使用

    redis 五大数据类型使用 字符串str 单个值 127.0.0.1:6379> set name pp # 设置键值[O(1)] OK 127.0.0.1:6379> setex na ...

  3. 一文搞定Redis五大数据类型及应用场景

    本文学习知识点 redis五大数据类型数据类型:string.hash.list.set.sorted_set 五大类型各自的应用场景 @TOC 1. string类型 1-1 string类型数据的 ...

  4. 《Redis入门指南(第二版)》读书思考总结之Redis五大数据类型

    热身:系统级命令 1. 获得符合规则的键名列表 KEYS pattern 模式匹配 产品的缓存:product+"."+....;  => keys product* 订单的 ...

  5. Redis五大数据类型详解

    关于Redis的五大数据类型,它们分别为:String.List.Hash.Set.SortSet.本文将会从它的底层数据结构.常用操作命令.一些特点和实际应用这几个方面进行解析.对于数据结构的解析, ...

  6. redis五大数据类型以及常用操作命令

    Redis的五大数据类型 String(字符串) string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value.string类型是二进制安全的.意 ...

  7. 四:Redis五大数据类型

    Redis的五大数据类型 1.string(字符串) string是Redis最基本的类型,你可以理解成与menmcached一模一样的类型,一个key对应一个value string类型是二进制安全 ...

  8. redis 基本数据类型-列表(List)

    今天不瘦给大家分享一下redis第二个基本数据类型:列表.如果大家了解基本数据结构,相信大家对列表不会陌生,比如在C语言中我们可以使用数组实现一个列表,也可以使用链表实现一个列表(列表链表傻傻分不清楚 ...

  9. Redis五大数据类型以及操作

    目录: 一.redis的两种链接方式 二.redis的字符串操作(string) 三.redis的列表操作(list) 四.redis的散列表操作(类似于字典里面嵌套字典) 五.redis的集合操作( ...

随机推荐

  1. Django 小实例S1 简易学生选课管理系统 3 创建用户模型(model)

    Django 小实例S1 简易学生选课管理系统 第3节--创建用户模型(model) 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 本文涉及到的新 ...

  2. 团队内部密码共享方案:KeePassXC+微盘(企业微信)

    目录 需求描述 适用场景 安装使用 KeePassXC初始化 浏览器插件安装设置 1.火狐 2.Edge 3.Chrome 软件-插件的链接 登陆网站并保存密码 (企业微信)微盘共享内部数据库 其他 ...

  3. [hdu7011]被EI加0了

    注意到仅关心于权值大小,预处理出$F_{i}(n)$​​​​表示$a_{1},a_{2},...,a_{n}$​​​​中恰填$i$​​​​​​种不同的数的方案数,那么显然答案即为$\sum_{i=1} ...

  4. Taro 3.4 beta 发布: 支持 Preact 为应用开辟更多体积空间

    项目体积是困扰小程序开发者的一大问题,如果开发者使用 Taro React 进行开发,更是不得不引入接近 100K 的 React 相关依赖,这让项目体积变得更加捉襟见肘.因此,Taro v3.4 的 ...

  5. 【GitHub】本地代码上传

    本地代码上传GitHub 2019-11-18  20:03:45  by冲冲 1.注册GitHub https://github.com/ 2.安装Git工具 https://git-for-win ...

  6. Kafka从入门到放弃(一) —— 初识Kafka

    消息中间件的使用已经越来越广泛,基本上具有一定规模的系统都会用到它,在大数据领域也是个必需品,但为什么使用它呢?一个技术的广泛使用必然有它的道理. 背景与问题 以前一些传统的系统,基本上都是" ...

  7. 洛谷 P5233 - [JSOI2012]爱之项链(Polya 定理+递推)

    洛谷题面传送门 首先很明显题目暗示我们先求出符合条件的戒指数量,再计算出由这些戒指能够构成的项链的个数,因此考虑分别计算它们.首先是计算符合条件的戒指数量,题目中"可以通过旋转重合的戒指视作 ...

  8. 洛谷 P5279 - [ZJOI2019]麻将(dp 套 dp)

    洛谷题面传送门 一道 dp 套 dp 的 immortal tea 首先考虑如何判断一套牌是否已经胡牌了,考虑 \(dp\)​​​​​.我们考虑将所有牌按权值大小从大到小排成一列,那我们设 \(dp_ ...

  9. HDU 5322 Hope

    HDU 5322 Hope 考虑 $ dp[n] $ 表示 长度为 $ n $ 的所有排列的答案. 首先,对于一个排列来说,如果最大值在 $ i $ 位置,那么前 $ i - 1 $ 个数必然与 $ ...

  10. 如何使用scp在Linux服务器的后台传输文件?

    目录 一.上传 常规操作 建议 后台运行 二.下载 两台服务器间文件如何传输?对于小文件,可以先从Linux服务器传到window,再传到另一台服务器.对于大的文件,如测序数据.比对文件等.这样的方法 ...