redis的五種數據類型基本用法總結

簡言之:redis

redis 是一個開源的,高性能的,基於鍵值對的緩存存儲系統。經過提供多種鍵值數據類型來適應不一樣的場景下的緩存存儲需求。同時redis的諸多高級功能使其能夠勝任消息隊列,任務隊列等不一樣的角色。緩存

數據類型和基本命令

字符串類型(String)

是redis最基本的類型,能存任何形式的字符串,包括二進制數據。一個string類型的key容許存儲的最大容量是512MB,但勸你別這麼幹(存很大的數據),畢竟redis會把數據都加載到內存。post

在這個鍵foo存一個bar值,或者更新foo裏面的存的值爲bar:性能

SET foo bar網站

獲取這個foo裏面的值, 你將獲得字符串bar:索引

GET foo隊列

當鍵值裏面存的是數字,可使用命令遞增數字:內存

INCR foorem

它返回的是遞增之後的值。若是裏面存的不是數字,會報錯。字符串

String類型應用場景示例:

  1. 訪問量統計
  2. 生成自增id
  3. 存儲其餘你想存的字符串

其餘命令:

增長指定的整數(返回增長後的值)

INCRBY key increment

減小指定的整數 && 減1(返回減小後的值)

DECRBY key decrement
DECR key

DECRBY key 5 和 INCRBY key -5的效果是同樣的。

增長指定的浮點數(返回增長後的值)

INCRBYFLOAT key increment\

在鍵值尾部追加字符串(返回追加後的總長度)

APPEND key value

獲取鍵值字符串長度

STRLEN key

同時設置 || 得到多個鍵值

MSET key1 value1 key2 value2
MGET key1 key2

散列類型(Hash)

若是咱們存的數據有多個部分組成,好比標題,做者,正文。這時候用散列比較合適了。散列類型的鍵值是一種字典結構,其存儲了字段和字段值的映射。一個散列類型鍵最多能夠包含2^32-1個字段。技術上並不要求每一個key存的字段都是一致的,如:key0裏面存的字段是title,author; key1裏面存的字段是content,title。

賦值&&取值

HSET key field1 value1
HGET key field1

同時設置 && 獲取多個字段的值 && 獲取全部字段和它們的值

HMSET key field1 value1 field2 value2
HMGET key field1 field2
HGETALL key

字段是否存在(不存在返回0,不然1):

HEXISTS key field

字段不存在時賦值(返回值與HEXISTS相反):

HSETNX key field value

增長數字(返回增長後的值):

HINCRBY key field increment

刪除字段(返回被刪的字段個數):

HDEL key field1 field2 ...

Hash應用場景示例

  1. 存儲文章數據,或者別的多組成數據

其餘命令:

只獲取字段名 || 字段值

HKEYS key
HVALS key

得到字段數量

HLEN key

列表類型(List)

列表類型能夠存儲有序的字符串列表,常見的操做是向列表兩端添加元素,或者獲取列表的某個片斷。它是由雙向鏈表實現的,因此向兩端添加元素的時間複雜度是O(1),獲取越近兩端的元素速度越快。這種特性使它能快速完成下面場景:如社交網站的新鮮事,咱們只關心最新的內容,即便裏面的數據幾千萬個,咱們要找最新的100條也是很快的。一個列表類型的鍵最多能容納2^32-1個元素。命令:

  1. 向列表兩端增長元素:(返回增長後列表的長度)

LPUSH key value1 value2
RPUSH key value1 value2

  1. 從兩端彈出元素:(返回彈出的元素)

LPOP key
RPOP key

  1. 獲取列表中的元素的個數:(當key不存在返回0)

LLEN key

  1. 得到列表中的片斷:(start,stop的全閉區間)

LRANGE key start stop

LRANGE支持負索引,-1表示最右邊的元素,以此類推。

  1. 刪除列表中指定的值:(返回刪除元素的個數)

LREM key count value

將會刪除列表中前count個值爲value的元素。

  • 當count>0,將會刪除列表中從左邊開始,前count個值爲value的元素
  • 當count<0,將會刪除列表中從右邊開始,前abs(count)個值爲value的元素
  • 當count==0,將會刪除列表中全部的,值爲value的元素

List使用場景示例

  1. 文章id列表
  2. 評論列表
  3. 各類列表...

其餘命令

  1. 獲取 || 設置指定索引的元素值

LINDEX key index
LSET key index value

  1. 只保留列表的指定片斷

LTRIM key start stop

  1. 向列表中插入元素

LINSERT key BEFORE|AFTER value1 value2

在列表中從左到右查找值爲value1的元素,而後根據第二個參數before仍是after來肯定value2插在前面仍是後面。

  1. 將元素從一個列表轉到另外一個列表

RPOPLPUSH source destination

從名字就能夠看出它的功能:先從source列表類型鍵的右邊彈出一個元素,而後將其加入到destination列表類型鍵的左邊,並返回這個元素的值,整個過程是原子的。

