Redis_數據類型

Redis支持的鍵值數據類型以下:數據結構

  • 字符串類型
  • 散列類型
  • 列表類型
  • 集合類型
  • 有序集合類型

 

 1、字符串類型app

       字符串類型是Redis中最基本的數據類型,它能存儲任何形式的字符串,包括二進制數據。一個字符串類型鍵容許存儲的數據最大容量是512MB.spa

 

一、字符串經常使用命令
日誌

 

1.1 賦值與取值對象

SET key valueblog

GET key排序

示例以下:索引


提示:Redis對於鍵的命名沒有強制要求,但比較好的實踐使用"對象類型:對象ID:對象屬性"來命名,對於多個單詞則推薦使用「.」分隔.隊列

 

1.2 數字遞增內存

INCR key

當存儲的字符串是整數形式時,可經過INCR命令讓當前鍵值遞增,並返回遞增後的值,示例以下:


 

INCRBY key increment

INCRBY命令與INCR命令基本同樣,前者能夠經過increment參數指定增長的數值,示例以下:


 

1.3 數字遞減

DECR key

DECRBY key decrement

DECR命令是讓當前鍵值遞減,DECREBY命令可指定減小的數值,與INCRBY命令用法相同,示例以下:


 

1.4 增長指定浮點數

INCRBYFLOAT key increment

INCRBYFLOAT命令用於遞增一個雙精度浮點數,示例以下:


 

1.5 向尾部追加值

APPEND key value

APPEND做用是向鍵值的末尾追加value值,若是鍵不存在則將改鍵的值設置爲value,返回值是追加字符串後的總長度。示例:


 

1.6 獲取字符串長度

STRLEN key

STRLEN命令返回鍵值的長度,若是鍵不存在則返回0,示例:


 

1.7 同時獲取/設置多個鍵值

MGET key [key...]

MSET key value [key value...]

能夠分別使用MGET和MSET命令獲取或者設置多個鍵的鍵值,示例:


 

2、散列類型

       散列類型的鍵值是一種字典結構,其存儲了字段(field)和字段值的映射,但字段值只能是字符串,不支持其餘數據類型。散列類型適合存儲對象:使用對象類別和ID構成鍵名,使用字段表示對象的屬性,字段值則存儲屬性值。例如要存儲ID爲2的汽車對象,能夠設置鍵爲car:2,鍵值爲name:"奧迪",其中鍵值中"name"爲字段,"奧迪"爲字段值。

 

一、散列經常使用命令

 

1.1 賦值與取值

HSET key field value

HGET key field 

這兩個命令分別用來給字段賦值和得到字段的值,HSET命令不區分是對字段的插入仍是更新操做,當字段不存在時爲插入操做,當字段存在時爲更新操做,示例以下:

提示:在Redis中每一個鍵都屬於一個明確的數據類型,如經過HSET命令創建的鍵是散列類型,經過SET命令創建的鍵是字符串類型等。使用一個數據類型的命令操做另外一種數據類型的鍵會提示錯誤:(error) WRONGTYPE Operation against a key holding the wrong kind of value。但也不是全部命令都是如此,如SET命令能夠覆蓋已經存在的鍵,不論鍵原來是什麼類型。

 

HMSET key field value [field value ...]

HMGET key field [field ...]

當須要同時設置或獲取多個字段的值時,可使用HMSET/HMGET命令,示例以下:


 

HGETALL key

HGETALL命令能夠獲取鍵中的全部字段和字段值,示例以下:


 

1.2 判斷字段是否存在

HEXISTS key field

HEXISTS命令用來判斷一個字段是否存在,存在則返回1,不然返回0,示例以下:

 

1.3 當字段不存在時賦值

HSETNX key field value

若是字段已經存在,HSETNX命令將不執行任何操做,示例以下:

 

1.4 增長數字

HINCRBY key field increment

HINCRBY命令可以使字段增長指定的整數,示例以下:

 

 1.5 刪除字段

HDEL key field [field ...]

HDEL命令能夠刪除一個或多個字段,返回值是被刪除的字段個數,示例以下:

 

1.6 只獲取字段名或字段值

HKEYS key

HVALS key

 

1.7 獲取字段數量

HLEN key

 

 

3、 列表類型 

  列表類型能夠存儲一個有序的字符串列表,經常使用的操做是向列表兩端添加元素,或者得到列表的某一個片斷。列表類型內部是使用雙向鏈表實現的,因此向列表兩端添加元素的時間複雜度爲O(1),獲取越接近兩端的元素速度越快。

 

一、列表經常使用命令

 

1.1 向列表兩端增長元素

LPUSH key value [value ... ]

RPUSH key value [value ... ]

LPUSH命令和RPUSH命令分別用來向列表左邊和右邊增長元素,返回值表示增長元素後的列表長度,示例以下:

 

 

1.2 從列表兩端彈出元素

LPOP key

RPOP key

LPOP命令能夠從列表的左邊彈出一個元素,LPOP命令執行步驟:第一步是將列表左邊的元素從列表中移除,第二步是返回被移除的元素值,RPOP命令相似,示例以下:

 

1.3 獲取列表中元素的個數

LLEN key

當鍵不存在時LLEN會返回0,示例以下:

 

 1.4 獲取列表片斷

LRANGE key start stop

LRANGE命令可以獲取列表中的某一片斷,返回索引從start到stop之間的全部元素(包括兩端的元素),Redis的列表起始索引爲0。

 

 

 LRANGE命令也支持負索引,表示從右邊開始取數,如"-1"表示最右邊第一個元素,依次類推。

 

 注意兩種特殊狀況:

(1)若是start的索引位置比stop的索引位置靠後,則會返回空列表

(2)若是stop大於實際的索引範圍,則會返回到列表最右邊的元素

 

 1.5 刪除列表中指定的值

LREM key count value

LREM命令會刪除列表中前count個值爲value的元素,返回值是實際刪除的元素個數,根據count值的不一樣,LREM命令的執行方式會有差別:

(1)當count>0時LREM命令會從列表左邊開始刪除前count個值爲value的元素;

(2)當count<0時LREM命令會從列表右邊開始刪除前|count|個值爲value的元素;

(3)當count=0時LREM命令會刪除全部爲value的元素。

 

 1.6 獲取/設置指定索引的元素值

LINDEX key index

LSET key index value

LINDEX命令用來返回指定索引的元素,索引從0開始

 

 若是index是負數則表示從右邊開始計算的索引,最右邊元素的索引爲-1

 

 LSET命令是爲指定索引設置值

 

 1.7 只保留列表指定片斷

LTRIM key start end

LTRIM命令能夠刪除指定索引範圍以外的全部元素,示例:

 

 1.8 向列表中插入元素

LINSERT key BEFORE|AFTER pivot value

LINSERT命令首先會在列表中從左到右查找值爲pivot的元素,而後根據第二個參數是BEFORE仍是AFTER來決定value插入到該元素的前面仍是後面,返回值是插入後列表的元素個數

 

 1.9 將元素從一個列表轉到另外一個列表中

RPOPLPUSH source destination

RPOPLPUSH命令會先從source列表的右邊彈出一個元素,而後將其加入到destination列表的左邊,並返回這個元素的值,整個過程是原子的。

當把列表類型做爲隊列使用時,RPOPLPUSH命令能夠很直觀地在多個隊列中傳遞數據。當source和destination相同時,RPOPLPUSH命令會不斷地將隊尾地元素移到隊首。

 

 4、集合類型

  集合中的每一個元素都是惟一的,且沒有順序。集合類型的經常使用操做是向集合中加入或刪除元素、判斷某個元素是否存在等,且多個集合之間還能夠進行並集、交集和差集運算。

 

一、集合經常使用命令

 

1.1 增長/刪除元素

SADD key member [member ... ]

SREM key member [member ... ]

SADD命令用來向集合中增長一個或多個元素,若是鍵不存在則會自動建立。由於集合中的元素是惟一的,若是要加入的元素已經存在於集合中就會忽略這個元素,返回值是成功加入的元素數量。

 

 SREM命令用來從集合中刪除一個或多個元素,並返回成功刪除的元素個數。

 

 

1.2 獲取集合中的全部元素

SMEMBERS key

SMEMBERS命令會返回集合中的全部元素,示例以下:

 

 

1.3 判斷元素是否存在集合中

SISMEMBER key member

 

 

1.4 集合間運算

SDIFF key [key ... ]

SDIFF命令用來對多個集合執行差集運算。集合A與集合B的差集表示爲A-B,表明全部屬於A且不屬於B的元素構成的集合,示例以下:

 

 SDIFF命令還支持同時傳入多個鍵

 

SINTER key [key ... ]

SINTER命令用來對多個集合執行交集運算。

 

SUNION key [key ... ]

SUNION命令用來對多個集合執行並集運算。

 

1.5 獲取集合中元素個數

SCARD key

SCARD命令用來獲取集合中的元素個數。

 

1.6 進行集合運算並將結果存儲

SDIFFSTORE destination key [key .... ]

SINTERSTORE destination key [key ... ]

SUNIONSTORE destination key [key ... ]

SDIFFSTORE命令和SDIFF命令相似,區別在於SIDFFSTORE命令不會直接返回運算結果,而是將結果存儲在destination鍵中,經常使用於須要進行多步集合運算的場景中,如須要先計算差集再將結果和其餘鍵計算交集等。

 

1.7 隨機獲取集合中的元素

SRANDMEMBER key [count]

SRANDMEMBER命令用來隨機從集合中獲取一個元素,如:

 

 還能夠根據count參數來一次隨機獲取count個元素,根據count的正負不一樣,表現不一樣。

