緩存數據庫-redis數據類型和操作(list)


一: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> 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM