设为首页 加入收藏

TOP

小贝_redislist类型学习(四)
2015-11-21 01:41:17 来源: 作者: 【 】 浏览:1
Tags:小贝 _redislist 类型 学习

O(S+N),S为偏移量start,N为指定区间内元素的数量。

返回值:

一个列表,包含指定区间内的元素。

127.0.0.1:6379>rpush fp-language lisp # 插入一个值到列表fp-language

(integer)1

127.0.0.1:6379>lrange fp-language 0 0

1)"lisp"

127.0.0.1:6379>rpush fp-language scheme

(integer)2

127.0.0.1:6379>lrange fp-language 0 1

1)"lisp"

2)"scheme"

?

11、lrem

lremkey count value

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

count的值可以是以下几种:

count> 0: 从表头开始向表尾搜索,移除与value相等的元素,数量为count。

count< 0: 从表尾开始向表头搜索,移除与value相等的元素,数量为count的绝对值。

count= 0: 移除表中所有与value相等的值。

时间复杂度:

O(N),N为列表的长度。

返回值:

被移除元素的数量。

因为不存在的key被视作空表(empty list),所以当key不存在时,lrem命令总是返回0。

#先创建一个表,内容排列是

#morning hello morning helllo morning

127.0.0.1:6379>lpush greet "morning"

(integer)1

127.0.0.1:6379>lpush greet "hello"

(integer)2

127.0.0.1:6379>lpush greet "morning"

(integer)3

127.0.0.1:6379>lpush greet "hello"

(integer)4

127.0.0.1:6379>lpush greet "morning"

(integer)5

?

127.0.0.1:6379>lrange greet 0 4 # 查看所有元素

1)"morning"

2)"hello"

3)"morning"

4)"hello"

5)"morning"

?

127.0.0.1:6379>lrem greet 2 morning # 移除从表头到表尾,最先发现的两个morning

(integer)2 # 两个元素被移除

?

127.0.0.1:6379>llen greet # 还剩3个元素

(integer)3

?

127.0.0.1:6379>lrange greet 0 2

1)"hello"

2)"hello"

3)"morning"

?

127.0.0.1:6379>lrem greet -1 morning # 移除从表尾到表头,第一个morning

(integer)1

?

127.0.0.1:6379>llen greet

(integer)2

?

127.0.0.1:6379>lrange greet 0 1

1)"hello"

2)"hello"

?

127.0.0.1:6379>lrem greet 0 hello # 移除表中所有hello

(integer)2 # 两个hello被移除

?

127.0.0.1:6379>llen greet

(integer)0

?

12、lset

lsetkey index value

将列表key下标为index的元素的值甚至为value。

更多信息请参考lindex操作。

当index参数超出范围时,返回一个错误。

时间复杂度:

对头元素或尾元素进行lset操作,复杂度为O(1)。

其他情况下,为O(N),N为列表的长度。

返回值:

操作成功返回ok,否则返回错误信息。

127.0.0.1:6379>lpush job "cook food"

(integer)1

127.0.0.1:6379>lrange job 0 0

1)"cook food"

127.0.0.1:6379>lset job 0 "play game"

OK

127.0.0.1:6379>lrange job 0 0

1)"play game"

?

13、ltrim

ltrimkey start stop

对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

举个例子,执行命令ltrim list 0 2,表示只保留列表list的前三个元素,其余元素全部删除。

下标(index)参数start和stop都以0为底,也就是说,以0表示列表的第一个元素,以1表示列表的第二个元素,以此类推。

你也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。

当key不是列表类型时,返回一个错误。

ltrim命令通常和lpush命令或rpush命令配合使用,举个例子:

lpushlog newest_log

ltrimlog 0 99这个例子模拟了一个日志程序,每次将最新日志newest_log放到log列表中,并且只保留最新的100项。注意当这样使用ltrim命令时,时间复杂度是O(1),因为平均情况下,每次只有一个元素被移除。

注意ltrim命令和编程语言区间函数的区别

假如你有一个包含一百个元素的列表list,对该列表执行ltrim list 0 10,结果是一个包含11个元素的列表,这表明stop下标也在ltrim命令的取值范围之内(闭区间),这和某些语言的区间函数可能不一致,比如Ruby的Range.new、Array#slice和Python的range()函数。

超出范围的下标

超出范围的下标值不会引起错误。

如果start下标比列表的最大下标end(llen list减去1)还要大,或者start > stop,ltrim返回一个空列表(因为ltrim已经将整个列表清空)。

如果stop下标比end下标还要大,Redis将stop的值设置为end。

时间复杂度:

O(N),N为被移除的元素的数量。

返回值:

命令执行成功时,返回ok。

#情况1:一般情况下标

127.0.0.1:6379>lrange alpha 0 -1 # 建立一个5元素的列表

1)"h"

2)"e"

3)"l"

4)"l"

5)"o"

?

127.0.0.1:6379>ltrim alpha 1 -1 # 删除索引为0的元素

OK

127.0.0.1:6379>lrange alpha 0 -1 # "h"被删除

1)"e"

2)"l"

3)"l"

4)"o"

#情况2:stop下标比元素的最大下标要大

127.0.0.1:6379>ltrim alpha 1 10086

OK

127.0.0.1:6379>lrange alpha 0 -1

1)"l"

2)"l"

3)"o"

#情况3:start和stop下标都比最大下标要大,且start < sotp

127.0.0.1:6379>ltrim alpha 10086 200000

OK

127.0.0.1:6379>lrange alpha 0 -1 # 整个列表被清空,等同于DEL alpha

(emptylist or set)

#情况4:start > stop

127.0.0.1:6379>lrange alpha 0 -1 # 在新建一个列表

1)"h"

2)"u"

3)"a"

4)"n"

5)"g"

6)"z"

127.0.0.1:6379>ltrim alpha 100

首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇数据库资源消耗高时两条简单管用.. 下一篇centos6.5下postgres-XC集群安装..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: