Redis基本數據結構總結
前言
Redis的特色在於其讀寫速度特別快,由於是存儲在內存中的,其很是適合於處理大數據量的狀況;還有一個是其不一樣於其餘的關係型數據庫,Redis是非關係型數據庫,也就是咱們常說的NoSQL,其並不須要一開始去建立好表結構,能夠存儲自定義的數據;還有Redis是分佈式的,其能夠主從分離,主從複製,好比說咱們不可能只用一臺Redis服務器來處理客戶端的請求,由於這樣畢竟是存在風險,若是服務器掛掉了,那麼其數據就會丟失,並且沒法找回,因此存在這麼一種方案:多個主服務器用來處理客戶端的請求,接着多個Redis分服務器用來將主服務器的數據同步到MySQL,這樣在Redis服務器掛掉的時候,咱們仍是能夠經過訪問MySQL數據庫從而獲得數據;redis
不少人說Redis和memcached比較相像,可是我沒有使用過memcached,因此只是總結了別人的比較。Redis擁有5個數據結構,而memcached只有一個字符串的數據結構,其只能經過append命令將數據添加到字符串的末尾,而且把該字符串看成一個列表在使用,在刪除數據的時候,redis能夠直接經過remove命令將其真正的刪除,可是memcached只可以經過黑名單隱藏該數據從而避免對該數據進行讀取,更新。數據庫
五種數據結構
這五種數據結構分別是STRING(字符串)、LIST(列表)、SET(集合)、HASH(哈希)、ZSET(有序集合);安全
- 字符串:包括字符串、整數和浮點數;
- 列表:一個鏈表,鏈表上面的每一個結點都是一個字符串,其聽從隊列的訪問格式-先進先出,也就是從鏈表的結尾進行插入,鏈表的頭部進行彈出;
- 集合:裏面是一個容器,他不容許存在相同的元素,每一個值都是獨一無二的;
- 哈希:是一個鍵值對組合而成的無序散列表,其的鍵一樣是不容許重複的;
- 有序集合:是在集合的基礎之上進行了排序;
在瞭解那五個操做相關的命令以前,須要先了解關於鍵的相關的命令:服務器
Key
-
DEL key數據結構
移除給定的一個或者多個key。app
-
KEYS pattern分佈式
查找符合給定模式的key,注意其匹配的模式怎麼使用,包括了?、*、[]等等。memcached
-
RANDOMKEY大數據
從當前數據庫中隨機返回一個key。編碼
-
EXPIRE key seconds
爲給定的key設置存活時間,時間一過則把對應的key進行銷燬,注意單位爲秒。
-
TTL key
獲取key剩餘的存活時間,單位爲秒,和上面的命令相對應,若是該key不存在或者是過時的話,則返回-2/-1(在不一樣數據庫返回的值不同?)。
-
MOVE key db
將key移動到指定的db,默認狀況下使用的是0號數據庫,注意要移動到相應的數據庫(SELECT db)才能看到。
-
RENAME key newkey
將key更改成新的key,注意若是newkey在數據庫中已經存在,那麼舊的key的數據會把已經存在的新的key給覆蓋掉。
-
TYPE key
返回指定的key的類型,若是不存在則返回的是none,而不是nil(進行操做才返回的)。
-
OBJECT REFCOUNT key | OBJECT ENCODING key | OBJECT IDLETIME key
分別返回key所引用的次數,key對應的編碼,key空閒的時間(沒有讀也沒有寫,單位爲秒)。
-
RENAMENX key newkey
在RENMAE的基礎上判斷key是否存在,更加的安全。
-
EXPIREAT key timestamp
設置時間戳。
-
PERSIST key
移除給定key的生存時間,也可使用EXPIRE 來重置。
-
SORT key [BY pattern] [LIMIT offset count] [GETpattern] [ASC|DESC] [ALPHA] [STORE destination]
這個方法只能用在LIST、SET、ZSET上,這裏的pattern和以前的keys的pattern是同樣的,LIMIT則是用來限制返回的偏移量和數量,GET是獲取返回的指定的key的內容,ASC是升序、DESC是降序, ALPHA則是用在對字符串進行排序的時候,STORE則是指定存儲的地方,能夠指定到一個key上,這樣就能夠經過GET來訪問到。
STRING
-
GET key
獲取存儲在給定鍵的值。
-
MGET key...
獲取多個指定的鍵值。
-
GETRANGE key start end
獲取指定範圍的鍵值,支持反向操做,若是end超出實際範圍,則忽略,返回全值。
-
GETSET key value
集合了GET和SET的功能,不過其返回的是該鍵被設置以前的值,可是其的值已經發生了改變 ,注意若是以前沒有該鍵,則返回nil。
-
SET key value
設置存儲在給定鍵中的值。
-
SETNX key value
注意在key已經存在的狀況下,不進行任何操做,也就是說 SET if key not exist;可能存在一個鎖的問題。
-
SETEX key seconds value
集合了SET和EXPIRE的功能,若是key存在,則覆蓋掉。
-
SETRANGE key offset value
從偏移量開始設置,注意的是當這個value不足以把以前的value給覆蓋掉時,那麼仍然會顯示以前沒有被覆蓋掉的值。這裏返回的是字符串總的長度。若是空白字符串不存在的話,則至關於在空白字符串上進行操做。
-
MSET key value ...
能夠同時設置多個鍵值對,若是不像覆蓋掉key的話,可使用MSETNX。
-
MSETNX key value...
和SETNX的做用是同樣的,這裏只有所有key都設置成功,才能返回1,只要有一個key已經存在,就會返回0。
-
APPEND key value
追加字符串值,返回新字符串長度,能夠添加空字符串,返回的是原來的長度。
-
STRLEN key
返回字符串長度。
-
DECR key
將key的值減一,若是不存在key,則會先進行SET,而且將該鍵值初始化爲0。該命令只能使用在數字上面。
-
DECRBY key decrement
在上面的基礎之上減去指定的值。
-
INCR key 和 INCRBY key increment
同DECR和DECRBY
-
SETBIT key offset set_or_clean
將字符串看做是二進制,而且將字符串指定偏移量的二進制位設置爲指定值,能夠是set或者clean。一樣的,若是key不存在,則幫其進行設置。
-
GETBIT key offset
把字符串看做是二進制串,而且返回二進制串中指定偏移量的二進制位的值。
LIST
在LIST中,不須要進行相應的SET操做,若是其不存在,其會自動建立,而且初始化爲空列表。
-
LPUSH key value...
把多個鍵值加入到列表key的表頭中,返回列表的長度。
-
LPUSHX key value...
在上面的基礎之上,若是key不存在,則不進行任何操做,即 LPUSH if key exists。
-
RPUSH key value
插入到表尾。
-
RPUSHX key value
相似LPUSHX。
-
LPOP key
移出而且返回頭元素。
-
RPOP key
移出而且返回尾元素。
-
BLPOP key... timeout
至關於LPOP的阻塞版本,若是其列表沒有元素的時候,則會一直阻塞到列表中存在值而且進行LPOP操做,咱們還能夠設置超時時間,若是是0的話,則代表其能夠阻塞到無限時間長。
-
BRPOP key... timeout
參照BLPOP。
-
LLEN key
返回列表的長度。
-
LRANGE key start stop
返回只等區間長度的元素,注意stop要大於start,不然返回一個空列表。
-
LREM key count value
刪除列表中和value相等的元素。這個取決於count的值,若是爲正數,正向搜索刪除,若是爲負數,反向搜索刪除,若是等於0,則所有刪除;返回被刪除的個數。
-
LSET key index value
設置指定下標的值爲新的value。
-
LTRIM key start stop
將指定返回值保留下來,其他均刪除。
-
LINDEX key index
返回指定下標index的值。
-
LINSERT key BEFORE|AFTER privot value
將key添加到privot以前或者以後,若是privot不存在或者列表爲空,則不進行任何操做。若是成功則返回列表長度。
-
RPOPLPUSH source destination
將source中的尾元素彈出而且插到destination列表的頭元素的位置上,能夠簡單的理解爲其進行了插隊的操做;若是destination不存在則默認設置爲空列表,可是若是source不存在則不進行任何的操做。
-
BROPLPUSH source destination timeout
上面版本的阻塞版本,若是timeout爲0,則能夠無限期阻塞。
SET
-
SADD key-name [item...]
添加多個元素到集合中,而且返回添加到集合中的的元素的個數。
-
SREM key-name [item...]
刪除多個元素到集合中,而且返回刪除的元素的個數。
-
SISMEMBER key-name item
判斷該元素是否存在於該集合中。
-
SCARD key-name
返回該集合的元素數量。
-
SMEMBERS key-name
返回該集合的全部元素。
-
SRANDMEMBER key-name [count]
隨機的返回該集合的count個元素,若是count是正數的話,不會重複,可是是負數的話,則可能就會重複。
-
SPOP key-name
隨機的彈出而且返回該值。
-
SMOVE from-key-name to-key-name item
將該元素從from移動到to中,成功則返回1,相反返回0。
-
SDIFF key-name [key-name...]
返回在第一個集合中存在,其它集合不存在的元素,即取差集。
-
SDIFFSTORE dest-key key-name [key-name...]
分紅DIFF和STORE來看,也就是將DIFF的結果存儲在dest-key中。
-
SINTER key-name [key-name...]
返回在全部集合中同時存在的元素,即取並集。
-
SINTERSTORE dest-key key-name [key-name...]
分紅INTER和STORE來看,也就是將INTER的結果存儲在dest-key中。
-
SUNION key-name [key-name...]
返回在全部集合中存在的元素,即取交集。
-
SUNIONSTORE dest-key key-name [key-name...]
分紅UNION和STORE來看,也就是將UNION的結果存儲在dest-key中。
有序集合
-
ZADD key-name score member [score member...]
將帶有給定分值的成員加入到有序集合中。
-
ZREM key-name member [member..]
從有序集合裏面移除給定的成員,而且返回。
-
ZCARD key-name
返回有序集合中元素的數量。
-
ZINCRBY key-name increment member
給成員加上increment。
-
ZCOUNT key-name min max
返回值介於min和max之間的成員數量。
-
ZRANK key-name member
返回成員的排名。
-
ZSCORE key-name member
返回成員的分值。
-
ZRANGE key-name start stop [WITHSCORES]
返回排名介於start到stop的成員,若是WITHSCORES爲True的話,則分值也一塊兒返回,若是stop爲-1的話,則返回所有。
-
ZREVRANK key-name member
分紅REV和RANK來看,REV:成員從小到大進行排列,RANK:返回具體的排名位置。
-
ZREVRANGE key-name start stop [WITHSCORES]
分紅REV和RANGE來看,REV:成員從小到大進行排列,RANGE:返回具體的排名位置。
-
ZRANGEBYSCORE key-name min max [WITHSCORES] [LIMIT offset count]
返回分值介於min到max之間到全部成員,能夠指定返回從偏移量開始的count個成員。
-
ZREVRANGEBYSCORE key-name max min [WITHSCORES] [LIMIT offset count]
返回同上,不過是成員已經從大到小進行排列,注意這裏是max-min。
-
ZREMRANGEBYRANK key-name start stop
將ZRANGEBYRANK返回的成員刪除掉。
-
ZREMRANGEBYSCORE key-name min max [WITHSCORES] [LIMIT offset count]
一樣的道理,將ZRANGEBYSCORE返回的成員刪除掉。
-
ZINTERSTORE dest-key key-name [key-name...]
和集合相似,分紅INTER和STORE來看,也就是將INTER的結果存儲在dest-key中。
-
ZUNIONSTORE dest-key key-name [key-name...]
和集合相似,分紅UNION和STORE來看,也就是將UNION的結果存儲在dest-key中。
散列
Hash,因此以H開頭
-
HMSET key-name key value [key value...]
設置一個或者多個鍵值對。
-
HMGET key-name key...
能夠獲取多個鍵對應的值。
-
HDEL key-name key...
刪除多個鍵值對,返回成功刪除的數量。
-
HLEN key-name
返回鍵值對數量
-
HEXIST key-name key
判斷該鍵值是否存在於散列中。
-
HKEYS key-name
獲取散列全部的鍵。
-
HVALS key-name
獲取散列全部的值。
-
HGETALL key-name
獲取全部的鍵值對。
-
HINCREBY key-name key increment
將key保存的值加上increment。
-
HINCREBYFLOAT key-name key increment
將key保存的值加上浮點數increment。