目錄
1.set & get
①set指令
②get指令
2.keys
3.del
4.expire & setex & psetex
5.ttl
6.exists
7.setnx
8.flushall
?9.object encoding
10. type
1.set & get
????????set & get指令中key和value都是字符串,但是不需要加單引號或雙引號。
? ? ? ? 需要補充的是我們輸入的value對于redis服務器而言是字符串,但是在存儲時服務器會按內容找合適的類型存儲。比如說當value是hello時,redis直接按短字符串(embstr)存;而value是數字時,redis服務器會把字符串轉化為對應整數類型(int)存儲。
①set指令
????????set用于設置key和value對應關系。使用時一個key只能對應一個value,其用法如下:
set? key? value? [ex t | px t]? [nx | xx]?
????????舉例如下(未加可選字段):
????????可選字段中ex和px用于設置過期時間,類比expire指令;ex以秒為單位,px以毫秒為單位。?
?使用時操作如下:
????????可選字段中nx代表當前數據庫中該key不存在時,可以設置該KV并返回1,若key已存在則不設置并返回0。xx與nx正相反,若數據庫中key存在則設置value并返回1,若key不存在則不設置并返回0。
????????簡單說就是nx用于創建KV,xx用于更新KV。舉例如下:
?????????當然,對同一個key進行多次set會更新對應value:
②get指令
????????get是根據key來獲取value。其用法如下:
get? key
????????返回:當KV映射關系存在時,自然是返回對應的value;當redis中沒有此映射時會返回nil,即空,可以類比C++中的NULL。需要注意的是,get要求value必須是string類型,否則報錯。
????????當存在對應KV映射時, 返回對應的value?:
????????當不存在對應KV映射時,返回nil:
????????當value非string類型時,報錯:?
2.keys
????????keys指令用于查詢key值,其使用方式如下:
keys? pattern
????????所謂pattern就是描述我想查詢的key是什么樣。如果是某個具體的key,那直接傳名字就好;如果是范圍查詢,那就通過通配符進行模糊匹配。
常見的通配符如下:
通配符 | 含義 | 使用方式 | 可匹配示例 |
? | 匹配任意一個或零個字符 | keys? ?ap?le | apple? aple |
* | 匹配任意多個字符 | keys? ?a*le | apaale apable |
[^ae] | 排除字符a和e | keys? ?ap[^p]le | aple apple |
[a-e] | 匹配a到e范圍內的任意一個字符 | keys? ?ap[a-z]le | apale apele |
[acexz] | 只能匹配acexz中任意一個字符 | keys? ?ap[puqt]le | apple? app |
示例如下:?
????????這里我們需要重點強調一下,keys * 操作可以查詢當前Redis中所有的key,但是,在實際工作中,keys *極其危險。因為這是一個o(n)的操作,而Redis是一個單線程服務器,所以當Redis中有大量的key時,進行全局查詢勢必會消耗大量時間,影響其他客戶端的操作請求,尤其是在生產環境中,這可能造成災難性的后果。比如說,當進行keys *操作后,其他客戶端隨后訪問Redis而發生超時,那么就會直接訪問mysql,但mysql運載能力有限,若訪問量太大很有可能直接就崩了。
3.del
? ? ? ? del指令用于刪除指定的KV鍵值對。在使用時可以一次性刪除多個key。
del? key1? key2? ...
? ? ? ?返回值是本次操作所刪key的個數。
????????對于del需要說明的是,相比于mysql數據庫,對Redis中的數據發生del誤操作的后果并沒有那么重,因為Redis可以理解為是mysql中部分數據在內存中的拷貝,只要“根基”還在就能恢復。當然,對任何數據庫中數據進行刪除都應三思后行。
4.expire & setex & psetex
? ? ? ? ①expire指令用于設置特定key的過期時間。設置成功返回,失敗返回0.
? ? ? ? ②setex指令是在設置KV時直接指定過期時間(秒為單位)。類比set的ex可選字段。
? ? ? ? ③psetex指令與setex相同,但過期時間以毫秒為單位。
expire? key? time
setex? key? time? vlaue? ?#一定要注意time 在前value在后
psetex? key? time??value
????????使用示例如下:?
? ? ? ? ?相比而言,setex和psetex用于既需要更新過期時間又需要更新(或創建KV)value的場景,而expire用于更新過期時間但不需要更新value的場景。
5.ttl
? ? ? ? ttl指令用于查詢特定key的過期時間。
? ? ? ? 返回值有三種類型,返回0及以上正數代表剩余時間,返回-2代表已經過期,返回-1代表所查詢的key沒有設置過期時間。
ttl? key
? ? ? ? 使用示例如下:
6.exists
? ? ? ? exists指令用于查詢key在數據庫中是否存在,查詢的時間復雜度是o(1)。該指令支持批量查詢,可一次性查詢多個key。其返回值是所查詢到存在的key的數量。
exists? key1? key2? ...
? ? ? ? 使用示例如下:?
7.setnx
? ? ? ? setnx指令即set指令+可選字段nx,用于確保所設置的KV在指令之前不存在。
? ? ? ? 當setnx執行成功時會返回1,失敗則返回0。
setnx? key? value
使用示例如下:
?
8.flushall
flushall指令一鍵刪除所有鍵值對。用前三思哦~
flushall?
?9.object encoding
該指令用于查詢value的編碼方式。(而非類型,類型用type查)
object encoding?key
使用示例如下:?
10. type
用于查詢value的類型。
type? key
使用示例如下:?
如有錯誤,敬請斧正?