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(有序集合);安全
字符串:包括字符串、整數和浮點數;服務器
列表:一個鏈表,鏈表上面的每一個結點都是一個字符串,其聽從隊列的訪問格式-先進先出,也就是從鏈表的結尾進行插入,鏈表的頭部進行彈出;數據結構
集合:裏面是一個容器,他不容許存在相同的元素,每一個值都是獨一無二的;app
哈希:是一個鍵值對組合而成的無序散列表,其的鍵一樣是不容許重複的;分佈式
有序集合:是在集合的基礎之上進行了排序;ide
在瞭解那五個操做相關的命令以前,須要先了解關於鍵的相關的命令:memcached
Key
DEL key大數據
移除給定的一個或者多個key。
KEYS pattern
查找符合給定模式的key,注意其匹配的模式怎麼使用,包括了?、*、[]等等。
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] [STOREdestination]
這個方法只能用在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。