Redis數據結構和經常使用API

Redis是一個速度很是快的非關係型數據庫,能夠存儲鍵與5中不一樣數據結構類型之間的映射。這5種數據結構分別是STRING(字符串)、LIST(列表)、SET(集合)、HASH(散列)、ZSET(有序集合)。數據庫

STRING(字符串)

和其餘編程語言或者其餘鍵值存儲提供的字符串很是類似。編程

SET 設置值數據結構

GET 獲取值app

DEL 刪除值編程語言

127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> get hello
(nil)
127.0.0.1:6379>

經常使用API:spa

API 說明 複雜度
get key 獲取key對應的value O(1)
set key value 設置key-value,無論key是否存在,都設置 O(1)
del key 刪除key-value O(1)
incr key key自增1,若是key不存在,自增後get(key)=1 O(1)
decr key key自減1,若是key不存在,自減後get(key)=-1 O(1)
incrby key k key自增k,若是key不存在,自增後get(key)=k O(1)
decr key k key自減k,若是key不存在,自減後get(key)=-k O(1)
setnx key value key不存在,才設置 O(1)
set key value xx key存在,才設置 O(1)
mget key1 key2 key3 ... 批量獲取key,原子操做 O(n)
mset key1 value1 key2 value2 ... 批量設置key-value O(n)
getset key newvalue set key newvalue並返回舊的value O(1)
append key value 將value追加到舊的value O(1)
strlen key 返回字符串的長度(注意中文) O(1)
incrbyfloat key 2.3 增長key對應的值2.3 O(1)
getrange key start end 獲取字符串指定下標的全部值 O(1)
setrange key index value 設置指定下標(index)全部對應的值 O(1)

 

LIST(列表)

列表能夠有序存儲多個字符串,其中字符串能夠相同。code

LPUSH    將元素推入列表的左端對象

RPUSH    將元素推入列表的右端blog

LPOP    將元素從列表左端彈出排序

RPOP    將元素從列表右端彈出

LINDEX    獲取列表在給定位置上的單個元素

LRANGE     獲取列表在給定範圍的全部元素

127.0.0.1:6379> rpush list-key item
(integer) 2
127.0.0.1:6379> rpop list-key
"item"
127.0.0.1:6379> rpop list-key
"item"
127.0.0.1:6379> rpush list-key item
(integer) 1
127.0.0.1:6379> rpush list-key item2
(integer) 2
127.0.0.1:6379> rpush list-key item
(integer) 3
127.0.0.1:6379> lrange list-key 0 -1
1) "item"
2) "item2"
3) "item"
127.0.0.1:6379> lindex list-key 1
"item2"
127.0.0.1:6379> lpop list-key
"item"
127.0.0.1:6379> lrange list-key 0 -1
1) "item2"
2) "item"
127.0.0.1:6379>

經常使用API:

API
說明
複雜度
lpush key value1 [value2]
將一個或多個值推入列表的左端
O(1)
rpush key value1 [value2]
將一個或多個值推入列表的右端
O(1)
linsert key before|after value newValue
在list指定的值前|後插入newValue
O(n)
lpop key
移除並返回列表最左端的元素
O(1)
rpop key
移除並返回列表最右端的元素
O(1)
ltrim key start end
按照索引範圍修剪列表
O(n)
lindex key offset
返回列表中偏移量爲offset的元素
O(n)
lrange key start end(包含end)
獲取列表指定索引範圍全部元素
O(n)
llen key
獲取列表長度
O(1)
lset key index newValue
設置列表指定索引值爲newValue
O(n)
blpop key timeout
lpop阻塞版本,timeout爲阻塞超時時間,=0爲不阻塞
O(1)
brpop key timeout
rpop阻塞版本,timeout爲阻塞超時時間,=0爲不阻塞
O(1)

SET(集合)

集合能夠存儲不一樣多個字符串,且無序。

SADD    將元素添加到集合中

SREM    從集合裏面移除元素,若是這個元素存在

SISMEMBER    快速檢查一個元素是否已經存在集合中

SMEMBERS    獲取集合包含的全部元素(若是集合包含的元素很是多,那麼命令執行速度回很慢,謹慎使用)

127.0.0.1:6379> sadd set-key item
(integer) 1
127.0.0.1:6379> sadd set-key item2
(integer) 1
127.0.0.1:6379> sadd set-key item3
(integer) 1
127.0.0.1:6379> sadd set-key item
(integer) 0
127.0.0.1:6379> smembers set-key
1) "item3"
2) "item2"
3) "item"
127.0.0.1:6379> sismember set-key item4
(integer) 0
127.0.0.1:6379> sismember set-key item
(integer) 1
127.0.0.1:6379> srem set-key item2
(integer) 1
127.0.0.1:6379> srem set-key item2
(integer) 0
127.0.0.1:6379> smembers set-key
1) "item3"
2) "item"
127.0.0.1:6379>

