Redis學習總結(二)--Redis數據結構

Redis支持六種數據類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。java

結構類型 存儲的值
string 能夠是字符串、浮點型、整型
list 一個鏈表,鏈表上的每一個節點存放一個字符串
set 包含字符串的無序容器,裏面的每一個字符串都不相同
hash 包含鍵值對的無序散列表
sorted set 字符串與浮點數分值之間的有序映射,排列順序由分值的大小決定
HyperLogLog 基數統計

string(字符串)

  • string 是 redis 最基本的類型,一個 key 對應一個 value。
  • string 類型是二進制安全的。意思是 redis 的 string 能夠包含任何數據。好比 jpg 圖片或者序列化的對象。
  • string 類型是 Redis 最基本的數據類型,最大能存儲 512MB。

經常使用命令

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 中字符串的子字符串。字符串的截取範圍由 startend 兩個偏移量決定(包括 startend 在內)。網絡

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

Hash(哈希)

Redis hash 是一個 string類型的 fieldvalue 的映射表,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 中的一個或多個指定字段,不存在的字段將被忽略。返回被成功刪除字段的數量,不包括被忽略的字段。

List(列表)

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。

Set(無序集合)

RedisSetString 類型的無序集合。集合成員是惟一的,這就意味着集合中不能出現重複的數據。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(有序集合)

Sorted setset 的一個升級版本,它在 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]

返回有序集中,指定區間內的成員。

HyperLogLog(基數計數)

基數計數(cardinality counting)一般用來統計一個集合中不重複的元素個數,例如統計某個網站的UV,或者用戶搜索網站的關鍵詞數量。數據分析、網絡監控及數據庫優化等領域都會涉及到基數計數的需求。

HyperLogLog 的優勢是,在輸入元素的數量或者體積很是很是大時,計算基數所需的空間老是固定的、而且是很小的。缺點就是有3%之內的偏差。

經常使用命令

PFADD key element [element ...]

將全部元素參數添加到 HyperLogLog 數據結構中。

PFCOUNT key [key ...]

返回給定 HyperLogLog 的基數估算值。

PFMERGE destkey sourcekey [sourcekey ...]

命令將多個 HyperLogLog 合併爲一個 HyperLogLog ,合併後的 HyperLogLog 的基數估算值是經過對全部 給定 HyperLogLog 進行並集計算得出的。

相關文章
相關標籤/搜索