您的位置:首页 > 数据库 > Redis

redis link链表结构

2016-01-29 14:19 567 查看
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

BRPOPLPUSH是RPOPLPUSH的阻塞版本,当给定列表source不为空时,BRPOPLPUSH的表现和RPOPLPUSH一样。
当列表source为空时,BRPOPLPUSH命令将阻塞连接,直到等待超时,或有另一个客户端对source执行LPUSH或RPUSH命令为止。
超时参数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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: