4.Redis常用命令:List

  在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是4294967295。       从元素插入和删除的效率视角来看,如果我们是在链表的两头插入或删除元素,这将会是非常高效的操作,即使链表中已经存储了百万条记录,该操作也可以在常量时间内完成。然而需要说明的是,如果元素插入或删除操作是作用于链表中间,那将会是非常低效的。相信对于有良好数据结构基础的开发者而言,这一点并不难理解。

1、LPUSH key value1 [value2]

在列表头(左)加上一个或多个值的列表

127.0.0.1:6379> lpush mylist a b c
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "b"
3) "a"

LPUSH 就是在左边插入,插入 a b c 就是先 a -> b a -> c b a 。

2、RPUSH key value1 [value2]

在列表尾(右)加上一个或多个值的列表

127.0.0.1:6379> rpush mylist a b c 
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "a"
2) "b"
3) "c"

RPUSH 就是在右边插入,插入 a b c 就是先 a -> a b -> a b c

3、LPOP key

获取并取出列表中的第一个元素(左边第一个)

127.0.0.1:6379> rpush mylist a b c 
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> lpop mylist
"a"
127.0.0.1:6379> lpop mylist
"b"
127.0.0.1:6379> lpop mylist
"c"

4、RPOP key

取出并获取列表中的最后一个元素(右边第一个)

127.0.0.1:6379> rpush mylist a b c 
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> rpop mylist
"c"
127.0.0.1:6379> rpop mylist
"b"
127.0.0.1:6379> rpop mylist
"a"

5、LLEN key

获取列表的长度

127.0.0.1:6379> lrange mylist 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> llen mylist
(integer) 3
127.0.0.1:6379> rpush mylist d
(integer) 4
127.0.0.1:6379> llen mylist
(integer) 4

6、LRANGE key start stop 

从一个列表获取元素,其中start/stop都是下标,并且都可以是负数,比如-1表示倒数第一个,-2表示倒数第二个。

127.0.0.1:6379> rpush mylist a b c 
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "a"
2) "b"
3) "c"

7、LTRIM key start stop

修剪列表到指定的范围内

127.0.0.1:6379> lrange mylist 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> ltrim mylist 1 -1
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "b"
2) "c"
3) "d"

这里的 start/stop 也是下标,也可以是负数。

8、LREM key count value

根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。

COUNT 的值可以是以下几种:

  • count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
  • count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
  • count = 0 : 移除表中所有与 VALUE 相等的值。
127.0.0.1:6379> lrange mylist 0 -1
1) "a"
2) "b"
3) "c"
4) "a"
5) "a"
6) "d"
7) "e"
127.0.0.1:6379> lrem mylist 2 a 
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "b"
2) "c"
3) "a"
4) "d"
5) "e"

上面的命令指示:在 mylist 列表,从左到右扫描,移除两个与 'a' 相等的值。

6、LINSERT key BEFORE|AFTER pivot value

在列表中的其他元素之后或之前插入一个元素

127.0.0.1:6379> rpush list1 foo
(integer) 1
127.0.0.1:6379> rpush list1 bar
(integer) 2
127.0.0.1:6379> linsert list1 before bar yes
(integer) 3
127.0.0.1:6379> lrange list1 0 -1
1) "foo"
2) "yes"
3) "bar"

8、LINDEX key index

从一个列表其索引获取对应的元素

127.0.0.1:6379> lrange mylist 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> lindex mylist 0
"a"
127.0.0.1:6379> lindex mylist 3
"d"

9、LSET key index value

在列表中的索引设置一个元素的值

127.0.0.1:6379> lrange mylist 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> lset mylist 0 aa
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "aa"
2) "b"
3) "c"
4) "d"

====================== 我是罪恶的分割线 ======================

RPOPLPUSH source destination

删除最后一个元素的列表,将其附加到另一个列表并返回它

BRPOPLPUSH source destination timeout

从列表中弹出一个值,它推到另一个列表并返回它;或阻塞,直到有可用

BLPOP key1 [key2] timeout

取出并获取列表中的第一个元素,或阻塞,直到有可用

BRPOP key1 [key2] timeout

取出并获取列表中的最后一个元素,或阻塞,直到有可用

LPUSHX key value

在前面加上一个值列表,仅当列表中存在

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IMWeb前端团队

ECMAScript 6 新特性总结

本文作者:IMWeb 张颖 原文出处:IMWeb社区 未经同意,禁止转载 前言 个人感觉ECMAScript 6总体上来说:添加了块级作用域,增加了一...

4316
来自专栏余林丰

多个构造器参数使用构建器

标题一眼看过去可能不是很明白要讲什么,先来看看下面一段代码。 1 package example; 2 3 /** 4 * 重叠构造器 5 * ...

1938
来自专栏编程

使用dict和set

Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。-...

22110
来自专栏刘望舒

kotlin到底好在哪里?

最近在学kotlin,虽然还没有像其他博主一样立马就爱上它.但是不得不说,kotlin对比起java还是有不少优势的. 1、语法简洁 首先是语法比较简洁,能不简...

3527
来自专栏前端儿

表达式求值

ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式都能求出它的值的计算器,现在请你帮助他来实现这个计算器...

1272
来自专栏个人随笔

ADO.NET查询和操作数据库

stringbuilder 类 stringbuilder类:用来定义可变字符串 stringbulider Append(string value)   在结...

3345
来自专栏诸葛青云的专栏

C语言位运算的妙用你知道多少?

位运算在驱动开发中是经常遇到的,尤其是置0和置1。既要指定的位数发生变化,又不能改变其它位的值,还要高效率的编写代码,这时候技巧就很重要了。在位运算中有几个符号...

1654
来自专栏Java技术分享

JavaBean与内省操作

JavaBean是一种特殊的Java类,主要用于传递数据信息,这种Java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。

21010
来自专栏calmound

sprintf的用法

在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者...

3446
来自专栏SeanCheney的专栏

Python题目

简述函数式编程 在函数式编程中,函数是基本单位,变量只是一个名称,而不是一个存储单元。除了匿名函数外,Python还使用fliter(),map(),red...

49016

扫码关注云+社区

领取腾讯云代金券