Redis的五大數(shù)據(jù)類(lèi)型
- String(字符串)
string是redis最基本的類(lèi)型秆乳,你可以理解成與Memcached一模一樣的類(lèi)型缀程,一個(gè)key對(duì)應(yīng)一個(gè)value诲泌。
string類(lèi)型是二進(jìn)制安全的妻坝。意思是redis的string可以包含任何數(shù)據(jù)伸眶。比如jpg圖片或者序列化的對(duì)象 。
string類(lèi)型是Redis最基本的數(shù)據(jù)類(lèi)型刽宪,一個(gè)redis中字符串類(lèi)的value最大是512M - Hash(哈希)
Redis hash 是一個(gè)鍵值對(duì)集合厘贼。
Redis hash是一個(gè)string類(lèi)型的field和value的映射表,hash特別適合用于存儲(chǔ)對(duì)象圣拄。
類(lèi)似Java里面的Map<String,Object>
- List(列表)
Redis 列表是簡(jiǎn)單的字符串列表嘴秸,按照插入順序排序。你可以添加一個(gè)元素導(dǎo)列表的頭部(左邊)或者尾部(右邊)庇谆。
它的底層實(shí)際是個(gè)鏈表岳掐。 - Set(集合)
Redis的Set是string類(lèi)型的無(wú)序集合。它是通過(guò)HashTable實(shí)現(xiàn)實(shí)現(xiàn)的饭耳, - zset(sorted set:有序集合)
Redis zset 和 set 一樣也是string類(lèi)型元素的集合,且不允許重復(fù)的成員岩四。
不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類(lèi)型的分?jǐn)?shù)。
redis正是通過(guò)分?jǐn)?shù)來(lái)為集合中的成員進(jìn)行從小到大的排序哥攘。zset的成員是唯一的,但分?jǐn)?shù)(score)卻可以重復(fù)。
關(guān)于key
的常用命令
-
keys key規(guī)則
:查看當(dāng)前數(shù)據(jù)庫(kù)符合規(guī)則的所有的key -
exists key的名字
:判斷某個(gè)key是否存在當(dāng)前數(shù)據(jù)庫(kù) -
move key db
:從當(dāng)前數(shù)據(jù)庫(kù)移除該key到指定數(shù)據(jù)庫(kù)中材鹦,成功則返回1逝淹,失敗則返回0 -
expire key 秒數(shù)
:為指定的key設(shè)置過(guò)期時(shí)間 -
ttl key
:查看還有多少秒過(guò)期,-1表示永不過(guò)期桶唐,-2表示已過(guò)期/不存在栅葡,數(shù)字則表示還有多少秒過(guò)期 -
type key
:查看指定的key的類(lèi)型 -
del key
:刪除指定的key
key相關(guān)命令
關(guān)于string
類(lèi)型的value的常用命令
單key單value
set/get/del/append/strlen
:添加、獲取尤泽、刪除欣簇、追加、長(zhǎng)度Incr/decr/incrby x/decrby x
:加1坯约、減1熊咽、加N、減N(字符串內(nèi)容是數(shù)字才可使用)getrange n m /setrange n m
:獲取指定區(qū)間范圍內(nèi)的值闹丐,類(lèi)似between......and的關(guān)系横殴,從零到負(fù)一表示全部,如果范圍內(nèi)沒(méi)值卿拴,則返回空字符串""
-
setex(set with expire)鍵秒值
:設(shè)置帶過(guò)期時(shí)間的key衫仑,動(dòng)態(tài)設(shè)置梨与。
setex -
setnx(set if not exist)
:在 key 不存在時(shí),設(shè)置 key 的值文狱。(如果key還有效存在粥鞋,則報(bào)錯(cuò))
setnx mset
:同時(shí)設(shè)置一個(gè)或多個(gè) key-value 對(duì)mget
:同時(shí)獲取一個(gè)或多個(gè) key的值msetnx
:同時(shí)設(shè)置一個(gè)或多個(gè) key-value 對(duì),當(dāng)且僅當(dāng)所有給定 key 都不存在才成功-
getset(先get再set)
:將給定 key 的值設(shè)為 value 瞄崇,并返回 key 的舊值(old value)呻粹。
getset
關(guān)于list
類(lèi)型的value的常用命令
單key多value
-
lpush/rpush/lrange n m /llen
:從左邊增加、從右邊增加杠袱、遍歷獲取key的值尚猿、長(zhǎng)度計(jì)算
-
lpop/rpop
:刪除列表左邊的值,并返回值楣富、刪除列表右邊的值凿掂,并返回值
lindex key index
:通過(guò)索引獲取列表中的元素-
lrem key n value
:刪列表中n個(gè)value
lrem -
ltrim key 開(kāi)始index 結(jié)束index
:截取指定范圍的值后再賦值給key
ltrim -
rpoplpush 源列表 目的列表
:移除源列表右邊的元素,并把該元素添加到目的列表的左邊纹蝴,并返回目的列表的值
rpoplpush -
lset key index value
:往list指定的index插入value
lset -
linsert key before/after 值1 值2
:在list中庄萎,某個(gè)已有值1的前面/后面再添加指定的值2
linsert -
性能總結(jié)
list數(shù)據(jù)類(lèi)型耀怜,實(shí)際上是一個(gè)字符串鏈表蛙吏,left辽故、right都可以插入添加呜袁;
如果鍵不存在昵宇,則創(chuàng)建新的鏈表捂蕴;
如果鍵已存在形葬,則新增內(nèi)容竖幔;
如果值全移除切黔,對(duì)應(yīng)的鍵也就消失了砸脊。
鏈表的操作無(wú)論是頭和尾效率都極高,但假如是對(duì)中間元素進(jìn)行操作纬霞,效率就很差
list相關(guān)命令1
list相關(guān)命令2
關(guān)于set
類(lèi)型的value的常用命令
單key多value(value唯一)
sadd key value/smembers key
:添加凌埂、獲取-
sismember key value1
:查詢(xún)value1是否存在該key的value中,存在則返回1诗芜,不存在則返回0
-
scard key
:獲取集合里元素個(gè)數(shù)
-
srem key value
:刪除集合中的指定元素
-
srandmember key N
:從集合中瞳抓,隨機(jī)取出N個(gè)元素;如果超出元素最大個(gè)數(shù)伏恐,則全部去除孩哑;如果寫(xiě)值是負(fù)數(shù),比如-4脐湾,則去除4個(gè)臭笆,但是可能有重復(fù)值
-
spop key
:隨機(jī)刪除一個(gè)元素,并返回
-
smove key1 key2 在key1里某個(gè)值
:將key1中的指定值移動(dòng)到key2中
-
sdiff key1 key2
:返回兩個(gè)集合的差集,存在key1集合中愁铺,而不存在key2集合中的元素
sinter key1 key2
:返回兩個(gè)集合的交集-
sunion key1 key2
:返回兩個(gè)集合的并集
set相關(guān)命令
關(guān)于hash
類(lèi)型的value的常用命令
KV模式不變鹰霍,但V是一個(gè)鍵值對(duì)
-
hset/hget/hmset/hmget/hgetall/hdel
:增加、獲取茵乱、批量增加茂洒、批量獲取、獲取全部瓶竭、刪除指定V
hlen key
:查詢(xún)值的長(zhǎng)度-
hexists key
:判斷V中的key是否存在于hash中督勺,存在則返回1,否則返回0
-
hkeys/hvals
:返回hash的V中所有的key斤贰、返回hash的V中所有的value -
hincrby
:給指定的hash的V中的數(shù)值型value增加對(duì)應(yīng)的整數(shù)值 -
hincrbyfloat
:給指定的hash的V中的數(shù)值型value增加對(duì)應(yīng)的float值 -
hsetnx
:給過(guò)期或不存在的key賦值智哀,存在則無(wú)效
hash相關(guān)命令
關(guān)于zset(sorted set)
類(lèi)型的value的常用命令
在set基礎(chǔ)上,加一個(gè)score值荧恍。之前set是k1 v1 v2 v3
瓷叫,現(xiàn)在zset是k1 score1 v1 score2 v2
。
zadd key score1 value1 score2 value2...
:增加zset-
zrange n m withscores
:獲取zset的值送巡,withscores是可選項(xiàng)摹菠,是否顯示值的score
-
zrangebyscore key (開(kāi)始score 結(jié)束score limit n m
:根據(jù)score范圍取值,如果score前面加上(
骗爆,則代表包含的意思次氨,否則是大于或小于;limit n m
則代表起始index和步長(zhǎng)摘投;+inf
代表是一直到最后的score
-
zrem key 某score下對(duì)應(yīng)的value值
:刪除zset下某個(gè)value值
zerm -
zcard
:獲取集合中元素個(gè)數(shù)
zcard -
zcount key score1 score2
:獲取分?jǐn)?shù)區(qū)間內(nèi)元素個(gè)數(shù)煮寡,zcount key 開(kāi)始分?jǐn)?shù)區(qū)間 結(jié)束分?jǐn)?shù)區(qū)間
zcount
-
zrank key values值
:正序獲取value在zset中的下標(biāo)位置
zrank
-
zscore key values
:按照值獲得對(duì)應(yīng)的分?jǐn)?shù)
zscore
-
zrevrank key values值
:作用是逆序獲得下標(biāo)值
zrevrank -
zrevrange
:根據(jù)索引區(qū)間,倒序獲取值
zrevrange -
zrevrangebyscore key 結(jié)束score 開(kāi)始score
:注意這里的分?jǐn)?shù)是反著寫(xiě)的犀呼,根據(jù)倒序的分?jǐn)?shù)獲取值
zrevrangebyscore