博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis 基础命令 --- List篇
阅读量:2427 次
发布时间:2019-05-10

本文共 3711 字,大约阅读时间需要 12 分钟。

实验环境

操作系统: ubuntu-16.04-x64redis版本: 4.0.9

概述

List类型可以存储一个字符串列表,常用的操作是在两端添加弹出元素或者获得列表的一个片段。

List类型内部是使用双向链表实现的,所以向List两端添加元素的时间复杂度是O(1),通过索引获取元素的时间复杂度是O(n)。
List类型还可以作为队列来使用。与Hash类型键值最多能容纳的字段数量相同,一个List类型键最多容纳2^32 - 1个元素。

命令

1.向List两段增加元素

LPUSH key value [value ...] #向List左边增加元素RPUSH key value [value ...] #向List右边增加元素

例:

127.0.0.1:6379> LPUSH list1 1(integer) 1127.0.0.1:6379> RPUSH list1  2 3 4 (integer) 4

2.从List两段弹出元素

LPOP key    #从List左边弹出元素 RPOP key    #从List右边弹出元素

例:

127.0.0.1:6379> LPUSH list1 1 2 3 4 5 (integer) 5127.0.0.1:6379> LPOP list1"5"127.0.0.1:6379> RPOP list1"1"

3.获取List元素的个数

LLEN key

例:

127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6(integer) 6127.0.0.1:6379> LLEN list1(integer) 6

4.获得List片段

LRANGE key start stop

例:

List 正向(从左到右)索引从0开始,最大为List长度减1。

127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6(integer) 6127.0.0.1:6379> LRANGE list1 0 21) "6"2) "5"3) "4"

List反向(从右到左)索引从-1开始表示倒数第一个元素,-2表示倒数第二个元素,以此类推。

127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6(integer) 6127.0.0.1:6379> LRANGE list1 -3 -1 1) "3"2) "2"3) "1"

LRANGE key 0 -1可以获取List中所有的所有元素。另外还有一些特殊情况:

(1)如果start的索引位置比stop的索引位置靠后,则会返回空List。

127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6(integer) 6127.0.0.1:6379> LRANGE list1 3 0(empty list or set)

(2)如果stop大于实际的索引范围,则会返回到列表最右边的元素。

127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6(integer) 6127.0.0.1:6379> LRANGE list1 0 1001) "6"2) "5"3) "4"4) "3"5) "2"6) "1"

5.删除List中指定的值

LREM key count value

LREM命令会删除List中前count个值为value的元素,返回值是实际删除的个数。根据count值得不同,LREM命令的执行方式略有差异。

1.当count > 0时LREM命令会从List左边开始删除前count个值为value的元素

2.当count < 0时LREM命令会从List右边开始删除前| count |个值为value的元素。
3.当count = 0是LREM命令会删除所有值为value的元素。
例:

127.0.0.1:6379> LPUSH list1 0 2 3 2 3 4 (integer) 6127.0.0.1:6379> LRANGE list1 0 -11) "4"2) "3"3) "2"4) "3"5) "2"6) "0"127.0.0.1:6379> LREM list1 1 3(integer) 1127.0.0.1:6379> LRANGE list1 0 -11) "4"2) "2"3) "3"4) "2"5) "0"127.0.0.1:6379> LPUSH list1 0 2 3 2 3 4 (integer) 6127.0.0.1:6379> LRANGE list1 0 -11) "4"2) "3"3) "2"4) "3"5) "2"6) "0"127.0.0.1:6379> LREM list1 -1 2(integer) 1127.0.0.1:6379> LRANGE list1 0 -11) "4"2) "3"3) "2"4) "3"5) "0"127.0.0.1:6379> LPUSH list1 0 2 3 2 3 4 (integer) 6127.0.0.1:6379> LRANGE list1  0 -11) "4"2) "3"3) "2"4) "3"5) "2"6) "0"127.0.0.1:6379> LREM list1 0 2(integer) 2127.0.0.1:6379> LRANGE list1  0 -11) "4"2) "3"3) "3"4) "0"

