更多命令可以查看這個Redis 命令參考文檔:http://doc.redisfans.com
Redis支持五種數(shù)據(jù)類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)等。
String類型
簡介
- string類型是Redis最基本的數(shù)據(jù)類型,一個鍵最大能存儲512MB。
- string數(shù)據(jù)結(jié)構(gòu)是簡單的key-value類型,value不僅是string,也可以是數(shù)字,包含很多種類型的特殊類型,
- string類型是二進(jìn)制安全的。意思是redis的string可以包含任何數(shù)據(jù)。比如序列化的對象進(jìn)行存儲,比如一張圖片進(jìn)行二進(jìn)制存儲,比如一個簡單的字符串,數(shù)值等等。
常用命令
賦值語法:
| 命令 | 說明 |
|---|---|
| set key_name value | set命令用于設(shè)置給定key的值,如果已經(jīng)存儲值,就覆蓋,且無視類型 |
| setnx key value | 如果key不存在,則賦值并返回1,如果不存在不賦值,返回0 |
| setex key 10 xxx | 設(shè)置key的值為xxx,過期時間為10秒,10秒后key清除 |
| setrange key range value | 用 value 參數(shù)覆寫給定 key 所儲存的字符串值,從偏移量range開始 |
取值語法:
| 命令 | 說明 |
|---|---|
| get key | 獲取指定key的值,如果不存在返回 nil,如果key存儲不是字符串類型返回一個錯誤 |
| getrange key start end | 獲取存儲在指定key中字符串的子字符串,截取范圍由start和end兩個偏移量決定 (包含start和end) |
| getbit key offset | 對key所存儲的字符串值,獲取指定偏移量上的為(bit) |
| getset key value | 用于設(shè)置指定key的值,并返回key的舊值,當(dāng)key不存在時返回 nil |
刪值語法:
| 命令 | 說明 |
|---|---|
| del key1 key2 | 刪除指定的key,返回被刪除key的數(shù)量 |
| mset k1 v1 k2 v2 | 一次性寫入多個key |
| gset k1 v1 k2 v2 | 一次性讀取多個key的值 |
自增/自減:
| 命令 | 說明 |
|---|---|
| incr key | 將key中存儲的數(shù)值加1,如果key不存在,key的值被初始化為0并執(zhí)行incr操作 |
| incrby key increment | 將 key 所儲存的值加上增量 increment
|
| decr key | 將key中存儲的數(shù)值減1 |
| decrby key decrement | 將 key 所儲存的值減去減量 decrement
|
其他:
| 命令 | 說明 |
|---|---|
| append key value | 用于為指定的key追加value至末尾,如果不存在,為key賦值 |
| strlen key | 返回key所存儲的字符串值的長度 |
應(yīng)用場景
- String通常用于保存單個字符串或JSON字符串?dāng)?shù)據(jù)
- 因String是二進(jìn)制安全的,所以你完全可以把一個圖片文件的內(nèi)容作為字符串來存儲
- 計數(shù)器(常規(guī)key-value緩存應(yīng)用。常規(guī)計數(shù): 微博數(shù), 粉絲數(shù))
INCR等指令本身就具有原子操作的特性,所以我們完全可以利用redis的INCR、INCRBY、DECR、DECRBY等指令來實(shí)現(xiàn)原子計數(shù)的效果。
假如,在某種場景下有3個客戶端同時讀取了num的值(值為2),然后對其同時進(jìn)行了加1的操作,那么,最后num的值一定是5。 不少網(wǎng)站都利用redis的這個特性來實(shí)現(xiàn)業(yè)務(wù)上的統(tǒng)計計數(shù)需求。
Hash類型
簡介
Hash類型是String類型的field和value的映射表,或者說是一個String集合。
hash特別適合用于存儲對象,相比較而言,將一個對象類型存儲在Hash類型要存儲在String類型里占用更少的內(nèi)存空間,并方便對整個對象的存取。
可以看成具有KEY和VALUE的MAP容器,該類型非常適合于存儲值對象的信息, 如:username, age等。
該類型的數(shù)據(jù)僅占用很少的磁盤空間(相比于JSON)。Redis 中每個 hash 可以存儲 2的32次方 - 1 鍵值對(40多億)。
常用命令
賦值語法:
| 序號 | 說明 |
|---|---|
| hset key field value | 將哈希表 key 中的域field 的值設(shè)為 value |
| hmset key field value [field value ...] | 同時將多個field-value (域-值)對設(shè)置到哈希表 key 中,此命令會覆蓋哈希表中已存在的域,如果 key 不存在一個空哈希表被創(chuàng)建并執(zhí)行hmset操作 |
取值和刪值語法:
| 命令 | 說明 |
|---|---|
| hget key field | 返回哈希表 key 中給定域 field 的值。 |
| hmget key field [field....] | 返回哈希表 key 中,一個或多個給定域的值。如果給定的域不存在于哈希表,那么返回一個 nil 值。因?yàn)椴淮嬖诘膋ey 被當(dāng)作一個空哈希表來處理,所以對一個不存在的key進(jìn)行hmget操作將返回一個只帶有 nil 值的表 |
| hgetall key | 返回哈希表key 中,所有的域和值 |
| hdel key field [field....] | 刪除哈希表key 中的一個或多個指定域,不存在的域?qū)⒈缓雎浴?/td> |
其他語法:
| 命令 | 說明 |
|---|---|
| hsetnx key field value | 將哈希表 key 中的域 field 的值設(shè)置為 value ,當(dāng)且僅當(dāng) field 不存在 |
| hincyby key field increment | 為哈希表 key 中的域 field 的值加上增量 increment,增量可為負(fù)數(shù) |
| hincybyfloat key field increment | 為哈希表 key 中的域 field 加上浮點(diǎn)數(shù)增量 increment |
| hexists key field | 查看哈希表 key 中,給定域 field 是否存在 |
| hkeys key | 返回哈希表 key 中的所有域 |
| hlen key | 返回哈希表 key 中域的數(shù)量 |
應(yīng)用場景
存儲部分變更數(shù)據(jù),如用戶信息等
持續(xù)更新中。。。。。。