Redis 支持多種類型的數據結構,如字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 與範圍查詢, bitmaps, hyperloglogs 和 地理空間(geospatial)索引半徑查詢,能夠參考官方文檔:數據類型定義。本文詳細介紹五種經常使用基本數據類型的使用方法。命令介紹也只是列舉了基本的命令基本格式,至於具體的使用示例,能夠參考Redis官方文檔:Redis命令大全 ,
redis
字符串是Redis中最基本的數據類型,它可以存儲任何類型的字符串,包含二進制數據。能夠用於存儲郵箱,JSON化的對象,甚至是一張圖片,一個字符串容許存儲的最大容量爲512MB。字符串是其餘四種類型的基礎,與其餘幾種類型的區別從本質上來講只是組織字符串的方式不一樣而已。數據結構
GET key
INCR key
INCRBY key increment
,意思是key自增increment,increment能夠爲負數,表示減小。DECR key
DECRBY key decrement
,意思是key自減decrement,decrement能夠爲正數,表示增長。INCRBYFLOAT key increment
APPEND key value
STRLEN key
MSET key1 value1 [key2 value2 ...]
MGET key1 [key2 ...]
GETBIT key offset
SETBIT key offset value
BITCOUNT key [start end]
BITOP OP desKey key1 key2
BITPOS key 0/1 [start, end]
散列類型至關於Java中的HashMap,他的值是一個字典,保存不少key,value對,每對key,value的值個鍵都是字符串類型,換句話說,散列類型不能嵌套其餘數據類型。一個散列類型鍵最多能夠包含2的32次方-1個字段。app
HSET key field value
HMSET key field1 value1 [field2 values]
HSET key field
HMSET key field1 [field2]
HGETALL key
HEXISTS key field
HSETNX key field value
HINCRBY key field increment
HDEL key field
HKEYS key
HVALS key
HLEN key
列表類型(list)用於存儲一個有序的字符串列表,經常使用的操做是向隊列兩端添加元素或者得到列表的某一片斷。列表內部使用的是雙向鏈表(double linked list)實現的,因此向列表兩端添加元素的時間複雜度是O(1),獲取越接近列表兩端的元素的速度越快。可是缺點是使用列表經過索引訪問元素的效率過低(須要從端點開始遍歷元素)。因此列表的使用場景通常如:朋友圈新鮮事,只關心最新的一些內容。藉助列表類型,Redis還能夠做爲消息隊列使用。spa
LPUSH key value
RPUSH key value
LPOP key
RPOP key
LLEN key
LRANGE key start stop
,index從0開始,-1表示最後一個元素LREM key count value
,刪除列表中前count個值爲value的元素,當count>0時從左邊開始數,count<0時從右邊開始數,count=0時會刪除全部值爲value的元素LINDEX key index
LSET key index value
LTRIM key start stop
,包含start和stopLINSERT key BEFORE|AFTER privot value
,從左邊開始尋找值爲privot的第一個元素,而後根據第二個參數是BEFORE仍是AFTER決定在該元素的前面仍是後面插入valueRPOPLPUSH source destination
集合在概念在高中課本就學過,集合中每一個元素都是不一樣的,集合中的元素個數最多爲2的32次方-1個,集合中的元素師沒有順序的。code
SADD key value1 [value2 value3 ...]
SREM key value2 [value2 value3 ...]
SMEMBERS key
SISMEMBER key value
SDIFF key1 key2 [key3 ...]
,先計算key1和key2的差集,而後再用結果與key3作差集SINTER key1 key2 [key3 ...]
SUNION key1 key2 [key3 ...]
SCARD key
SDIFFSTORE destination key1 key2 [key3 ...]
SINTERSTORE destination key1 key2 [key3 ...]
SUNIONSTORE destination key1 key2 [key3 ...]
SRANDMEMBER key [count]
,當count>0時,會隨機中集合中獲取count個不重複的元素,當count<0時,隨機中集合中獲取|count|和可能重複的元素。SPOP key
有序集合類型與集合類型的區別就是他是有序的。有序集合是在集合的基礎上爲每個元素關聯一個分數,這就讓有序集合不只支持插入,刪除,判斷元素是否存在等操做外,還支持獲取分數最高/最低的前N個元素。有序集合中的每一個元素是不一樣的,可是分數卻能夠相同。有序集合使用散列表和跳躍表實現,即便讀取位於中間部分的數據也很快,時間複雜度爲O(log(N)),有序集合比列表更費內存。對象
ZADD key score1 value1 [score2 value2 score3 value3 ...]
ZSCORE key value
ZRANGE key start stop [WITHSCORE]
,按照元素從小到大的順序排序,從0開始編號,包含start和stop對應的元素,WITHSCORE選項表示是否返回元素分數ZREVRANGE key start stop [WITHSCORE]
,和上一個命令用法同樣,只是這個倒序排序的。ZRANGEBYSCORE key min max
,包含min和max,(min
表示不包含min,(max
表示不包含max,+inf
表示無窮大ZINCRBY key increment value
ZCARD key
ZCOUNT key min max
,min和max的用法和5中的同樣ZREM key value1 [value2 ...]
ZREMRANGEBYRANK key start stop
ZREMRANGEBYSCORE key min max
,min和max的用法和4中的同樣ZRANK key value
ZREVRANK key value
ZINTERSTORE destination numbers key1 key2 [key3 key4 ...] WEIGHTS weight1 weight2 [weight3 weight4 ...] AGGREGATE SUM | MIN | MAX
,numbers表示參加運算的集合個數,weight表示權重,aggregate表示結果取值