NoSQL之Redis对lists类型的操作

原创 2013年12月02日 17:15:24

一、简介

  list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等,操作中的key理解为链表的名字。Redis的list类型其实就是一个每一个子元素都是string类型的双向链表。我们可以通过push、pop操作从链表的头部或者尾部添加删除元素,这样list既可以作为栈,也可以作为队列。

二、栈跟队列的特性

1.栈:先进后出。如果把1,2,3放到栈中,那么顺序是3,2,1 1的方向是栈的头,3所在的是栈的尾。如果想从栈里把1拿出来,那么先拿3再2再1.

2.队列:先进先出,相当于一个管道,同样防1,2,3,那么出也是1,2,3。

三、list类型的相关操作

1.lpush listkey value:listkey对应list的头部添加value。

127.0.0.1:6379> lpush listkey1 'world'
(integer) 1
127.0.0.1:6379> lpush listkey1 'hello'
(integer) 2
127.0.0.1:6379> lrange listkey1 0 -1
1) "hello"
2) "world"

上面的操作代表的意思是首先我往listkey1的头压入一个world字符串,接着往它的头压入hello,然后用lrange取出listkey1中的全部数据,可以看到listkey1中从头到尾依次是hello,world。lrange listkey1 0 -1是指从listkey1中从第0个元素取到最后一个元素(从头取到尾)。

2.rpush listkey value:从listkey的尾部压入元素value

127.0.0.1:6379> rpush listkey2 'hello'
(integer) 1
127.0.0.1:6379> rpush listkey2 'world'
(integer) 2
127.0.0.1:6379> lrange listkey2 0 -1
1) "hello"
2) "world"

3.lrange listkey start end:取listkey里面的值从start取到end 

4.linsert listkey before/after value1 value2:从listkey的头开始,在value1的前/后面压入value2

127.0.0.1:6379> lpush listkey3 v1
(integer) 1
127.0.0.1:6379> lpush listkey3 v2
(integer) 2
127.0.0.1:6379> lpush listkey3 v3
(integer) 3
127.0.0.1:6379> lpush listkey3 v4
(integer) 4
127.0.0.1:6379> lrange listkey3 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"
127.0.0.1:6379> linsert listkey3 before v1 v5
(integer) 5
127.0.0.1:6379> lrange listkey3 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v5"
5) "v1"

这里有一点需要注意,就是如果list中如果有2个或者多个相同的值,那么执行before会是什么情况?这个大家可以自己测试,记住一点,before是从list的头开始算起的,遇到的第一个为准。

关于链表的头尾,记住一个规则,从尾到头为向上,永远指向头的方向为前。

5.lset listkey flag value:设定listkey中指定下标flag的元素值替换为value
127.0.0.1:6379> lrange listkey4 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lset listkey4 2 four
OK
127.0.0.1:6379> lrange listkey4 0 -1
1) "three"
2) "two"
3) "four"

上面首先存储一个listkey4链表,用从头压入的方法压入3个元素one,two,three,这样three对应的下标是0,two对应的是1,one对应的是2,因为是从头压入的。所以用lset listkey4 2 four实际上是把one替换成了four。再用larange listkey4 0 -1从头到尾取的时候自然就得到了three two four

6.lrem listkey n value:listkey的list中删除n个和value相同的值(n < 0从尾删除,n=0全部删除)。
127.0.0.1:6379> lrange listkey5 0 -1
1) "four"
2) "four"
3) "four"
4) "three"
5) "two"
6) "two"
7) "one"
8) "one"
9) "one"

127.0.0.1:6379> lrem listkey5 2 four
(integer) 2
127.0.0.1:6379> lrange listkey5 0 -1
1) "four"
2) "three"
3) "two"
4) "two"
5) "one"
6) "one"
7) "one"
127.0.0.1:6379> lrem listkey5 -2 one
(integer) 2
127.0.0.1:6379> lrange listkey5 0 -1
1) "four"
2) "three"
3) "two"
4) "two"
5) "one"

