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. html的JavaScript的简单输入验证

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 极简 Node.js 入门 - 3.4 文件夹写入

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  3. 团队作业3 需求改进&系统设计(银河超级无敌舰队)

    目录 一.需求&原型改进 1. 需求改进 2. 修改说明书 3.功能分析 4. 调整WBS及计划 二.系统设计 1. 总体设计 2. 数据库设计 3.社团设计 三.Alpha任务分配计划 1. ...

  4. Solving the Distal Reward Problem through Linkage of STDP and Dopamine Signaling

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Abstract 在巴甫洛夫式和工具性条件下,奖励通常是在奖励触发动作几秒钟后产生的,从而产生了一个被称为“远端奖励问题”的解释难题:如果 ...

  5. wordpress建站如何用SMTP配置邮件通知

    前提条件:你已经有了企业邮箱,相关文章请看:如何开通阿里云企业邮箱免费版(点此前往) 不建议使用主机商提供的邮箱,因为换主机商是比较常见的事情,因此导致的邮箱迁移就有些麻烦了,不如一开始就选择独立的第 ...

  6. Java 接口简述

    Java 接口 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并 ...

  7. 关于函数式接口, printable 自定义

    这段代码在jdk1.8可以使用,  由于我是jdk14, 会报错. 这里可以优化, lambda表达式进一步优化写为:  printString(System.Out::println); 注意案例版 ...

  8. vue项目中遇到的问题(包含兼容性问题)

    一.由于懒加载,使用elementUI里面的dialog的时候dialog还未被渲染成DOM元素,调用清空表单验证的方法会报错this.$refs[formName].resetFields(); 解 ...

  9. ASP.NET Core3.1使用IdentityServer4中间件系列随笔(五):创建使用[Code-授权码]授权模式的客户端

    配套源码:https://gitee.com/jardeng/IdentitySolution 本篇将创建使用[Code-授权码]授权模式的客户端,来对受保护的API资源进行访问. 1.接上一篇项目, ...

  10. SEO外包好还是自己组建团队

    http://www.wocaoseo.com/thread-151-1-1.html       营络营销已成为企业不可忽视的一块大肥肉,很多企业都想进来分一杯羹,但是不少企业苦于缺少过硬的技术,无 ...