Redis中LIST列表的相关命令

添加

lpush

将一个或多个value插入到key的表头,如果存在多个value,那么各个value按从左到右的顺序依次插入表头

插入表头:意味着新插入的值在最前列

如果list之前不存在,则会创建一个新的list,如果list已存在,则追加,返回值是list的元素数量,也可以理解位最后插入的元素的相对位置

127.0.0.1:6379> lpush list2 zhangsan lisi wangwu
(integer) 3
127.0.0.1:6379>

rpush

lpush功能一样,只不过是从从右往左插入(尾部)

语法:rpush key value1 value2 value3.....

rpush插入时value的顺序就是元素在list中的顺序

rpushx

在指定list的尾部插入元素,如果该list不存在,则操作无效

127.0.0.1:6379> rpush list4 hello
(integer) 1
127.0.0.1:6379> rpushx list5 hello
(integer) 0

lpushx

rpushx一样,只不过是从头部插入

linsert

语法:linsert key before|alter value1 value2

list中的value1元素之前或之后位置插入value2,如果value1不存在list key中,那么不执行任何操作

#在list2中的c元素之前插入一个new元素
127.0.0.1:6379> linsert list2 before c new
(integer) 7
127.0.0.1:6379> lrange list2 0 -1
1) "a"
2) "b"
3) "new"
4) "c"
5) "d"
6) "e"
7) "f"

修改

ltrim

对一个list进行裁剪,即让列表值保留指定期间的元素,其余删除

127.0.0.1:6379> lrange list2 0 -1
1) "chenqi"
2) "zhaoliu"
3) "wangwu"
4) "lisi"
127.0.0.1:6379> ltrim list2 -2 -1
OK
127.0.0.1:6379> lrange list2 0 -1
1) "wangwu"
2) "lisi"
127.0.0.1:6379>

lset

设置指定下标位置元素的值(把原来的值修改了),如果下标不存在则报错

127.0.0.1:6379> lset list2 2 redis
OK
127.0.0.1:6379> lrange list2 0 -1
1) "a"
2) "b"
3) "redis"
4) "c"
5) "d"
6) "e"
7) "f"

删除

rpop

list的尾部弹出一个元素

127.0.0.1:6379> lrange list2 0 -1
1) "chenqi"
2) "zhaoliu"
3) "wangwu"
4) "lisi"
5) "zhangsan"
127.0.0.1:6379> rpop list2
"zhangsan"
127.0.0.1:6379> lrange list2 0 -1
1) "chenqi"
2) "zhaoliu"
3) "wangwu"
4) "lisi"
127.0.0.1:6379>

弹出的意思就是移除

lpop

list的同步弹出一个元素

语法:lpop key

blpop

lpop一样是弹出语句,不过是阻塞式列表弹出.

同样依次弹出list中的元素,但是如果list没有可供弹出的元素,那么这个操作(连接)将等待,直到list中有可供弹出的元素或者连接等待超时直接gg

127.0.0.1:6379> blpop list2 10
1) "list2"
2) "wangwu"
127.0.0.1:6379> blpop list2 10
1) "list2"
2) "lisi"
127.0.0.1:6379> blpop list2 10
(nil)
(10.09s) #超时

注意,这个10代表操作超时时间,该命令返回两个结果,第一个是操作的listkey名称.第二个结果是弹出的具体元素

还有brpop,brpoplpush都是对应命令的阻塞版本

查询

lrange

返回列表key中指定区间之内的元素,区间偏移量startstop指定,下标startstop都是以0开始

注意,偏移量也可以是负数,-1表示列表的最后一个元素,-2表示列表的倒数第二个元素

127.0.0.1:6379> lrange list2 2 4
1) "wangwu"
2) "lisi"
3) "zhangsan"

在偏移量位负数的时候,我们应该把list的顺序倒过来看

tip:lrange key 0 -1就是获取所有元素

start位负数时,它的起点位置从后面开始数,所以说,start确定了值的时候,lrange可以输出的最大范围已经决定了,不管stop的值是什么,输出的元素范围绝对是start开始往后的元素最大范围.

所以Redis中的range相关命令其实最重要要看start参数的值,stop只是决定了尾部在哪里

lrange中,stop的值绝对不能在start的前面

lindex

返回list中指定下标的元素,0是开始下标,如果下标位负数,那么顺序从后往前,-1是开始位置也是列表中的最后元素

127.0.0.1:6379> lindex list2 -3
"zhaoliu"
127.0.0.1:6379> lindex list2 1
"zhaoliu"

考虑到下标可以负数,所以每个元素是有俩个下标代表位置

llen

返回列表的长度

语法:llen key

如果key不存在,则key被解释位一个空列表,返回0

那么,如果返回值是0,不一定是list内部元素为空,还有可能key不存在

特殊操作

rpoplpush

语法:rpoplpush key1 key2

key1中的尾部弹出一个元素并插入到key2的头部

127.0.0.1:6379> rpush list2 a b c d e f g
(integer) 7
127.0.0.1:6379> rpoplpush list2 list3
"g"
127.0.0.1:6379> lrange list2 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
127.0.0.1:6379> lrange list3 0 -1
1) "g"
127.0.0.1:6379>

