Redis支持五種數(shù)據(jù)類型:
string,hash,list,set, zset(sorted set:有序集合)等
1. String
1.1 簡介
string是redis最基本的類型,一個key對應(yīng)一個value。
string類型是二進(jìn)制安全的,意思是redis的string可以包含任何數(shù)據(jù)。比如jpg圖片或者序列化對象。
string類型是Redis最基本的數(shù)據(jù)類型,一個鍵最大能存儲512MB。
- 二進(jìn)制安全是指,在傳輸數(shù)據(jù)時,保證二進(jìn)制數(shù)據(jù)的信息安全,也就是不被篡改、破譯等,如果被攻擊,能夠及時檢測出來。
-二進(jìn)制安全特點(diǎn):
1.編碼、解碼發(fā)生在客戶端完成,執(zhí)行效率高
2.不需要頻繁的編解碼,不會出現(xiàn)亂碼
1.2 String命令
賦值命令
SET KEY_NAME VALUE
Redis SET 命令用于設(shè)置給定key的值。如果key已經(jīng)存儲值,SET就覆寫舊值,且無視類型
SETNX KEY VALUE
只有在key不存在時設(shè)置key的值,SETNX(set if not exists)命令在指定的key不存在時,為key設(shè)置指定的值
MSET KEY VALUE [key value...]
同時設(shè)置一個或多個key-value對
取值語法:
GET KEY NAME
Redis Get命令用于獲取指定key的值。如果key不存在,返回nil。若不是字符串類型,返回一個錯誤。
__GETRANGE KEY START END __
用于獲取存儲在指定key中字符串的子字符串。字符串的截取范圍由start和end兩個偏移量界定(包括start和end在內(nèi))
GETBIT KEY OFFSET
對key所存儲的字符串值,獲取指定偏移量上的位(bit)
MGET KEY1 [key2...]
獲取所有(一個或多個)給定key的值
getset key_name value
getset命令用于設(shè)置指定key的值,并返回key的舊值,當(dāng)key不存在時,返回nil
STRLEN KEY
返回key所存儲的字符串值的長度
刪除語法
DEL KEY_NAME
刪除指定的key,如果存在,返回值數(shù)字類型。
自增/自減
INCR KEY_NAME
incr命令將key中存儲的數(shù)字值增1,如果key不存在,那么key的值會先被初始化為0,然后再執(zhí)行Incr操作。
自增:INCRBY KEY_NAME 增量值
Incrby命令將key中存儲的數(shù)字加上指定的增量值
自減:DECR KEY_NAME 或 DECYBY KEY_NAME 減值
decr命令將key中存儲的數(shù)字減1
字符串拼接:APPEND KEY_NAME VALUE
Append命令用于 為指定的key追加至末尾,如果不存在,為其賦值
1.3 應(yīng)用場景
1.3.1 String通常用于保存單個字符串或JSON字符串?dāng)?shù)據(jù)
1.3.2 因String是二進(jìn)制安全的,所以可以把一個圖片文件的內(nèi)容作為字符串來存儲
1.3.3 計數(shù)器(常規(guī)key-value緩存應(yīng)用。常規(guī)計數(shù):微博數(shù),粉絲數(shù))Incr,INCRBY,DECR,DECRBY等指令具有原子操作的特性,所以常用來實(shí)現(xiàn)原子計數(shù)效果。如:某場景下,3個用戶讀取了mynum的值2,然后同時進(jìn)行了+1操作,那么最后mynum的值一定是5.
2.hash
2.1 應(yīng)用場景
2.1.1. 對數(shù)據(jù)量大的集合數(shù)據(jù)刪減
列表數(shù)據(jù)顯示,關(guān)注列表,粉絲列表,留言評價。。。分頁,熱點(diǎn)新聞(Top5)等。
利用LRANGE還可以很方便的實(shí)現(xiàn)分頁的功能,在博客系統(tǒng)中,每篇博文的評價也可以存入一個單獨(dú)的list中。
2.1.2. 任務(wù)對列功能
- (list通常用來實(shí)現(xiàn)一個消息隊列,而且可以確保先后順序,不必像Mysql那樣還需要通過ORDER BY來進(jìn)行排序)
- 任務(wù)隊列介紹(生產(chǎn)者和消費(fèi)者模式):
在處理Web客戶端發(fā)送的命令請求時,某些操作的執(zhí)行時間可能會比我們預(yù)期的更長一些,通過將待執(zhí)行任務(wù)的相關(guān)信息放入隊列里面,并在之后對隊列進(jìn)行處理,用戶可以推遲執(zhí)行那些需要一段時間才能完成的操作,這種將工作交給任務(wù)處理起來執(zhí)行的做法被稱為任務(wù)隊列(task queue).
PROPLPUSH SOURCE DESTINATION
一處列表的最后一個元素,并將該元素添加到另一個列表并返回
常用案例:
訂單系統(tǒng)的下單流程,用戶系統(tǒng)登陸注冊短信等
3.set
應(yīng)用場景
常用于:對兩個集合間的數(shù)據(jù)進(jìn)行交集,并集,差集計算。
- 以非常方便的實(shí)現(xiàn)如共同關(guān)注,共同喜好,二度好友等功能。對上面的所有集合操作,你還可以使用不同的命令選擇將結(jié)果返回給客戶端還是從一個集合到一個新的集合。
- 利用唯一性,可以統(tǒng)計訪問網(wǎng)站的所有獨(dú)立IP。
4.zset
應(yīng)用場景
- 排行榜