一、列表(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. OAuth 2.0 扩展协议之 PKCE

    前言 阅读本文前需要了解 OAuth 2.0 授权协议的相关内容, 可以参考我的上一篇文章 OAuth 2.0 的探险之旅. PKCE 全称是 Proof Key for Code Exchange, ...

  2. Python基础(map/reduce)

    from functools import reduce#reduce函数在python3的内建函数移除了,放入了functools模块 #map() list1 = [1,2,3,4,5,6,7,8 ...

  3. GIS应用|快速开发REST空间分析服务

    随着计算机的快速发展,GIS已经在各大领域得到应用,和我们的生活息息相关, 但是基于GIS几大厂商搭建服务,都会有一定的门槛,尤其是需要server,成本高,难度大,这里介绍一种在线GIS云平台,帮你 ...

  4. layui使用html+servlet+ajax实现登录验证

    我们一般使用的都是form表单提交到Servlet来实现前端和后端的交互的.这次我使用的是ajax提交数据,实现登录操作. 首先我们需要的是一套layui模板,这里用到layui的js和css界面. ...

  5. [loj6500]操作

    差分,令$b_{i}=a_{i-1}\oplus a_{i}$,对于一个区间$[l,r]$,相当于令$a_{l-1}=a_{r+1}=0$之后求出$b_{l..r+1}$,对区间$[i-k,i)$异或 ...

  6. 【JavaSE】字符编码和存储编码

    字符编码和存储编码 2019-07-15  22:34:51  by冲冲 1. 英文字母和中文汉字在不同字符集编码下的字节数不同. 英文字母 字节数 : 1; 编码:GB2312 字节数 : 1; 编 ...

  7. static关键字相关内容

    静态变量(static)与非静态变量,静态方法(static)与非静态方法 //static public class Student { private static int age; //静态的变 ...

  8. Break up CF700C

    Break up CF700C 首先考虑只能删一条边的做法,我们可以找出所有的桥,然后随便跑一条 S 到 T 路径,如果这条路径上有桥就说明可以,否则不行 发现这个做法其实是 O(M) 的 那么可以先 ...

  9. 洛谷 P5331 - [SNOI2019]通信(CDQ 分治优化建图+费用流)

    题面传送门 首先熟悉网络流的同学应该能一眼看出此题的建模方法: 将每个点拆成两个点 \(in_i,out_i\),连一条 \(S\to in_i\),容量为 \(1\) 费用为 \(0\) 的边 连一 ...

  10. PCA方差解释比例求解与绘图?

    目录 主成分方差解释率计算 绘图示例 主成分方差解释率计算 通常,求得了PCA降维后的特征值,我们就可以绘图,但各个维度的方差解释率没有得到,就无法获得PC坐标的百分比. 有些工具的结果是提供了维度标 ...