一:Redis 列表(List)
Redis列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素導列表的頭部(左邊)或者尾部(右邊)
一個列表最多可以包含 232 - 1 個元素 (4294967295, 每個列表超過40億個元素)。
List操作,redis中的List在在內存中按照一個name對應一個List來存儲。如圖:
二:列表常用操作
1)lpush(name,values) 在name對應的list中添加元素,每個新的元素都添加到列表的最左邊
2)rpush(name, values) 在name對應的list中添加元素,每個新的元素都添加到列表的最右邊
3)lpushx(name,value) 在name對應的list中添加元素,只有name已經存在時,值添加到列表的最左邊
4)rpushx(name, value) 在name對應的list中添加元素,只有name已經存在時,值添加到列表的最右邊
5)llen(name) name對應的list元素的個數
6)linsert(name, where, refvalue, value)) 在name對應的列表的某一個值前或后插入一個新值
# name,redis的name
# where,BEFORE或AFTER
# refvalue,標桿值,即:在它前后插入數據
# value,要插入的數據
7)lset(name, index, value) 對name對應的list中的某一個索引位置重新賦值
8)lrem(name, value, num) 在name對應的list中刪除指定的值
9)lpop(name) 在name對應的列表的左側獲取第一個元素並在列表中移除,返回值則是第一個元素
10)lindex(name, index) 在name對應的列表中根據索引獲取列表元素
11)lrange(name, start, end) 在name對應的列表分片獲取數據
12)ltrim(name, start, end) 在name對應的列表中移除沒有在start-end索引之間的值
13)rpoplpush(src, dst) 從一個列表取出最右邊的元素,同時將其添加至另一個列表的最左邊
14)blpop(keys, timeout) 將多個列表排列,按照從左到右去pop對應列表的元素
# keys,redis的name的集合
# timeout,超時時間,當元素所有列表的元素獲取完之后,阻塞等待列表內有數據的時間(秒), 0 表示永遠阻塞
# 更多:
# r.brpop(keys, timeout),從右向左獲取數據
15)brpoplpush(src, dst, timeout=0)
# 從一個列表的右側移除一個元素並將其添加到另一個列表的左側
# src,取出並要移除元素的列表對應的name
# dst,要插入元素的列表對應的name
# timeout,當src對應的列表中沒有數據時,阻塞等待其有數據的超時時間(秒),0 表示永遠阻塞
三:示例
[BEGIN] 2017/7/30 20:56:36 127.0.0.1:6379> lpush name "shi" (integer) 1 127.0.0.1:6379> lpush name "san" (integer) 2 127.0.0.1:6379> LRANGE name 0 -1 1) "san" 2) "shi" 127.0.0.1:6379> RPUSH name jun (integer) 3 127.0.0.1:6379> LRANGE name 0 -1 1) "san" 2) "shi" 3) "jun" 127.0.0.1:6379> LPUSHX name tianshi (integer) 4 127.0.0.1:6379> LRANGE name 0 -1 1) "tianshi" 2) "san" 3) "shi" 4) "jun" 127.0.0.1:6379> LPUSHX name1 tianshi (integer) 0 127.0.0.1:6379> RPUSHX name xiaoliu (integer) 5 127.0.0.1:6379> LRANGE name 0 -1 1) "tianshi" 2) "san" 3) "shi" 4) "jun" 5) "xiaoliu" 127.0.0.1:6379> RPUSHX name1 xiaoliu (integer) 0 127.0.0.1:6379> LLEN name1 (integer) 0 127.0.0.1:6379> LLEN name (integer) 5 127.0.0.1:6379> LINSERT name after shi 111 (integer) 6 127.0.0.1:6379> LRANGE name 0 -1 1) "tianshi" 2) "san" 3) "shi" 4) "111" 5) "jun" 6) "xiaoliu" 127.0.0.1:6379> lset name 0 222 OK 127.0.0.1:6379> LRANGE name 0 -1 1) "222" 2) "san" 3) "shi" 4) "111" 5) "jun" 6) "xiaoliu" 127.0.0.1:6379> lrem name xiaoliu (error) ERR wrong number of arguments for 'lrem' command 127.0.0.1:6379> LREM name xiaoliu 1 (error) ERR value is not an integer or out of range 127.0.0.1:6379> LREM name xiaoliu 0 (error) ERR value is not an integer or out of range 127.0.0.1:6379> LRANGE name 0 -1 1) "222" 2) "san" 3) "shi" 4) "111" 5) "jun" 6) "xiaoliu" 127.0.0.1:6379> LREM name 1 xiaoliu (integer) 1 127.0.0.1:6379> LRANGE name 0 -1 1) "222" 2) "san" 3) "shi" 4) "111" 5) "jun" 127.0.0.1:6379> lpop name "222" 127.0.0.1:6379> LRANGE name 0 -1 1) "san" 2) "shi" 3) "111" 4) "jun" 127.0.0.1:6379> LINDEX name 2 "111" 127.0.0.1:6379> LTRIM name 0 2 OK 127.0.0.1:6379> LRANGE name 0 -1 1) "san" 2) "shi" 3) "111" 127.0.0.1:6379> LPUSH name 1 aaa (integer) 5 127.0.0.1:6379> LPUSH name1 aaa (integer) 1 127.0.0.1:6379> LRANGE name 0 -1 1) "aaa" 2) "1" 3) "san" 4) "shi" 5) "111" 127.0.0.1:6379> RPOPLPUSH name name1 "111" 127.0.0.1:6379> LRANGE name1 0 -1 1) "111" 2) "aaa" 127.0.0.1:6379> BLPOP name name1 (error) ERR timeout is not an integer or out of range 127.0.0.1:6379> BLPOP name name1 1 1) "name" 2) "aaa" 127.0.0.1:6379> LRANGE name 0 -1 1) "1" 2) "san" 3) "shi" 127.0.0.1:6379> LRANGE name1 0 -1 1) "111" 2) "aaa" 127.0.0.1:6379> BLPOP name name1 1 1) "name" 2) "1" 127.0.0.1:6379> BLPOP name1 name 1 1) "name1" 2) "111" 127.0.0.1:6379> LRANGE name 0 -1 1) "san" 2) "shi" 127.0.0.1:6379> LRANGE name1 0 -1 1) "aaa" 127.0.0.1:6379> BRPOPLPUSH name1 name 0 "aaa" 127.0.0.1:6379> BRPOPLPUSH name1 name 0 這里沒有name1中沒有數據的時候就會阻塞,直到有結果過來 "222" 通過下面窗口發一條數據過來 (70.24s)
給nam1發送一個結果222
[root@localhost ~]# redis-cli 127.0.0.1:6379> RPUSH name1 222 (integer) 1 127.0.0.1:6379>