码迷,mamicode.com
首页 > 数据库 > 详细

NoSQL----Redis 2.4--List

时间:2015-11-26 19:20:25      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:redis--list

List:

头元素和尾元素:头元素指的是列表左端/前端第一个元素;尾元素指的是列表右端/后端第一个元素。

举个例子,列表list包含三个元素:x, y, z,其中x是头元素,而z则是尾元素。

空列表:指不包含任何元素的列表,Redis将不存在的key也视为空列表。

1、lpush(left push)方法:

LPUSH key value [value ...]

将一个或多个值value插入到列表key的表头。

如果有多个value值,那么各个value值按从左到右的顺序依次插入到表头:比如对一个空列表(mylist)执行LPUSH mylist a b c,则结果列表为c b a,

等同于执行命令

LPUSH mylist a

LPUSH mylist b

LPUSH mylist c

如果key不存在,一个空列表会被创建并执行LPUSH操作。

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


例如:
# 加入单个元素

redis> LPUSH languages python
(integer) 1

# 加入重复元素

redis> LPUSH languages python
(integer) 2

redis> LRANGE languages 0 -1 # 列表允许重复元素
1) "python"
2) "python"

# 加入多个元素

redis> LPUSH mylist a b c
(integer) 3

redis> LRANGE mylist 0 -1
1) "c"
2) "b"
3) "a"

2、lpushx(left pushx)方法:

LPUSHX key value

将值value插入到列表key的表头,当且仅当key存在并且是一个列表。

和LPUSH命令相反,当key不存在时,LPUSHX命令什么也不做。

例如:
# 情况1:对空列表执行LPUSHX

redis> LLEN greet    # greet是一个空列表
(integer) 0

redis> LPUSHX greet "hello"  # 尝试LPUSHX,失败,因为列表为空
(integer) 0


# 情况2:对非空列表执行LPUSHX

redis> LPUSH greet "hello"   # 先用LPUSH创建一个有一个元素的列表
(integer) 1

redis> LPUSHX greet "good morning"   # 这次LPUSHX执行成功
(integer) 2

redis> LRANGE greet 0 -1
1) "good morning"
2) "hello"

3、rpush(right push)方法:

RPUSH key value [value ...]

将一个或多个值value插入到列表key的表尾。

如果有多个value值,那么各个value值按从左到右的顺序依次插入到表尾:

比如对一个空列表(mylist)执行RPUSH mylist a b c,则结果列表为a b c,

等同于执行命令

RPUSH mylist a、

RPUSH mylist b、

RPUSH mylist c。

如果key不存在,一个空列表会被创建并执行RPUSH操作。

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


备注:在Redis 2.4版本以前的RPUSH命令,都只接受单个value值。
# 添加单个元素

redis> RPUSH languages c
(integer) 1

# 添加重复元素

redis> RPUSH languages c
(integer) 2

redis> LRANGE languages 0 -1 # 列表允许重复元素
1) "c"
2) "c"

# 添加多个元素

redis> RPUSH mylist a b c
(integer) 3

redis> LRANGE mylist 0 -1
1) "a"
2) "b"
3) "c"

4、rpushx(right pushx)方法:

RPUSHX key value

将值value插入到列表key的表尾,当且仅当key存在并且是一个列表。

和RPUSH命令相反,当key不存在时,RPUSHX命令什么也不做。


例如:
# 情况1:key不存在

redis> LLEN greet
(integer) 0

redis> RPUSHX greet "hello"  # 对不存在的key进行RPUSHX,PUSH失败。
(integer) 0


# 情况2:key存在且是一个非空列表

redis> RPUSH greet "hi"  # 先用RPUSH插入一个元素
(integer) 1

redis> RPUSHX greet "hello"  # greet现在是一个列表类型,RPUSHX操作成功。
(integer) 2

redis> LRANGE greet 0 -1
1) "hi"
2) "hello"

5、lpop(left pop)方法:

LPOP key

移除并返回列表key的头元素。

redis> LLEN course
(integer) 0

redis> RPUSH course algorithm001
(integer) 1
redis> RPUSH course c++101
(integer) 2

redis> LPOP course  # 移除头元素
"algorithm001"

6、rpop(right pop)方法:

RPOP key

移除并返回列表key的尾元素。

redis> RPUSH mylist "one"
(integer) 1
redis> RPUSH mylist "two"
(integer) 2
redis> RPUSH mylist "three"
(integer) 3

redis> RPOP mylist  # 返回被弹出的元素
"three"

redis> LRANGE mylist 0 -1   # 列表剩下的元素
1) "one"
2) "two"

7、llen方法:

LLEN key

返回列表key的长度。

如果key不存在,则key被解释为一个空列表,返回0.

如果key不是列表类型,返回一个错误。

# 情况1:空列表

redis> LLEN job
(integer) 0

# 情况2:非空列表
redis> LPUSH job "cook food"
(integer) 1
redis> LPUSH job "have lunch"
(integer) 2

redis> LLEN job
(integer) 2

8、lrange方法:

LRANGE key start end

返回列表key中指定区间内的元素,区间以偏移量start和end指定。

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

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

超出范围的下标

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

如果start下标比列表的最大下标end(LLEN list减去1)还要大,或者start > stopLRANGE返回一个空列表。

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


redis> RPUSH fp-language lisp   # 插入一个值到列表fp-language
(integer) 1
redis> LRANGE fp-language 0 0
1) "lisp"

redis> RPUSH fp-language scheme
(integer) 2
redis> LRANGE fp-language 0 1
1) "lisp"
2) "scheme"

9、linsert方法:

NoSQL----Redis 2.4--List

标签:redis--list

原文地址:http://8757576.blog.51cto.com/8747576/1717189

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!