Redis支持六種數據類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。java
結構類型 | 存儲的值 |
---|---|
string | 能夠是字符串、浮點型、整型 |
list | 一個鏈表,鏈表上的每一個節點存放一個字符串 |
set | 包含字符串的無序容器,裏面的每一個字符串都不相同 |
hash | 包含鍵值對的無序散列表 |
sorted set | 字符串與浮點數分值之間的有序映射,排列順序由分值的大小決定 |
HyperLogLog | 基數統計 |
SET key value
設置指定 key
的值,若是值存在就覆蓋(不加能夠項的狀況下)。redis
可選項:數據庫
[EX seconds] [PX milliseconds] [NX|XX]
EX seconds
:表示過時時間,單位爲秒PX milliseconds
:表示過時時間,單位爲毫秒NX
:只有鍵 key
不存在的時候纔會設置 key
的值XX
:只有鍵 key
存在的時候纔會設置 key
的值GET key
獲取指定 key
的值。若是該 key
有值返回值內容,不然返回 (nil)
表示空。安全
GETRANGE key start end
用於獲取存儲在指定 key
中字符串的子字符串。字符串的截取範圍由 start
和 end
兩個偏移量決定(包括 start
和 end
在內)。網絡
GETSET key value
設置指定 key
的值,並返回 key
的舊值。若是 key
沒有舊值時,即 key
不存在時,返回 nil
。數據結構
SETEX key TIMEOUT value
設置指定 key
的值並設置過時時間,等同於 SET key value EX seconds
優化
SETNX key value
當 key
不存在時才設置,等同於 SET key value NX
網站
STRLEN key
返回指定 key
的長度,不存在的 key
長度爲 0。code
INCR key
指定 key
自增 1。若是 key 不存在,那麼 key 的值會先被初始化爲 0 ,而後再執行 INCR 命令。若是是自增的值不是整數或浮點數的話會報 (error) ERR value is not an integer or out of range
錯誤對象
INCRBY key INCR_AMOUNT
將 key
中儲存的數字加上指定的增量值。若是 key
不存在,那麼 key
的值會先被初始化爲 0 ,而後再執行 INCRBY
命令。若是值包含錯誤的類型,或字符串類型的值不能表示爲數字,那麼也會返回上面的錯誤。
INCRBYFLOAT key INCR_AMOUNT
爲 key
中所儲存的值加上指定的浮點數增量值。若是 key
不存在,那麼 INCRBYFLOAT 會先將 key
的值設爲 0 ,再執行加法操做。
DECR key
與 INCR
相反,執行自減 1 操做
DECRBY key DECREMENT_AMOUNT
將 key
所儲存的值減去指定的減量值。
APPEND key new_value
用於爲指定的 key
追加值。
若是 key
已經存在而且是一個字符串, APPEND
命令將 value
追加到 key
原來的值的末尾。
若是 key
不存在, APPEND
就簡單地將給定 key
設爲 value
,就像執行 SET key value
同樣。
MSET key1 value1 key2 value2 .. keyN valueN
用於同時設置一個或多個 key-value 對。
MSETNX key1 value1 key2 value2 .. keyN valueN
用於全部給定 key
都不存在時,同時設置一個或多個 key-value
對。若是其中有一個 key
存在,操做失敗,由於操做上原子性的,全部 key
都沒有設置。
MGET key1 key2 .. keyN
返回全部(一個或多個)給定 key
的值。 若是給定的 key
裏面,有某個 key
不存在,那麼這個 key
返回特殊值 nil
。
Redis hash
是一個 string
類型的 field
和 value
的映射表,hash
特別適合用於存儲對象。Redis
中每一個 hash
能夠存儲 232 - 1 鍵值對(40多億)。
HSET KEY_NAME FIELD VALUE
用於爲哈希表中的字段賦值。若是哈希表不存在,一個新的哈希表被建立並進行 HSET
操做。若是字段已經存在於哈希表中,舊值將被覆蓋。
HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN
用於同時將多個 field-value
(字段-值)對設置到哈希表中。此命令會覆蓋哈希表中已存在的字段。若是哈希表不存在,會建立一個空哈希表,並執行 HMSET
操做。
HSETNX KEY_NAME FIELD VALUE
用於爲哈希表中不存在的的字段賦值。若是哈希表不存在,一個新的哈希表被建立並進行 HSET
操做。若是字段已經存在於哈希表中,操做無效。
HLEN KEY_NAME
用於獲取哈希表中字段的數量。當 key
不存在時,返回 0 。
HGET KEY_NAME FIELD_NAME
用於返回哈希表中指定字段的值。若是給定的字段或 key 不存在時,返回 nil。
HMGET KEY_NAME FIELD1...FIELDN
用於返回哈希表中,一個或多個給定字段的值。若是指定的字段不存在於哈希表,那麼返回一個 nil
值。
HKEYS key [FIELD] [VALUE]
用於獲取哈希表中的全部域(field
)。
HVALS KEY_NAME [FIELD] [VALUE]
一個包含哈希表中全部域(field
)值的列表。 當 key
不存在時,返回一個空表。
HEXISTS KEY_NAME FIELD_NAME
用於查看哈希表的指定字段是否存在。若是哈希表含有給定字段,返回 1。若是哈希表不含有給定字段或 key
不存在,返回 0。
HDEL KEY_NAME FIELD1.. FIELDN
用於刪除哈希表 key 中的一個或多個指定字段,不存在的字段將被忽略。返回被成功刪除字段的數量,不包括被忽略的字段。
Redis列表是簡單的字符串列表,按照插入順序排序。你能夠添加一個元素到列表的頭部(左邊)或者尾部(右邊)。
LPUSH KEY_NAME VLAUE [VALUE ...]
將一個或多個值插入到列表頭部(左端)。
RPUSH KEY_NAME VLAUE [VALUE ...]
將一個或多個值插入到列表尾部(右端)。
LPOP key
移除並返回列表頭部第一個元素。
RPOP key
移除並返回列表尾部第一個元素。
LINDEX key offset
返回列表中索引下標爲 offset 的元素
LRANGE key start end
返回列表從 start 偏移量到 end 偏移量範圍內的全部元素,包括(start 和 end)。
LTRIM key start end
對列表進行修剪,只保留從 start 偏移量到 end 偏移量範圍內元素,包括(start 和 end)。
LLEN key
返回列表的長度。 若是列表 key
不存在,則 key
被解釋爲一個空列表,返回 0。
Redis
的 Set
是 String
類型的無序集合。集合成員是惟一的,這就意味着集合中不能出現重複的數據。Redis
中集合是經過哈希表實現的,因此添加,刪除,查找的複雜度都是 O(1)。
SADD key value1..valueN
將一個或多個成員元素加入到集合中,已經存在於集合的成員元素將被忽略。返回添加成功的數量。
SREM key value1..valueN
用於移除集合中的一個或多個成員元素,不存在的成員元素會被忽略。返回移除成功的數量。
SISMEMBER KEY VALUE
判斷成員元素是不是集合的成員。若是成員元素是集合的成員,返回 1。若是成員元素不是集合的成員或 key 不存在,返回 0。
SCARD KEY_NAME
回集合中元素的數量。當集合不存在時返回 0。
SPOP key [count]
用於移除集合中的指定 key 的一個或多個隨機元素,移除後會返回移除的元素。
SUNION KEY KEY1..KEYN
返回給定集合的並集。不存在的集合 key 被視爲空集。
SINTER KEY KEY1..KEYN
返回給定全部給定集合的交集。 不存在的集合 key 被視爲空集。 當給定集合當中有一個空集時,結果也爲空集(根據集合運算定律)。
SDIFF FIRST_KEY OTHER_KEY1..OTHER_KEYN
返回給定集合之間的差集。不存在的集合 key 將視爲空集。差集的結果來自前面的 FIRST_KEY ,而不是後面的 OTHER_KEY1,也不是整個 FIRST_KEY OTHER_KEY1..OTHER_KEYN 的差集。
SMEMBERS key
返回集合中的全部的成員。 不存在的集合 key 被視爲空集合。
Sorted set
是 set
的一個升級版本,它在 set
的基礎上增長了一個順序屬性,這一屬性在添加修改元素時候能夠指定,每次指定後,zset
會自動從新按新的值調整順序。能夠理解爲有兩列字段的數據表,一列存 value
,一列存順序編號。操做中 key
理解爲zset
的名字。
ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN
用於將一個或多個成員元素及其分數值加入到有序集當中。
若是某個成員已是有序集的成員,那麼更新這個成員的分數值,並經過從新插入這個成員元素,來保證該成員在正確的位置上。
ZREM key member [member ...]
用於移除有序集中的一個或多個成員,不存在的成員將被忽略。
ZCARD
用於計算集合中元素的數量。
ZINCRBY key increment member
對有序集合中指定成員的分數加上增量 increment
ZCOUNT
計算在有序集合中指定區間分數的成員數
ZRANK key member
返回有序集中指定成員的排名。其中有序集成員按分數值遞增(從小到大)順序排列。
ZSCORE key member
返回有序集中,成員的分數值。 若是成員元素不是有序集 key 的成員,或 key 不存在,返回 nil 。
ZRANGE key start stop [WITHSCORES]
返回有序集中,指定區間內的成員。
基數計數(cardinality counting)一般用來統計一個集合中不重複的元素個數,例如統計某個網站的UV,或者用戶搜索網站的關鍵詞數量。數據分析、網絡監控及數據庫優化等領域都會涉及到基數計數的需求。
HyperLogLog
的優勢是,在輸入元素的數量或者體積很是很是大時,計算基數所需的空間老是固定的、而且是很小的。缺點就是有3%之內的偏差。
PFADD key element [element ...]
將全部元素參數添加到 HyperLogLog 數據結構中。
PFCOUNT key [key ...]
返回給定 HyperLogLog 的基數估算值。
PFMERGE destkey sourcekey [sourcekey ...]
命令將多個 HyperLogLog 合併爲一個 HyperLogLog ,合併後的 HyperLogLog 的基數估算值是經過對全部 給定 HyperLogLog 進行並集計算得出的。