6.获得/设置指定索引的元素值

LINDEX key indexLSET key index value

LINDEX元素返回指定索引的元素。正索引(从左到右)从0开始,负索引从(从右到左)从-1开始。

127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6 7(integer) 7127.0.0.1:6379> LINDEX list1 1"6"127.0.0.1:6379> LINDEX list1 -1"1"

LSET将索引为index的元素赋值为value

127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6(integer) 6127.0.0.1:6379> LRANGE list1 0 -11) "6"2) "5"3) "4"4) "3"5) "2"6) "1"127.0.0.1:6379> LSET list1 0 10OK127.0.0.1:6379> LRANGE list1 0 -11) "10"2) "5"3) "4"4) "3"5) "2"6) "1"

7.只保留列表指定片段

LTRIM key start stop

LTRIM命令可以删除指定索引范围之外的所有元素。

例:

127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6 7(integer) 7127.0.0.1:6379> LRANGE list1 0 -11) "7"2) "6"3) "5"4) "4"5) "3"6) "2"7) "1"127.0.0.1:6379> LTRIM list1 0 1OK127.0.0.1:6379> LRANGE list1 0 -11) "7"2) "6"

8.向列表中插入元素

LINSERT key BEFORE|AFTER pivot value

LINSERT命令首先会在List中从左到右查找值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER将数据value插入到该元素的前面还是后面。

LINSERT返回插入后列表的个数。

例:

127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6(integer) 6127.0.0.1:6379> LINSERT list1 AFTER 3 3.5(integer) 7127.0.0.1:6379> LRANGE list1 0 -11) "6"2) "5"3) "4"4) "3"5) "3.5"6) "2"7) "1"

9.将元素从一个列表转到另一个列表

RPOPLPUSH source destination

RPOPLPUSH这个命令从名字可以看出其功能:先执行RPOP命令再执行LPUSH命令。它先从source列表类型键的右边弹出一个元素,然后再将其加入到destination列表类型键的右边,并返回这个元素的值,该过程是原子的。

例:

127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6(integer) 6127.0.0.1:6379> LRANGE list1 0 -11) "6"2) "5"3) "4"4) "3"5) "2"6) "1"127.0.0.1:6379> RPOPLPUSH list1 list2"1"127.0.0.1:6379> LRANGE list2 0 -11) "1"

转载地址:http://agcmb.baihongyu.com/

你可能感兴趣的文章
微服务精华问答 | 为什么需要微服务?
查看>>
当我们谈AI时,到底该谈什么?
查看>>
kafka系统设计开篇
查看>>
2019全球编程语言高薪排行榜登场;余承东正式宣布华为IFA2019 或发布麒麟990;OPPO、vivo和小米成立互传联盟…...
查看>>
虚拟化精华问答 | 虚拟化技术分类
查看>>
面向过程语言和面向对象语言的差别:
查看>>
【c语言】基本数据数据类型回顾
查看>>
【c语言】写一个函数返回参数二进制中 1 的个数 比如: 15 0000 1111 4 个 1
查看>>
【C语言】【编程练习】字符大小写问题
查看>>
【C语言】【编程练习】判断100到200之间的素数
查看>>
【C语言】将数组A中的内容和数组B中的内容进行交换。(数组一样大)
查看>>
【C语言】实现一个简单小游戏-三子棋
查看>>
【C语言】c语言程序编译运行过程;静态链接,动态链接;
查看>>
【C语言】数据在计算机中的存储与运算
查看>>
【计算机】什么是计算机中的大端小端
查看>>
【C语言】深入理解const,volatile,static关键字
查看>>
【C语言】c/c++程序的内存是如何分配的?
查看>>
【C语言】深入理解C语言的函数调用过程
查看>>
【C语言】C语言中格式化字符的具体用法(C语言中%的那些事)
查看>>
【java】十大经典排序算法(动图演示)
查看>>