Redis學習筆記——資料型別
五大資料型別
字串 String
(1)最基本的型別,一個Key對應一個Value。
(2)String型別是二進位制安全的,redis的String可以包含任何資料,比如Jpg圖片或者序列化的物件。
(3)一個Redis的字串value最多是512M(理論)。
雜湊 Hash(類似Map)
(1)hash是一個鍵值對集合。
(2)hash是一個string型別的field和value的對映表,hash特別適合用於儲存物件。
類似於Java裡面的Map<String,Object>
列表 List
Redis列表是簡單的字串列表,按照插入順序排序,你可以新增一個元素到列表的頭部或者尾部,底層實際是個連結串列。
集合 Set
Redis的Set是String型別的無序集合,他是通過HashTable實現的。
有序集合 Zset(Sorted Sets)
Redis的Zset和set一樣也是String型別元素的集合,且不允許重複的成員。
不同的是每個元素都會關聯一個double型別的分數
Redis正是通過分數來為集合中的成員進行從小到大的排序,Zset的成員是唯一的,但分數(Score)卻可以重複。
資料型別操作命令
鍵(KEY)
(1)keys *
,按條件列出Key值
(2)exists key的名字
,判斷某個key是否存在。
(3)move key db
,當前庫就沒有了,被移除了(移動、剪下功能)
(4)expire key 秒鐘
(5)
ttl key
,檢視還有多少秒過期,-1表示永不過期,-2表示已經過期(6)
type key
,檢視你的key是什麼型別
字串(String)
單值單Value。
(1)set、get、del、append、strlen,顧名思義:設定,獲取,刪除,追加,返回長度。
(2)incr、decr、incrby、decrby,一定要是數字才能進行加減
incr和decr遞增和遞減,incrby和decrby指定加減某數字,incrby k2 3
,即K2的Value加3。
(3)getrange、setrange:
getrange用法:getrange key start end
setrange用法:
setrange key offset value
,從offset位置開始設定value,覆蓋。
(4)setex、setnx:
setex用法:setex key second value
,(set with expire)設定一個自帶過期時間的KV對。
setnx用法:setnx key value
,(set in not exit)若不存在才設定,相比set不會覆蓋。
(5)mset、mget、msetnx:m是more的意思
mset用法:mset key value [key value ...]
,設定多個值
mget用法:mget key [key ...]
,獲取多個值
msetnx用法:msetnx key value [key value ...]
,同上,不覆蓋,注意失效一鍋端,其中一個存在,其他的都不會設定進去,有點類似於事務的提交和回滾。
列表(List)
單值多Value。
常用用法
(1)lpush、rpush、lrange:
lpush用法:lpush key value [value ...]
,左側(頭部)插入,使用lrange
後進先出倒序輸出。
rpush用法:rpush key value [value ...]
,右側(尾部)插入,使用lrange
先進先出正序輸出。
lrange用法:lrange key start end
,指定的Key的範圍從start到end輸出,型別必須為list,從頭部開始輸出。
(2)lpop、rpop:
lpop用法:lpop key
,彈出棧頂元素。
rpop用法,rpop key
,彈出棧尾元素。
(3)lindex:lindex key index
,按照索引下標獲取元素,從上到下(左到右,頭到尾)。
(4)llen:返回list長度。
(5)lrem:lrem key count value
,刪除count個value值,從頭到尾進行刪除,若沒有則返回0。
(6)ltrim:ltrim key start end
,擷取指定範圍的值後再賦值個Key,相當於subString。
(7)rpoplpush:rpoplpush source destination
,用源列表底部彈出,從頭部插入到目標列表。
(8)lset:lset key index value
,對某個索引的value進行設值。
(9)linset:linsert key BEFORE|AFTER pivot value
,在第一個pivot的前面或後面,插入一個value。
總結
它是一個字串連結串列,left、right都可以插入刪除。
若鍵不存在,建立新的連結串列;
若鍵已經存在,新增內容;
如果值全部移除,對應的鍵也就消失了;
連結串列的操作無論是頭和尾效率都極高,但對中間元素進行操作,效率就很低下。
集合(Set)
單值多Value。
常用用法
(1)sadd、smembers、sismember:
sadd用法:sadd key value [value ...]
,插入一個或多個值,會自動去掉重複的元素進行插入。
smembers用法:smembers key
,檢視某個key的set集合的值。
sismember用法:sismember key value
,檢視key對應的set集合是否包含value,包含返回1,否則返回0。
(2)scard:scard key
,獲取集合裡面元素的個數。
(3)srem:srem key value [value ...]
,刪除集合中的單個或多個元素。
(4)srandmember:srandmember key [count]
,從指定集合中隨機返回count個元素。
(5)spop:spop key [count]
,隨機出count個元素。
(6)smove:smove source destination value
,從source中刪除,增加到destination中。
(7)數學集合類:差集、交集、並集
差集sdiff:sdiff key [key ...]
,以第一個為全集,減去後面的元素。
交集sinter:sinter key [key ...]
,求幾個set集合的交集。
並集sunion:sunion key [key ...]
,求幾個set集合的並集。
雜湊(Hash)
KV模式不變,但是value是一個鍵值對。
常用用法
(1)hset、hget、hmset、hmget、hgetall、hdel
hset用法:hset key field value
,設定key對應的field的值。
hget用法:hget key field
,獲取key的field對應的value。
hmset用法:hmset key field value [ field value ...]
,設定key對應的多個field的值。
hmget用法:hmget key field [field ...]
,獲取key的多個field對應的value。
hgetall用法:hgetall key
,獲取對應key的全部[key value]。
hdel用法:hdel key field [field ...]
,刪除指定key的指定field(多個)的值。
(2)hlen:hlen key
,返回指定key對應的field的個數。
(3)hexists:hexists key filed
,判斷指定key是否具有某個field,有返回1,否則返回0。
(4)hkeys、hvals:
hkeys用法:hkeys key
,返回指定key對應的所有field。
hvals用法:hvalskey
,返回指定key的所有field的所有value。
(5)hincrby、hincrbyfloat:
hincrby用法:hincrby key field increment
,指定key的指定field進行加increment(整數,可以是負數,減法),必須是數字型別。
hincrbyfloat用法:hincrbyfloatkey field increment
,指定key的指定field進行加increment(小數,可以是負數,減法),必須是數字型別。
(6)hsetnx:hsetnx key field value
,沒有才設定,不會進行覆蓋(putIfAbsent)。
有序集合(Zset)
在set的基礎上,加了一個score值,如之前是set是k1 v1 v2 v3,現在zset是k1 score1 v1 score2 v2…。
常用用法
(1)zadd、zrange:
zadd用法:zadd key score value [score value ...]
,給value前面加上一個score值,用於排序。
zrange用法:zrange key start end [withscores]
,按照score從小到大輸出set集合,如果帶上引數withscroes
則輸出的是value+score,注意若分數相同,採用的穩定的(相對位置不變)排序演算法進行排序輸出。
(2)zrangebyscore:zrangbyscore key min max [withscores] [limit offset count]
,從min的分數到max的分數的value值進行輸出,注意:(
代表不包含,如zrangbyscore zset01 (60 (80
,意思是輸出分數大於60小於80的value值。limit相當於分頁(在有限的第一次結果集中再次擷取),從offset開始,輸出count個。
(3)zrem:zrem key member [member ...]
,從集合中刪除某個Value。
(4)zcard、zcount:
zcard用法:zcard key
,統計value的個數。
zcount用法:zcount key min max
,統計score從min到max的value個數,這裡同樣可以使用(
取開區間。
(5)zscore:zscore key value
,拿到該Value對應的score。
(6)zrank、zrevrank:
zrank用法:zrank key value
,拿到該Value對應的score的排名,即下標。
zrevrank用法:zrevrankkey value
,拿到該Value對應的score的逆序排名。
(7)zrevrange:zrevange key start end
,按照分數從大到小輸出set集合。
(8)zrevrangebyscore:zrevrangebyscore key max min
,score滿足從max到min的value進行輸出,同樣(
生效。