Redis 列表(List)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)

使用场景 : 消息队列,时间轴

lpush : 将一个或多个值插入列表头部,如果key是其他类型报错,成功返回列表数量,如果key不存在,先创建一个空列表

127.0.0.1:6379> set yhq 123
OK
127.0.0.1:6379> lpush yhq name age sex
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> lpush qhh name age sex
(integer) 3

lrange : 获取指定范围的值,0开始-1结束(start超出返回空列表,包含end,end超出返回所有)

127.0.0.1:6379> lrange qhh 0 -1
1) "sex"
2) "age"
3) "name"

lpushx : 插入已存在的列表头部,不存在时无效返回0,成功返回列表长度

127.0.0.1:6379> lpushx yhqqhh id
(integer) 0
127.0.0.1:6379> lpushx qhh id
(integer) 4
127.0.0.1:6379> lrange qhh 0 -1
1) "id"
2) "sex"
3) "age"
4) "name"

rpush :  将一个或多个值插入列表尾部,如果key是其他类型报错,成功返回列表数量

127.0.0.1:6379> rpush qhh class curr
(integer) 6
127.0.0.1:6379> lrange qhh 0 -1
1) "id"
2) "sex"
3) "age"
4) "name"
5) "class"
6) "curr"

rpushx: 插入已存在的列表尾部,不存在时无效返回0,成功返回列表长度

127.0.0.1:6379> rpushx q course
(integer) 0
127.0.0.1:6379> rpushx qhh course
(integer) 7
127.0.0.1:6379> lrange qhh 0 -1
1) "id"
2) "sex"
3) "age"
4) "name"
5) "class"
6) "curr"
7) "course"

llen :  返回列表长度,不存在返回0,不是列表类型报错

127.0.0.1:6379> llen yhq
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> llen qh
(integer) 0
127.0.0.1:6379> llen qhh
(integer) 7

lpop : 移除列表中第一个元素并返回,key不存在返回nil

127.0.0.1:6379> lrange qhh 0 -1
1) "id"
2) "sex"
3) "age"
4) "name"
5) "class"
6) "curr"
7) "course"
127.0.0.1:6379> lpop qhh
"id"
127.0.0.1:6379> lrange qhh 0 -1
1) "sex"
2) "age"
3) "name"
4) "class"
5) "curr"
6) "course"

rpop : 移除列表最后一个元素并返回,key不存在返回nil

127.0.0.1:6379> lrange qhh 0 -1
1) "sex"
2) "age"
3) "name"
4) "class"
5) "curr"
6) "course"
127.0.0.1:6379> rpop qhh
"course"
127.0.0.1:6379> lrange qhh 0 -1
1) "sex"
2) "age"
3) "name"
4) "class"
5) "curr"

rpoplpush : 移除列表最后一个元素,插入到另一个列表头部,返回移除的元素(如果第一个列表为空,返回nil,不执行操作)

127.0.0.1:6379> lrange qhh 0 -1
1) "sex"
2) "age"
3) "name"
4) "class"
5) "curr"
127.0.0.1:6379> lrange yhqqhh 0 -1
1) "name"
127.0.0.1:6379> rpoplpush qhh yhqqhh
"curr"
127.0.0.1:6379> lrange yhqqhh 0 -1
1) "curr"
2) "name"

lrem : 根据count的值,移除列表中与val相等的值(count>0,从头部开始,移除count个和val相等的值,<0从尾部移除count个,=0全部),返回被移除的数量,列表不存在返回0

127.0.0.1:6379> lrange qhh 0 -1
1) "age"
2) "name"
3) "name"
4) "name"
5) "name"
6) "sex"
7) "age"
8) "name"
9) "class"
127.0.0.1:6379> lrem qhh 3 name
(integer) 3
127.0.0.1:6379> lrange qhh 0 -1
1) "age"
2) "name"
3) "sex"
4) "age"
5) "name"
6) "class"

ltrim : 保留区间内的元素,0开始-1结束(超过范围的下标并不会产生错误:如果 start 超过列表尾部,或者 start > end,结果会是列表变成空表(即该 key 会被移除)。 如果 end 超过列表尾部,Redis 会将其当作列表的最后一个元素。)

127.0.0.1:6379> lrange qhh 0 -1
1) "age"
2) "name"
3) "sex"
4) "age"
5) "name"
6) "class"
127.0.0.1:6379> ltrim qhh 0 2
OK
127.0.0.1:6379> lrange qhh 0 -1
1) "age"
2) "name"
3) "sex"

lindex : 返回索引的值0开始 -1结束(不是列表返回错误,超出长度返回nil)

127.0.0.1:6379> lrange qhh 0 -1
1) "age"
2) "name"
3) "sex"
127.0.0.1:6379> lindex qhh -2
"name"

linsert : 在列表某个元素(before/after)插入val,成功返回列表长度,key没有或者列表不存在返回0,元素不存在返回-1,找到一个元素就ok,不会插入多个

127.0.0.1:6379> lrange qhh 0 -1
1) "age"
2) "name"
3) "hellow"
4) "sex"
127.0.0.1:6379> lpush qhh name
(integer) 5
127.0.0.1:6379> lrange qhh 0 -1
1) "name"
2) "age"
3) "name"
4) "hellow"
5) "sex"
127.0.0.1:6379> linsert qhh after name word
(integer) 6
127.0.0.1:6379> lrange qhh 0 -1
1) "name"
2) "word"
3) "age"
4) "name"
5) "hellow"
6) "sex"
127.0.0.1:6379> linsert qh after name 123
(integer) 0
127.0.0.1:6379> linsert qhh after name1 123
(integer) -1

lset : 通过索引修改val,成功返回ok,超出索引范围或者空列表返回错误

