最近因?yàn)橐恍┰蛴玫絉edis不得不學(xué)一點(diǎn),就想著記錄一下學(xué)習(xí)的印記。若有不對(duì)的地方還望指出為謝。
Redis (REmote DIctionary Server) 是用 C 語(yǔ)言開(kāi)發(fā)的一個(gè)開(kāi)源的高性能鍵值對(duì)(key-value)的非關(guān)系數(shù)據(jù)庫(kù),可以將存儲(chǔ)在內(nèi)存的鍵值對(duì)持久化到硬盤(pán),可使用復(fù)制特性來(lái)擴(kuò)展讀性能。
Redis提供了五種不同數(shù)據(jù)結(jié)構(gòu)類(lèi)型與鍵(key)的映射,分別是Strng(字符串)、hash(散列)、list(列表)、set(集合)、zset(有序集合)。如下:

相應(yīng)的命令:
Key的基本操作:
刪除指定key? ?del key
獲取key是否存在? exists key
獲取key的類(lèi)型? ? type key
改名rename key newkey ?renamenx key newkey
查詢(xún)key???keys pattern? ? ?pattern匹配規(guī)則:*匹配任意數(shù)量的任意符號(hào) ?配合一個(gè)任意符號(hào)[] 匹配一個(gè)指定符號(hào)

String類(lèi)型存儲(chǔ)的數(shù)據(jù):?jiǎn)蝹€(gè)數(shù)據(jù),最簡(jiǎn)單的數(shù)據(jù)存儲(chǔ)類(lèi)型,也是最常用的數(shù)據(jù)存儲(chǔ)類(lèi)型,一般做一些復(fù)雜的計(jì)數(shù)功能的緩存。
添加/修改數(shù)據(jù)? set key value ???????添加/修改多個(gè)數(shù)據(jù)? mset key1 value1 key2 value2 …
獲取數(shù)據(jù)? ?get key ?????????????????獲取多個(gè)數(shù)據(jù) mget key1 key2 …
刪除數(shù)據(jù)? del key
判定性添加數(shù)據(jù)? setnx key value
獲取數(shù)據(jù)字符個(gè)數(shù)(字符串長(zhǎng)度)?strlen key
表示運(yùn)行結(jié)果(integer) 0 → false 失敗、(integer) 1 → true 成功如下圖判斷性加入name zhangsan 時(shí)因?yàn)榍懊嬗辛斯史祷?integer) 0 表示已經(jīng)存在

hash類(lèi)型:底層使用哈希表結(jié)構(gòu)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)
如field數(shù)量較少,存儲(chǔ)結(jié)構(gòu)為類(lèi)數(shù)組結(jié)構(gòu)否則存儲(chǔ)結(jié)構(gòu)使用HashMap結(jié)構(gòu)
添加/修改數(shù)據(jù)hset key field value (hmset key field1 value1 field2 value2 … ?多個(gè)時(shí))
獲取數(shù)據(jù)hget key field ?hgetall key(hmget key field1 field2 …)
刪除數(shù)據(jù)hdel key field1 [field2]
獲取哈希表中字段的數(shù)量hlen key
獲取哈希表中是否存在指定的字段hexists key field



list類(lèi)型:保存多個(gè)數(shù)據(jù),底層使用雙向鏈表存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn),允許用戶(hù)從左右(left right)兩端推入或彈出數(shù)據(jù)
rpush key value [value...] 將一個(gè)或者多個(gè)值推入列表的右端
lpush key value [value...] 將一個(gè)或者多個(gè)值推入列表的左端
Rpop key 移除并返回列表最右端的元素
Lpop key 移除并返回列表最左端的元素
Lrange ?key ?start end 返回指定范圍內(nèi)的所以元素
Lindex key offset 返回偏移量為offset的元素

set類(lèi)型:以無(wú)序的的方式來(lái)存儲(chǔ)多個(gè)各不相同的元素,與hash存儲(chǔ)結(jié)構(gòu)完全相同,但是無(wú)法啟用hash中存儲(chǔ)值的空間。
Sadd ?key ?item ?[item.....] ???將元素加入到集合中并返回被添加元素當(dāng)中原本并不存在于集合里面的元素?cái)?shù)量
Smembers ?key 返回集合中所以的元素
Srem ?key ?item ?[item.....] ?移除元素返回移除數(shù)量
Sismember ?key item ?判斷集合是否包含item數(shù)據(jù)
Scard ?key ?獲取集合數(shù)據(jù)總量
Srandmember key ?[count] ??隨機(jī)獲取集合中指定數(shù)量的數(shù)據(jù)
Spop ?key ?[count] 隨機(jī)移除集合中的一個(gè)元素或者指定數(shù)量并返回移除的元素
Smove ?source-key ?dest-key item ?若是source-key包含item元素就從中移除item并加入到集合dest-key中,成功返回1否則返回0


求兩個(gè)集合的交、并、差集

sdiff ?key??[key ...]???返回存在于第一個(gè)集合但不存在與其他集合中的元素(數(shù)學(xué)上的差集運(yùn)算)
Sinter??key???[key ...?]??返回那些同時(shí)存在于所有集合中的元素(數(shù)學(xué)上的交集運(yùn)算)
Sunion??key??[key...]???返回那些至少存在于一個(gè)集合中的元素(數(shù)學(xué)上的并集計(jì)算)
求兩個(gè)集合的交、并、差集并存儲(chǔ)到指定集合中
sdiffstore dest-key ?key ?[key ...]?
sinterstore dest-key ?key ?[key ...]
sunionstore dest-key key??[key ...]

有序集合:存儲(chǔ)結(jié)構(gòu)和集合一樣但是集合是無(wú)序的,有序集合存儲(chǔ)著成員與分值之間的映射,并且提供了分值處理命令,以及根據(jù)分值大小有序地獲取或掃描成員和分值的命令。
zadd key??score member [score member ...]??將帶有給定分值的成員添加到有序集合里面
zrem key?member [member ...]???從有序集合里面移除給定的成員,并返回被移除成員的數(shù)量
zcard key???獲取集合數(shù)據(jù)總量
zrange key start stop ??返回有序集合中排名介于start和stop之間的成員
希望路過(guò)的大佬不要嫌棄,若有不對(duì)之處還希望指正為謝!@~@