經常使用API:

API
說明
複雜度
sadd key element
向集合key添加element(若是element已經存在,添加失敗)
O(1)
srem key element
將集合key中的element移除
O(1)
sismember key element
檢查元素element是否存在於集合key中
O(1)
smembers
返回集合包含的全部元素
O(N)

HASH(散列)

Redis能夠存儲多個鍵值對之間的映射,hash 是一個string類型的field和value的映射表,適合存儲對象。和字符串同樣,散列存儲的值既能夠存儲字符串和數字值,而且能夠對散列存儲的數字值執行自增或自減操做。

HSET    在散列裏面關聯起給定的鍵值對

HGET    獲取指定散列鍵的值

HGETALL    獲取散列包含的全部鍵值對

HDEL    若是給定鍵存在於散列裏面,那麼刪除這個鍵

127.0.0.1:6379> hset hash-key sub-key1 value1
(integer) 1
127.0.0.1:6379> hset hash-key sub-key2 value2
(integer) 1
127.0.0.1:6379> hset hash-key sub-key1 value1
(integer) 0
127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value1"
3) "sub-key2"
4) "value2"
127.0.0.1:6379> hdel hash-key sub-key2
(integer) 1
127.0.0.1:6379> hdel hash-key sub-key2
(integer) 0
127.0.0.1:6379> hget hash-key sub-key1
"value1"
127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value1"
127.0.0.1:6379>

經常使用API:

API
說明
複雜度
hget key field
獲取hash key對應的field的value
O(1)
hset key field value
設置hash key對應的field的value
O(1)
hdel key field
刪除hash key對應的field的value
O(1)
hexists key field
判斷hash key是否有field
O(1)
hlen
獲取hash key field的數量
O(1)
hmget key field1 field2 ...
批量獲取hash  key的一批field對應的值
O(n)
hmset key field1 value1 field2 value2 ...
批量設置hash key的一批field value
O(n)
hgetall key
返回hash key 對應全部的field和value
O(n)
hvals key
返回hash key對應全部field的value
O(n)
hkeys key
返回hash key對應全部field
O(n)
hsetnx key field value
設置hash key對應的field的value(若是field已經存在,則失敗)
O(1)
hincrby key field intCounter
hash key對應的field的value自增intCounter
O(1)
hincrbyfloat key field floatCounter
hash key對應的field的value自增floatCounter
O(1)

ZSET(有序集合)

有序集合和散列同樣,都用於存儲鍵值對:有序集合的鍵被稱爲成員(member),每一個成員都是各不相同的;有序集合的值被稱爲分值(score),分值必須使用浮點數。有序集合是Redis裏面惟一一個既能夠根據成員訪問元素,又能夠根據分值以及分值的排列順序來訪問元素的結構。

使用場景:例如基於發表時間排序的文章列表、基於投票數量排序的文章列表等。

ZADD    將一個帶有給定分值的成員添加到有序集合裏面

ZRANGE    根據元素在有序排列中所處的位置,從有序集合中取出多個元素

ZRANGEBYSCORE    獲取有序集合在給定分值範圍內的全部元素

ZREM    若是給定成員存在於有序集合中,那麼移除這個成員

127.0.0.1:6379> zadd zset-key 728 member1
(integer) 1
127.0.0.1:6379> zadd zset-key 985 member0
(integer) 1
127.0.0.1:6379> zadd zset-key 985 member0
(integer) 0
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member1"
2) "728"
3) "member0"
4) "985"
127.0.0.1:6379> zrangebyscore zset-key 0 800 withscores
1) "member1"
2) "728"
127.0.0.1:6379> zrem zset-key member1
(integer) 1
127.0.0.1:6379> zrem zset-key member1
(integer) 0
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member0"
2) "985"
127.0.0.1:6379>

 經常使用API:

API
說明
複雜度
zadd key score element(能夠是多對的)
添加score和element
O(lonN)
zrem key element(能夠是多個)
刪除元素
O(1)
zscore key element
返回元素的分數
O(1)
zincrby key increScore element
增長或減小元素的分數
O(1)
zcard key
返回元素的總個數
O(1)
zrange key start end [WITHSCORES]
返回指定索引範圍內的升序元素【分值】
O(lon(n)+m)
zrangebyscore key minScore maxScore[WITHSCORES]
返回指定分數範圍內的升序元素【分值】
O(lon(n)+m)
zcount key minScore maxScore
返回有序集合內在指定分數範圍內的個數
O(lon(n)+m)
zremrangebyrank key start end
刪除指定排名內的升序元素
O(lon(n)+m)
zremrangebyscor key minScore maxScore
刪除指定分數內的升序元素
O(lon(n)+m)
相關文章
相關標籤/搜索