127.0.0.1:6379> lrange qhh 0 -1
1) "name"
2) "word"
3) "age"
4) "name"
5) "hellow"
6) "sex"
127.0.0.1:6379> lset qhh 0 666
OK
127.0.0.1:6379> lset qhh 10 666
(error) ERR index out of range
127.0.0.1:6379> lrange qhh 0 -1
1) "666"
2) "word"
3) "age"
4) "name"
5) "hellow"
6) "sex"

blpop/brpop : 移除列表第一个/最后一个元素,如果阻塞(没有元素)等待time秒后返回nil,成功返回两个元素,一个key,一个移除元素(先到先得原则)

127.0.0.1:6379> lrange qhh 0 -1
1) "666"
2) "word"
3) "age"
4) "name"
5) "hellow"
6) "sex"
127.0.0.1:6379> blpop qhh 10
1) "qhh"
2) "666"
127.0.0.1:6379> blpop list 10
(nil)
(10.02s)
127.0.0.1:6379> lrange qhh 0 -1
1) "word"
2) "age"
3) "name"
4) "hellow"
5) "sex"

brpoplpush : 从一个列表移到另一个列表,没有等待time秒

127.0.0.1:6379> brpoplpush qhh list 3
"sex"
127.0.0.1:6379> lrange qhh 0 -1
1) "word"
2) "age"
3) "name"
4) "hellow"
127.0.0.1:6379> lrange list 0 -1
1) "sex"

Redis之列表类型命令的更多相关文章

  1. redis之(六)redis的列表类型的命令

    [一]向列表两端添加元素 -->命令:LPUSH key value [value ...] -->向列表的左侧添加元素,返回值表示增加元素后列表的长度 -->命令:RPUSH ke ...

  2. redis数据类型-列表类型

    列表类型 列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段. 列表类型内部是使用双向链表(double linked list)实现的,所以向 ...

  3. redis:list列表类型的操作

    1. list列表类型的操作 1.1. lpush/rpush key value [value ...] 链表的头部(左侧)或尾部(右侧)插入值 语法:lpush key value [value ...

  4. Redis 常用命令学四:列表类型命令

    1.在列表两端增加值的命令 127.0.0.1:6379> lpush 1 (error) ERR wrong number of arguments for 'lpush' command 1 ...

  5. redis学习笔记-02 list列表类型命令

    一.lpush key value1 value2 value3 value4(命令将一个或多个值插入到列表头部. 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作) lpush k1 ...

  6. Redis之字符串类型命令

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

  7. redis非特定类型命令

    1. key查询 keys my* #获取当前数据库中符合模式的所有key exists mykey #查看key是否还存在 2. 数据库操作 redis默认一个实例的数据库是16个[db0-db15 ...

  8. 03 redis之string类型命令解析

    Redis字符串类型的操作 set key value [ex 秒数] / [px 毫秒数] [nx] /[xx] 如: set a 1 ex 10 , 10秒有效 Set a 1 px 9000 , ...

  9. Redis散列表类型

    散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他的数据类型. 一个散列类型键可以包含至多2^32 -1个字段. 命令 赋值 HSE ...

随机推荐

  1. UVM中的regmodel建模(三)

    总结一下UVM中的寄存器访问实现: 后门访问通过add_hdl_path命令来添加寄存器路径,并扩展uvm_reg_backdoor基类,定义read与write函数,最后在uvm_reg_block ...

  2. 【转】Linux进程绑CPU核

    1. 什么是绑核? 所谓绑核,其实就是设定某个进程/线程与某个CPU核的亲和力(affinity).设定以后,Linux调度器就会让这个进程/线程只在所绑定的核上面去运行.但并不是说该进程/线程就独占 ...

  3. mysql事务(一)——redo log与undo log

    数据事务 即支持ACID四大特性. A:atomicity          原子性——事务中所有操作要么全部执行成功,要么全部执行失败,回滚到初始状态 C:consistency     一致性—— ...

  4. linux make命令安装详解

    对于GNU Make或许很多Windows开发的程序员并不是很了解,因为Windows中的很多集成开发环境(IDE)都帮我们做了这件事.但是作为一个专业从事 Linux嵌入式开发的程序员就必须要了解G ...

  5. MySQL数据库----流程控制

    流程控制 1.条件语句 举例一 delimiter // CREATE PROCEDURE proc_if () BEGIN declare i int default 0; if i = 1 THE ...

  6. 含有虚函数的类sizeof大小

    #include <iostream> using namespace std; class Base1{ virtual void fun1(){} virtual void fun11 ...

  7. Java第一次实验 20145104张家明

    Java第一次实验 实验报告 实验要求: 1.使用JDK编译.运行简单的Java程序 2.使用IDEA 编辑.编译.运行.调试Java程序 实验内容: 1.使用JDK编译.运行简单的Java程序: 2 ...

  8. Android实践项目汇报-改(一)

    Google天气客户端NABC Need(需求):  功能性需求分析 天气预报客户端,顾名思义就是为用户提供实时准确的天气信息,方便用户出行生活.根据用户日常需求,软件完成后点开,载入界面,显示查询界 ...

  9. Linxu内核版本号后面多出字符串或者+号【学习笔记】

    作者:庄泽彬 之前一直没有留意到但是最近在编译内核的时候版本号竟然多出了个加号+号或字符串, 后面终于找到原因了,原来config如果设置了CONFIG_LOCALVERSION_AUTO=y,内核的 ...

  10. 调试工具--console用法收藏

    1.使用console进行性能测试和计算代码运行时间:http://www.cnblogs.com/0603ljx/p/4387628.html 2.console命令详解:http://www.cn ...