概述
Redis 支援多種類型的資料結構,如字元串(strings), 散列(hashes), 清單(lists), 集合(sets), 有序集合(sorted sets) 與範圍查詢, bitmaps, hyperloglogs 和 地理空間(geospatial)索引半徑查詢,可以參考官方文檔:資料類型定義。本文詳細介紹五種常用基本資料類型的使用方法。指令介紹也隻是列舉了基本的指令基本格式,至于具體的使用示例,可以參考Redis官方文檔:Redis指令大全 ,
字元串類型
字元串是Redis中最基本的資料類型,它能夠存儲任何類型的字元串,包含二進制資料。可以用于存儲郵箱,JSON化的對象,甚至是一張圖檔,一個字元串允許存儲的最大容量為512MB。字元串是其他四種類型的基礎,與其他幾種類型的差別從本質上來說隻是組織字元串的方式不同而已。
基本指令
字元串操作
- SET 指派,用法: SET key value [EX seconds] [PX milliseconds] [NX|XX]
- GET 取值,用法:
GET key
- INCR 遞增數字,僅僅對數字類型的鍵有用,相當于Java的i++運算,用法:
INCR key
- INCRBY 增加指定的數字,僅僅對數字類型的鍵有用,相當于Java的i+=3,用法:
,意思是key自增increment,increment可以為負數,表示減少。INCRBY key increment
- DECR 遞減數字,僅僅對數字類型的鍵有用,相當于Java的i–,用法:
DECR key
- DECRBY 減少指定的數字,僅僅對數字類型的鍵有用,相當于Java的i-=3,用法:
,意思是key自減decrement,decrement可以為正數,表示增加。DECRBY key decrement
- INCRBYFLOAT 增加指定浮點數,僅僅對數字類型的鍵有用,用法:
INCRBYFLOAT key increment
- APPEND 向尾部追加值,相當于Java中的”hello”.append(“ world”),用法:
APPEND key value
- STRLEN 擷取字元串長度,用法:
STRLEN key
- MSET 同時設定多個key的值,用法:
MSET key1 value1 [key2 value2 ...]
- MGET 同時擷取多個key的值,用法:
MGET key1 [key2 ...]
位操作
- GETBIT 擷取一個鍵值的二進制位的指定位置的值(0/1),用法:
GETBIT key offset
- SETBIT 設定一個鍵值的二進制位的指定位置的值(0/1),用法:
SETBIT key offset value
- BITCOUNT 擷取一個鍵值的一個範圍内的二進制表示的1的個數,用法:
BITCOUNT key [start end]
- BITOP 該指令可以對多個字元串類型鍵進行位運算,并将結果存儲到指定的鍵中,BITOP支援的運算包含:OR,AND,XOR,NOT,用法:
BITOP OP desKey key1 key2
- BITPOS 擷取指定鍵的第一個位值為0或者1的位置,用法:
BITPOS key 0/1 [start, end]
散列類型
散列類型相當于Java中的HashMap,他的值是一個字典,儲存很多key,value對,每對key,value的值個鍵都是字元串類型,換句話說,散列類型不能嵌套其他資料類型。一個散列類型鍵最多可以包含2的32次方-1個字段。
- HSET 指派,用法:
HSET key field value
- HMSET 一次指派多個字段,用法:
HMSET key field1 value1 [field2 values]
- HGET 取值,用法:
HSET key field
- HMGET 一次取多個字段的值,用法:
HMSET key field1 [field2]
- HGETALL 一次取所有字段的值,用法:
HGETALL key
- HEXISTS 判斷字段是否存在,存在傳回1,否則傳回0,用法:
HEXISTS key field
- HSETNX 當字段不存在時指派,存在就不操作,用法:
HSETNX key field value
- HINCRBY 增加數字,僅對數字類型的值有用,用法:
HINCRBY key field increment
- HDEL 删除字段,傳回的是删除字段的個數,用法:
HDEL key field
- HKEYS 擷取所有字段名,用法:
HKEYS key
- HVALS 擷取所有字段值,用法:
HVALS key
- HLEN 擷取字段數量,用法:
HLEN key
清單類型
清單類型(list)用于存儲一個有序的字元串清單,常用的操作是向隊列兩端添加元素或者獲得清單的某一片段。清單内部使用的是雙向連結清單(double linked list)實作的,是以向清單兩端添加元素的時間複雜度是O(1),擷取越接近清單兩端的元素的速度越快。但是缺點是使用清單通過索引通路元素的效率太低(需要從端點開始周遊元素)。是以清單的使用場景一般如:朋友圈新鮮事,隻關心最新的一些内容。借助清單類型,Redis還可以作為消息隊列使用。
- LPUSH 向清單左端添加元素,用法:
LPUSH key value
- RPUSH 向清單右端添加元素,用法:
RPUSH key value
- LPOP 從清單左端彈出元素,用法:
LPOP key
- RPOP 從清單右端彈出元素,用法:
RPOP key
- LLEN 擷取清單中元素個數,用法:
LLEN key
- LRANGE 擷取清單中某一片段的元素,用法:
,index從0開始,-1表示最後一個元素LRANGE key start stop
- LREM 删除清單中指定的值,用法:
,删除清單中前count個值為value的元素,當count>0時從左邊開始數,count<0時從右邊開始數,count=0時會删除所有值為value的元素LREM key count value
- LINDEX 擷取指定索引的元素值,用法:
LINDEX key index
- LSET 設定指定索引的元素值,用法:
LSET key index value
- LTRIM 隻保留清單指定片段,用法:
,包含start和stopLTRIM key start stop
- LINSERT 像清單中插入元素,用法:
,從左邊開始尋找值為privot的第一個元素,然後根據第二個參數是BEFORE還是AFTER決定在該元素的前面還是後面插入valueLINSERT key BEFORE|AFTER privot value
- RPOPLPUSH 将元素從一個清單轉義到另一個清單,用法:
RPOPLPUSH source destination
集合類型
集合在概念在高中課本就學過,集合中每個元素都是不同的,集合中的元素個數最多為2的32次方-1個,集合中的元素師沒有順序的。
- SADD 添加元素,用法:
SADD key value1 [value2 value3 ...]
- SREM 删除元素,用法:
SREM key value2 [value2 value3 ...]
- SMEMBERS 獲得集合中所有元素,用法:
SMEMBERS key
- SISMEMBER 判斷元素是否在集合中,用法:
SISMEMBER key value
- SDIFF 對集合做差集運算,用法:
,先計算key1和key2的差集,然後再用結果與key3做差集SDIFF key1 key2 [key3 ...]
- SINTER 對集合做交集運算,用法:
SINTER key1 key2 [key3 ...]
- SUNION 對集合做并集運算,用法:
SUNION key1 key2 [key3 ...]
- SCARD 獲得集合中元素的個數,用法:
SCARD key
- SDIFFSTORE 對集合做差集并将結果存儲,用法:
SDIFFSTORE destination key1 key2 [key3 ...]
- SINTERSTORE 對集合做交集運算并将結果存儲,用法:
SINTERSTORE destination key1 key2 [key3 ...]
- SUNIONSTORE 對集合做并集運算并将結果存儲,用法:
SUNIONSTORE destination key1 key2 [key3 ...]
- SRANDMEMBER 随機擷取集合中的元素,用法:
,當count>0時,會随機中集合中擷取count個不重複的元素,當count<0時,随機中集合中擷取|count|和可能重複的元素。SRANDMEMBER key [count]
- SPOP 從集合中随機彈出一個元素,用法:
SPOP key
有序集合類型
有序集合類型與集合類型的差別就是他是有序的。有序集合是在集合的基礎上為每一個元素關聯一個分數,這就讓有序集合不僅支援插入,删除,判斷元素是否存在等操作外,還支援擷取分數最高/最低的前N個元素。有序集合中的每個元素是不同的,但是分數卻可以相同。有序集合使用散清單和跳躍表實作,即使讀取位于中間部分的資料也很快,時間複雜度為O(log(N)),有序集合比清單更費記憶體。
- ZADD 添加元素,用法:
ZADD key score1 value1 [score2 value2 score3 value3 ...]
- ZSCORE 擷取元素的分數,用法:
ZSCORE key value
- ZRANGE 擷取排名在某個範圍的元素,用法:
,按照元素從小到大的順序排序,從0開始編号,包含start和stop對應的元素,WITHSCORE選項表示是否傳回元素分數ZRANGE key start stop [WITHSCORE]
- ZREVRANGE 擷取排名在某個範圍的元素,用法:
,和上一個指令用法一樣,隻是這個倒序排序的。ZREVRANGE key start stop [WITHSCORE]
- ZRANGEBYSCORE 擷取指定分數範圍内的元素,用法:
,包含min和max,ZRANGEBYSCORE key min max
表示不包含min,(min
表示不包含max,(max
表示無窮大+inf
- ZINCRBY 增加某個元素的分數,用法:
ZINCRBY key increment value
- ZCARD 擷取集合中元素的個數,用法:
ZCARD key
- ZCOUNT 擷取指定分數範圍内的元素個數,用法:
,min和max的用法和5中的一樣ZCOUNT key min max
- ZREM 删除一個或多個元素,用法:
ZREM key value1 [value2 ...]
- ZREMRANGEBYRANK 按照排名範圍删除元素,用法:
ZREMRANGEBYRANK key start stop
- ZREMRANGEBYSCORE 按照分數範圍删除元素,用法:
,min和max的用法和4中的一樣ZREMRANGEBYSCORE key min max
- ZRANK 擷取正序排序的元素的排名,用法:
ZRANK key value
- ZREVRANK 擷取逆序排序的元素的排名,用法:
ZREVRANK key value
- ZINTERSTORE 計算有序集合的交集并存儲結果,用法:
,numbers表示參加運算的集合個數,weight表示權重,aggregate表示結果取值ZINTERSTORE destination numbers key1 key2 [key3 key4 ...] WEIGHTS weight1 weight2 [weight3 weight4 ...] AGGREGATE SUM | MIN | MAX
- ZUNIONSTORE 計算有序幾個的并集并存儲結果,用法和14一樣,不再贅述。