Redis中LIST列表的相关命令的更多相关文章

  1. Redis中有序列表(ZSet)相关命令

    redis语序集合和集合set是一样内部value为string类型的集合,有序不允许重复元素 但是,zset的每个元素有一个double类型的分数(score).redis正是靠这个分数对元素从小到 ...

  2. Redis中String类型的相关命令操作

    String append 如果key已存在,则直接在value追加值,如果key不存在,则会插件一个新的value为空的key,然后在追加 127.0.0.1:6379> set name l ...

  3. Redis中的原子操作(2)-redis中使用Lua脚本保证命令原子性

    Redis 如何应对并发访问 使用 Lua 脚本 Redis 中如何使用 Lua 脚本 EVAL EVALSHA SCRIPT 命令 SCRIPT LOAD SCRIPT EXISTS SCRIPT ...

  4. Redis中的数据结构与常用命令

    开发系统:Ubuntu 17.04Redis驱动:StackExchange.Redis 1.2.3Redis版本:3.2.1开发平台:.NET Core 对于Redis的介绍这里只写一句:Redis ...

  5. python学习(7)关于列表操作相关命令以及浅复制深复制

    在python中,[]表示的是列表.列表有各种操作命令. 1.append()方法,添加一个元素到列表尾部. 注意append()方法与extend()方法有区别:list.append(object ...

  6. Redis散列(Hash)的相关命令

    散列 就像一个减配的Redis 内部及其类似Java的Map 内容就是key:value结构 hash类型在面向对象编程的运用中及其适合,因为它可以直接保存编程语言中的实体类关系 增 hset hse ...

  7. 『学了就忘』Linux基础命令 — 37、Linux中挂载操作的相关命令

    目录 1.mount命令介绍 (1)mount命令说明 (2)mount命令格式 2.mount命令示例 3.mount -a命令说明 4.-o特殊选项说明 5.exec/noexec选项说明 挂载就 ...

  8. Redis 中的原子操作(1)-Redis 中命令的原子性

    Redis 如何应对并发访问 Redis 中处理并发的方案 原子性 Redis 的编程模型 Unix 中的 I/O 模型 thread-based architecture(基于线程的架构) even ...

  9. redis对键进行的相关操作

    redis对键操作的相关命令以及如何在python使用这些命令 redis对键操作的命令: 命令 语法 概述 返回值 Redis DEL 命令 del key [key ...] 该命令用于在 key ...

随机推荐

  1. 第三篇 Scrum冲刺博客

    一.会议图片 二.项目进展 成员 完成情况 今日任务 冯荣新 商品列表,商品详情轮播图 商品底部工具栏,购物车列表 陈泽佳 历史足迹,静态页面 渲染搜索结果,防抖的实现 徐伟浩 未完成 商品信息录入 ...

  2. 在服务器上使用python-gym出现的关于显示的问题

    疫情期间在家连着实验室的服务器继续学习,用到关于强化学习相关的包 gym 时,在render上出现了问题. 环境: Ubuntu18.04 服务器python 3.7.6gym 0.17.1jupyt ...

  3. Pytorch中torch.load()中出现AttributeError: Can't get attribute

    原因:保存下来的模型和参数不能在没有类定义时直接使用. Pytorch使用Pickle来处理保存/加载模型,这个问题实际上是Pickle的问题,而不是Pytorch. 解决方法也非常简单,只需显式地导 ...

  4. 关闭jetbrains ide support 正在调试此浏览器提示

    1 安装JetBrains IDE Support插件 插件地址 2 启用插件 3 设置访问端口 4 WebStorm中设置Live Edit 5 关闭"JetBrains IDE Supp ...

  5. Python全局变量的简单使用

    对Pyhon实现静态变量全局变量的方法详解 python不能像C++一样直接定义一个static变量或者通过extern来导入别的库的变量而实现数据共享,但是python的思想是通过模块化来解决这个问 ...

  6. Qt QTranslator 实现多语言转换

    1.在*.pro文件里面添加TRANSLATIONS += English.tsChinese.ts根据自己想要添加多少种语言和什么语言视情况添加. 2.a.通过qt ui设计师添加的文字 首先记得选 ...

  7. C语言中存储多个字符串的两种方式

    C语言中存储多个字符串的两种方式 方式一    二维字符串数组 声明: char name[][] = { "Justinian", "Momo", " ...

  8. Monkey and Banana(dp,求最长的下降子序列)

    A group of researchers are designing an experiment to test the IQ of a monkey. They will hang a bana ...

  9. 最小发射功率下WSN的连通性和覆盖率

    简述: 实验要求我们将传感器节点随机均匀分布在1x1的方格中,然后计算节点的最小共同发射功率(COMPOW),保证网络刚好连通,并计算出这些节点的覆盖率.为了解决这个问题,我们的做法是随机均匀部署10 ...

  10. 跟着兄弟连系统学习Linux-【day08】

    day08-20200605 p27.软件包管理简 windows 和 linux 软件是不同的版本. Linux源码包,开源的.绝大部分都是C语言写的.源码包安装速度比较慢.需要先编译后再安装.脚本 ...