大家仔细琢磨一下上面的一系列操作吧。

lrem结果成功返回删除掉的记录数,如果失败返回0

7.ltrim listkey start end:保留指定的listkey的值范围内的数据,从start开始到end结束,其他元素会全部删除掉

127.0.0.1:6379> lrange listkey4 0 -1
1) "three"
2) "three"
3) "three"
4) "two"
5) "four"

127.0.0.1:6379> ltrim listkey4 2 3
OK
127.0.0.1:6379> lrange listkey4 0 -1
1) "three"
2) "two"

注意start到end是保留的范围而不是删除的范围。

8.lpop/rpop listkey:从listkey的list的头/尾部删除元素,并且返回删除的元素。返回值是被删除的元素值

127.0.0.1:6379> lrange listkey4 0 -1
1) "three"
2) "two"

127.0.0.1:6379> lpop listkey4
"three"
127.0.0.1:6379> lrange listkey4 0 -1
1) "two"

9.rpoplpush listkey1 listkey2:从listkey1的尾部弹出元素并且添加到listkey2的头部。返回结果成功是是被弹出的元素value

127.0.0.1:6379> lrange listkey5 0 -1
1) "four"
2) "three"
3) "two"
4) "two"
5) "one"
127.0.0.1:6379> lrange listkey6 0 -1
1) "two"
2) "one"
127.0.0.1:6379> rpoplpush listkey5 listkey6
"one"
127.0.0.1:6379> lrange listkey6 0 -1
1) "one"
2) "two"
3) "one"

10.lindex listkey index:返回listkey对应的链表中,index位置的value。index位置从头开始算起。index可以是负数,如果是负数证明是从尾开始算起。

127.0.0.1:6379> lrange listkey6 0 -1
1) "one"
2) "two"
3) "one"
127.0.0.1:6379> lindex listkey6 0
"one"
127.0.0.1:6379> lindex listkey6 1
"two"

11.llen listkey:返回listkey中元素的个数,返回值是一个integer

127.0.0.1:6379> llen listkey5
(integer) 4
127.0.0.1:6379> lrange listkey5 0 -1
1) "four"
2) "three"
3) "two"
4) "two"

相关文章推荐

redis--lists类型及操作

lists类型List是一个链表结构,主要功能是push、pop、获取 一个范围的所有值等等,操作中key理解为链表的名字。redis的list类型其实就是一个每个子元素都是string类型的双向链表...

Redis实战《红丸出品》2.4 lists类型及操作

----------------------------------------------------------------------------------------------------...

redis 学习手册之列表数据类型Lists操作命令

redis 如何来操作lists类型,如何插入,删除,查询,定位等等操作

Redis之lists类型及操作

Redis的Lists的介绍及相关命令

NoSQL之Redis对string数据类型的操作

一、简介   String是最简单的数据类型,一个Key对应一个Value,String类型是二进制安装的。Redis的string可以包含任何数据,比如jpg图片或者序列化的对象。...

NoSQL之Redis对数据类型hash的操作

一、简介 Redishash是一个string类型的field和value的映射表。它的添加、删除操作都是O(1)(平均)。hash特别适合存储对象,将一个对象存储在hash类型中会占用更少的内存,并...

NoSQL之Redis对zset(有序集合)数据类型的操作

一、简介 Sorted set(zset)是set的升级版本,它在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新得值调整顺序。可以理解为有两...

NoSQL之Redis(二)---Java操作Redis存储自定义类型数据

使用java语言操作redis需要引用jedis的jar包,我用的版本是2.8.0【点击下载】。Redis支持存储的数据类型有String,List,Map,Set,Hash及Zset。 ...

NoSql之Redis数据类型

通过前面两篇博客,我们已经知道了NoSql以及redis的安装,今天我们正式介绍redis。redis简介       Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NoSQL之Redis对lists类型的操作
举报原因:
原因补充:

(最多只允许输入30个字)