码迷,mamicode.com
首页 > 其他好文 > 详细

redis link链表结构

时间:2016-01-29 16:31:43      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:redis key


link 链表结构:


lpush  key  value

作用把值插入到链接头部

技术分享


rpop  key

作用返回并删除链表尾元素

rpush,lpop: 不解释

技术分享


lpushx  key  value

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

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

返回值:

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"


rpushx  key  value


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

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

返回值:

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"


lset key index value

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

更多信息请参考LINDEX操作。

当index参数超出范围,或对一个空列表(key不存在)进行LSET时,返回一个错误。

返回值:

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

# 情况1:对空列表(key不存在)进行LSET

 

redis> EXISTS list

(integer) 0

redis> LSET list 0 item

(error) ERR no such key

# 情况2:对非空列表进行LSET

 

redis> LPUSH job "cook food"

(integer) 1

redis> LRANGE job 0 0

1) "cook food"

redis> LSET job 0 "play game"

OK

redis> LRANGE job  0 0

1) "play game"

 

# 情况3:index超出范围

 

redis> LLEN list # 列表长度为1

(integer) 1

redis> LSET list 3 ‘out of range‘

(error) ERR index out of range


lrange key start stop

作用返回链表中[start ,stop]中的元素

规律左数从0开始,右数从-1开始

技术分享


lrem  key  count  value

作用key链表中删除 value

删除count的绝对值个value后结束

 

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

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

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

127.0.0.1:6379> rpush ceshi  1 2 3 4 5 5 4 3 2 1

(integer) 10

127.0.0.1:6379> lrange ceshi 0 -1

 1) "1"

 2) "2"

 3) "3"

 4) "4"

 5) "5"

 6) "5"

 7) "4"

 8) "3"

 9) "2"

10) "1"

127.0.0.1:6379> lrem ceshi 1 5

(integer) 1

127.0.0.1:6379> lrange ceshi 0 -1

1) "1"

2) "2"

3) "3"

4) "4"

5) "5"

6) "4"

7) "3"

8) "2"

9) "1"

127.0.0.1:6379> flushdb

OK

127.0.0.1:6379> rpush ceshi  1 2 3 4 5  4 3 2 1 5

(integer) 10

127.0.0.1:6379> lrange ceshi 0 -1

 1) "1"

 2) "2"

 3) "3"

 4) "4"

 5) "5"

 6) "4"

 7) "3"

 8) "2"

 9) "1"

10) "5"

127.0.0.1:6379> lrem ceshi 1 5

(integer) 1

127.0.0.1:6379> lrange ceshi 0 -1

1) "1"

2) "2"

3) "3"

4) "4"

5) "4"

6) "3"

7) "2"

8) "1"

9) "5"

127.0.0.1:6379> lrem ceshi -1 1

(integer) 1

127.0.0.1:6379> lrange ceshi 0 -1

1) "1"

2) "2"

3) "3"

4) "4"

5) "4"

6) "3"

7) "2"

8) "5"

127.0.0.1:6379> lrem ceshi 0 2

(integer) 2

127.0.0.1:6379> lrange ceshi 0 -1

1) "1"

2) "3"

3) "4"

4) "4"

5) "3"

6) "5"

127.0.0.1:6379> 


ltrim key start stop

作用剪切key对应的链接,[start,stop]一段,并把该段重新赋给key

 

127.0.0.1:6379> lrange ceshi 0 -1

1) "1"

2) "3"

3) "4"

4) "4"

5) "3"

6) "5"

127.0.0.1:6379> ltrim ceshi 0 2

OK

127.0.0.1:6379> lrange ceshi 0 -1

1) "1"

2) "3"

3) "4"

127.0.0.1:6379> 


lindex  key index

作用返回index索引上的值,

如  lindex key 2

127.0.0.1:6379> lrange ceshi 0 -1

1) "1"

2) "3"

3) "4"

127.0.0.1:6379> lindex ceshi 1

"3"

127.0.0.1:6379> 


llen key

作用:计算链接表的元素个数

127.0.0.1:6379> lrange ceshi 0 -1

1) "1"

2) "3"

3) "4"

127.0.0.1:6379> llen ceshi

(integer) 3

127.0.0.1:6379> 


linsert  key before|after  search value


作用key链表中寻找search,并在search值之前|之后,.插入value

一旦找到一个search,命令就结束了,因此不会插入多个value

127.0.0.1:6379> lrange ceshi 0 -1

1) "1"

2) "3"

3) "4"

127.0.0.1:6379> linsert ceshi after 4 w

(integer) 4

127.0.0.1:6379> lrange ceshi 0 -1

1) "1"

2) "3"

3) "4"

4) "w"

127.0.0.1:6379> linsert ceshi before 3 c

(integer) 5

127.0.0.1:6379> lrange ceshi 0 -1

1) "1"

2) "c"

3) "3"

4) "4"

5) "w"

127.0.0.1:6379> 


rpoplpush  source dest

作用source的尾部拿出,放在dest的头部,

并返回 该单元值

127.0.0.1:6379> lrange ceshi 0 -1

1) "1"

2) "c"

3) "3"

4) "4"

5) "w"

127.0.0.1:6379> rpoplpush ceshi ceshi1

"w"

127.0.0.1:6379> lrange ceshi 0 -1

1) "1"

2) "c"

3) "3"

4) "4"

127.0.0.1:6379> lrange ceshi1 0 -1

1) "w"


brpoplpush  source  destination timeout

BRPOPLPUSHRPOPLPUSH的阻塞版本,当给定列表source不为空时,BRPOPLPUSH的表现和RPOPLPUSH一样。

当列表source为空时,BRPOPLPUSH命令将阻塞连接,直到等待超时,或有另一个客户端对source执行LPUSHRPUSH命令为止。

超时参数timeout接受一个以秒为单位的数字作为值。超时参数设为0表示阻塞时间可以无限期延长(block indefinitely) 

更多相关信息,请参考RPOPLPUSH命令。

返回值:

假如在指定时间内没有任何元素被弹出,则返回一个nil和等待时长。

反之,返回一个含有两个元素的列表,第一个元素是被弹出元素的值,第二个元素是等待时长。


情况1:非空列表

redis> BRPOPLPUSH msg reciver 500

"hello moto"    # 弹出元素的值

(3.38s)         # 等待时长

redis> LLEN reciver

(integer) 1

redis> LRANGE reciver 0 0

1) "hello moto

 

情况2:空列表

redis> BRPOPLPUSH msg reciver 1

(nil)

(1.34s)


本文出自 “一觞酒尽半生愁” 博客,请务必保留此出处http://wangzhao.blog.51cto.com/10065719/1739838

redis link链表结构

标签:redis key

原文地址:http://wangzhao.blog.51cto.com/10065719/1739838

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