左邊爲key,是字符串類型 右邊爲value,是一個有序的隊列,與python的列表結構相同 能夠在Redis中對列表的value進行以下操做 從左邊添加元素 從右邊添加元素 從左邊刪除元素 從右邊刪除元素 計算列表長度 刪除列表中指定元素 從列表中獲取子列表元素 能夠按照索引來獲取指定元素
有序 能夠重複 左右兩邊插入彈出
rpush key value1 value2 ... valueN 從列表右端插入值(1-N個) lpush key value1 value2 ... valueN 從列表左端插入值(1-N個) linsert key before value newValue 在list指定的值前插入newValue linsert key after value newValue 在list指定的值後插入newValue lpop key 從列表左側彈出一個item rpop key 從列表右側彈出一個item lrem key count value 根據count值,從列表中刪除全部value相等的項 count > 0,從左到右,刪除最多count個value相等的項 count < 0,從右到左,刪除最多Math.abs(count)個value相等的項 count = 0,刪除全部value相等的項 ltrim key start end 按照索引範圍修剪列表 lrange key start end(包含end) 獲取列表指定索引範圍全部item lindex key index 獲取列表指定索引的item llen key 獲取列表長度 lset key index newValue 設置列表指定索引值爲newValue blpop key timeout lpop阻塞版本,timeout是阻塞超時時間,timeout=0爲永不超時 brpop key timeout rpop阻塞版本,timeout是阻塞超時時間,timeout=0爲永不超時
例子:php
127.0.0.1:6379> rpush mylist a b c d (integer) 4 127.0.0.1:6379> lrange mylist 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 127.0.0.1:6379> lpush mylist 0 (integer) 5 127.0.0.1:6379> lrange mylist 0 -1 1) "0" 2) "a" 3) "b" 4) "c" 5) "d" 127.0.0.1:6379> rpop mylist "d" 127.0.0.1:6379> lrange mylist 0 -1 1) "0" 2) "a" 3) "b" 4) "c" 127.0.0.1:6379>
說明:java
lpush加lpop的操做至關於Stack lpush加rpop的操做至關於Queue lpush加ltrim的操做至關於Capped Collection lpush加brpop的操做至關於Message Queue
列表類型API的時間複雜度說明python
rpush,lpush命令的時間複雜度爲O(1)到O(N),由從列表中獲取元素的個數來決定 linsert after/before,lrem,ltrim,lrange,lindex,lset命令的時間複雜度爲O(N) lpop,rpop,llen,blpop,brpop命令的時間複雜度都是O(1)
左邊爲key,是字符串類型 右邊爲value,能夠將一些字符串進行一些組合,是集合類型 能夠向value中添加或者刪除一個元素 Redis中的集合類型還支持集合之間的操做,這與Redis中的其餘數據結構是不一樣的 Redis能夠對兩個集合進行操做,取兩個集合的交集,並集,差集以及對稱差集等等
無序 無重複 支持集合間操做
sadd key element 向集合key添加element(若是element已經存在,添加失敗) srem key element 將集合key中的element移除掉 scard user:1:follow 計算集合大小 sismember user:1:follow it 判斷it是否在集合中 srandmember user:1:follow count 從集合中隨機挑count個元素,不破壞集合的結構 spop user:1:follow 從集合中隨機彈出一個元素,彈出後集閤中沒有這個元素了 smembers user:1:follow 獲取集合全部元素,無序,當心使用
時間複雜度說明:sql
sadd,srem,scard,sismember,srandmember,spop,smember命令的時間複雜度都是O(1)
例子:api
127.0.0.1:6379> sadd user:1:follow it news his sports (integer) 4 127.0.0.1:6379> smembers user:1:follow 1) "news" 2) "sports" 3) "his" 4) "it" 127.0.0.1:6379> spop user:1:follow "sports" 127.0.0.1:6379> smembers user:1:follow 1) "news" 2) "his" 3) "it" 127.0.0.1:6379> scard user:1:follow (integer) 3 127.0.0.1:6379> sismember user:1:follow entertainment (integer) 0
sdiff 差集 sinter 交集 sunion 並集 sdiff|sinter|sunion + store destkey 將差集,交集,並集結果保存在destkey中
在一些抽獎活動中,就能夠用Redis的集合來實現,使用spop把已經中獎的用戶彈出 在社交網絡中,經常使用的如點贊,踩等功能也能夠用集合來實現 社交網絡中,共同關注的好友能夠用集合的交集實現
key-value結構 左邊爲key,是字符串類型,右邊爲value,由兩部分組成:score和value score表示分值,表示value在有序集合中的位置
zadd key score element(能夠是多對) 添加score和element zrem key element(能夠是多個) 刪除元素 zscore key element 返回元素的分數 zincrby key increScore element 增長或減小元素的分數 zcard key 返回元素的總個數 zrange key start end [withscores] 返回指定索引範圍內的升序元素[分值] zrangebyscore key minScore maxScore 返回指定分數範圍內的長序元素[分值] zcount len minScore maxScore 返回有序集合內在指定分數範圍內的個數 zremrangebyrank key start end 刪除指定排名內的升序元素 zremrangebyscore key minScore maxScore 刪除指定分數內的升序元素 zrevrank 獲取有序集合中從高到低的排名 zrevrange 從高到低排名後獲取必定範圍的值 zrevrangebyscore 按score從高到低排名的結果 zinterstore 對兩個有序集合的交集進行運算,並保存 zunionstore 對兩個有序集合的並集進行運算,並保存
zadd命令的時間複雜度爲log(N),n是有序集合中元素的個數 zrem,zscore,zincrby,zcard命令的時間複雜度爲O(1) zrange,zremrangebyrank,zrangebyscore,zcount,zremrangebyscore命令的時間複雜度爲log(N) + m,n爲有序集合元素的個數,m爲有序集合中被操做元素的個數
例子:網絡
127.0.0.1:6379> zadd player:rank 1000 python 900 java 800 php 600 sql (integer) 4 127.0.0.1:6379> zscore player:rank php "800" 127.0.0.1:6379> zcard player:rank (integer) 4 127.0.0.1:6379> zrank player:rank python (integer) 3 127.0.0.1:6379> zrem player:rank java (integer) 1 127.0.0.1:6379> zrange player:rank 0 -1 withscores 1) "sql" 2) "600" 3) "php" 4) "800" 5) "python" 6) "1000" 127.0.0.1:6379> zadd player:rank 1000 python 900 java 800 php 600 sql (integer) 1 127.0.0.1:6379> zrange player:rank 0 -1 1) "sql" 2) "php" 3) "java" 4) "python" 127.0.0.1:6379> zcount player:rank 700 901 (integer) 2 127.0.0.1:6379> zrangebyscore player:rank 700 901 1) "php" 2) "java" 127.0.0.1:6379> zremrangebyrank player:rank 0 1 (integer) 2 127.0.0.1:6379> zrange player:rank 0 -1 1) "java" 2) "python" 127.0.0.1:6379> zrange player:rank 0 -1 withscores 1) "java" 2) "900" 3) "python" 4) "1000"
排行榜
都沒有重複元素 集合無序,有序集合是有序的 集合中只有element,有序集合中有element+score
列表能夠有重複元素,有序集合沒有重複元素 列表有序,有序集合有序 列表中只有element,有序集合中有element+score