集合類型(Set)

行爲很像高中數學課教過的集合。它每一個元素是不一樣的,且沒有順序,一個集合類型的鍵最多能夠存2^32-1個字符串。redis集合內部是使用值爲空的散列表實現的,因此向集合中加入元素,刪除元素,判斷元素是否存在,這些操做的時間複雜度都是O(1)。最方便的是多個集合之間能夠取交集,並集,差集。

命令:

  1. 增長 && 刪除元素(返回增長了多少個,刪除了多少個)

SADD key value1 value2 ...
SREM key value1 value2 ...

  1. 得到集合中的全部元素

SMEMBERS key

  1. 判斷元素是否在集合中(存在返回1,不然0)

SISMEMBER key value

  1. 取多個集合的差集

SDIFF key0 key1 key2 ...

這個例子的意思是:先求key0有而key1沒有的元素集合keyTmp,而後再求keyTmp有而key2沒有的元素集合。

  1. 取集合間的交集

SINTER key0 key1 key2 ...

求在三個幾個都存在的元素集合。

  1. 取集合間的並集

SUNION key0 key1 key2 ...

Set使用場景示例

  1. 存儲文章標籤: 好比,使用鍵名爲post:id:tags的鍵存儲該篇文章的標籤。但並無使用到集合的優點,這兒也可使用簡單的字符串來存儲標籤。
  2. 經過標籤搜索文章: 好比,使用鍵名爲tag:標籤名:postIds的集合類型的鍵存儲文章id。 當咱們須要找標籤同時知足‘MySQL’和‘Java’, 那咱們就能夠用交集命令,飛快選出文章的id了。

其餘命令

  1. 得到集合中元素的個數

SCARD key

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

SDIFFSTORE destination key0 key1 key2 ...

將key0 key1 key2的差集存到destination鍵中。

SINTERSTORE destination key0 key1 key2 ...

將key0 key1 key2的交集存到destination鍵中。

SUNIONSTORE destination key0 key1 key2 ...

將key0 key1 key2的並集存到destination鍵中。

  1. 隨機得到集合中的元素

SRANDMEMBER key [count]

  • 當count>0, 隨機從集合中得到count個不一樣元素
  • 當count<0, 隨機從集合中得到abs(count)個可能有重複的元素
  1. 從集合中隨機彈出一個元素

SPOP key

有序集合類型(ZSet)

與Set的區別就是‘有序’二字。 在集合的基礎上,有序集合爲每一個元素都關聯了一個分數,這使得咱們不只能夠完成插入刪除,判斷元素是否存在等操做,還能夠得到分數最高(或最低)的前N個元素,得到指定分數範圍內的元素等。元素是不一樣的,可是它們分數能夠相同。

命令:

  1. 增長元素(返回增長的元素個數)

ZADD key score1 value1 score2 value2 ...

若是元素已經存在則會替換元素的分數。分數是整數或者浮點數。

  1. 得到元素的分數

ZSCORE key value

  1. 得到排名在某個範圍的元素列表(全閉區間)

ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]

ZRANGE 命令會按照元素從小到大的順序返回索引從start到stop之間的元素,加上WITHSCORES會返回分數。ZREVRANGE則是從大到小的順序。

  1. 得到指定分數範圍的元素列表(全閉區間)

ZRANGEBYSCORE key min max [WITHSCORES] [limit offset count]
ZREVRANGEBYSCORE key min max [WITHSCORES] [limit offset count]

按照分數從小到大的順序,返回分數在min到max之間的元素。若是但願分數範圍不包含端點值,能夠這樣:

ZRANGEBYSCORE key 80 (100

limit,offset的用法與SQL相同。即,在得到的元素基礎上向後偏移offset個元素,而且只獲取前count個。好比:

ZRANGEBYSCORE key 80 100 limit 1 3

ZREVRANGEBYSCORE則是從大到小的順序。

  1. 增長某個元素的分數(返回更改後的分數)

ZINCRBY key increment value

ZSet使用場景示例

  1. 各類排行榜

其餘命令

  1. 得到集合中元素的個數

ZCARD key

  1. 得到指定分數範圍內的元素個數(全閉區間)

ZCOUNT key min max

要用開區間就用'('

  1. 刪除一個或者多個元素(返回刪除成功的數量)

ZREM key value1 value2 ...

  1. 按照排名範圍刪除元素(全閉區間,返回刪除成功的數量)

ZREMRANGEBYRANK key start stop

按照從小到大的順序,刪除排名在start stop之間的元素,索引從0開始。

  1. 按照分數範圍刪除元素(全閉區間,返回刪除成功的數量)

ZREMRANGEBYSCORE key min max

要開區間,則用'(',好比

ZREMRANGEBYSCORE key 80 (100

  1. 得到元素的排名

ZRANK key value
ZREVRANK key value

ZRANK從小到大,ZREVRANK從大到小,排名從0開始。

相關文章
相關標籤/搜索