1. 程式人生 > >Redis學習筆記——資料型別

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 秒鐘

,為給定的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進行輸出,同樣(生效。