(1)當count爲正數時,SRANDMEMBER會隨機從集合中獲取count個不重複的元素。若是count的值大於集合中的元素個數,則返回集合中的全部元素

 

 (2)當count爲負數時,SRANDMEMBER會隨機從集合中獲取|count|個元素,元素有可能相同。

 

 1.8 從集合中彈出一個元素

SPOP key

SPOP命令會從集合中隨機選擇一個元素彈出。

 

 

5、有序集合類型

 

一、介紹

  在集合的基礎上,有序集合類型爲集合中的每一個元素都關聯了一個分數,使得咱們不只能夠完成插入、刪除元素和判斷元素是否存在等類型的操做,還可以得到分數最高的前N個元素、得到指定分數範圍內的元素等與分數有關的操做。

 

二、有序集合與列表的區別

(1)列表類型是經過鏈表實現的,獲取靠近兩端的數據速度較快,而當元素增多後,訪問中間數據的速度會較慢,因此更適合實現如「新鮮事」、「日誌」這樣不多訪問中間元素的應用。

(2)有序集合類型是使用散列表和跳躍表實現的,因此即便讀取位於中間部分的數據速度也很快。

    提示:散列表(Hash table,也叫哈希表),是根據關鍵碼值(Key value)而直接進行訪問的數據結構。也就是說,它經過把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。

(3)列表中不能簡單地調整某個元素的位置,有序集合可經過更改元素的分數進行調整。

(4)有序集合比列表類型更耗費內存。

 

三、有序集合經常使用命令

 

 3.1 增長元素

ZADD key score member [score member ... ]

ZADD命令用來向有序集合中加入一個元素和該元素的分數,若是元素已經存在,則會用新的分數替換原來的分數。返回值是加入到集合中的元素個數。

 

 3.2 獲取元素的分數

ZSCORE key member

 

 3.3 獲取排名在某個範圍內的元素列表

ZRANGE key start stop [WITHSCORES]

ZREVRANGE key start stop [WITHSCORES]

ZRANGE命令會按照元素分數從小到大返回索引從start到stop之間的全部元素(包含兩端的元素,同時支持負數索引)。

 

 若是須要在獲取元素的同時得到元素的分數,可在ZRANGE命令後加上WITHSCORES參數。

 若是兩個元素的分數相同,Redis會按照字段順序進行排序("0"<"9"<"A"<"Z"<"a"<"z")

 

3.4 獲取指定分數範圍的元素

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

ZRANGEBYSCORE命令按照元素分數從小到大的順序返回分數在min和max之間的元素(包含min和max)。

 

 若是但願分數範圍不包含端點值,能夠在分數前加上"("符號,示例以下:

 

 [LIMIT offset count]參數的做用:在獲取的元素列表的基礎上向後偏移offset個元素,而且只獲取前count個元素。

 

 3.5 增長某個元素的分數

ZINCRBY key increment member

ZINCRBY命令能夠增長一個元素的分數,返回值是更改後的分數。若是指定元素不存在,Redis在執行命令前會先創建它並將它的分數賦值爲0再執行操做。

 

 3.6 獲取集合中元素的數量

ZCARD key

 

 3.7 獲取指定分數範圍內的元素個數

ZCOUNT key min max

 

 3.8 刪除一個或多個元素

ZREM key member [member ... ]

 

 3.9 按照排名範圍刪除元素

ZREMRANGEBYRANK key start stop

ZREMRANGEBYRANK命令按照元素分數從小到大的順序刪除處在指定排名範圍內的全部元素,並返回刪除的元素數量。

 

 3.10 按照分數範圍刪除元素

ZREMRANGEBYSCORE key min max

 

 3.11 獲取元素的排名

ZRANK key member

ZREVRANK key member

ZRANK命令會按照元素分數從小到大的順序得到指定的元素排名(分數最小的元素排名爲0),ZREVRANK命令與之相反(分數最大的元素排名爲0)。

 

 3.12 計算有序集合的交集

ZINTERSTORE destination numkeys key [key ... ] [WEIGHTS weight [weight ... ]] [AGGREGATE SUM|MIN|MAX]

ZINTERSTORE命令用來計算多個有序集合的交集並將結果存在destination鍵中,返回值爲destination鍵中的元素個數。destination鍵中的分數是由AGGREAGTE參數決定的。

(1)當AGGREGATE是SUM時,destination鍵中元素的分數是每一個參與計算的集合中的該元素分數的和,默認爲SUM。

 

(2)當AGGREGATE是MIN時,destination鍵中元素的分數是每一個參與計算的集合中的該元素分數的最小值。

 

 (3)當AGGREGATE是MAX時,destination鍵中元素的分數是每一個參與計算的集合中的該元素分數的最大值。

 

 ZINTERSTORE命令還可以經過WEIGHTS參數設置每一個集合的權重,每一個集合在參與計算時元素的分數被乘上該集合的權重。

 ZUNINONSTORE命令用於計算集合的並集,與ZINTERSTORE命令相似。

相關文章
相關標籤/搜索