本篇內(nèi)容主要講解“redis數(shù)據(jù)類型strings的詳細(xì)介紹”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“redis數(shù)據(jù)類型strings的詳細(xì)介紹”吧!
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供沅江網(wǎng)站建設(shè)、沅江做網(wǎng)站、沅江網(wǎng)站設(shè)計、沅江網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、沅江企業(yè)網(wǎng)站模板建站服務(wù),10年沅江做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
string是最簡單的類型,你可以理解成與Memcached一模一樣的類型,一個key對應(yīng)一個value,其上支持的操作與Memcached的操作類似。但它的功能更豐富。
redis采用結(jié)構(gòu)sdshdr和sds封裝了字符串,字符串相關(guān)的操作實現(xiàn)在源文件sds.h/sds.c中。在Redis中字符串類型的Value最多可以容納的數(shù)據(jù)長度是512M
在Redis中是二進(jìn)制安全的,這便意味著該類型可以接受任何格式的數(shù)據(jù),如JPEG圖像數(shù)據(jù)或Json對象描述信息等
數(shù)據(jù)結(jié)構(gòu)定義如下:
typedefchar*sds;
structsdshdr{
longlen;
longfree;
charbuf[];
};
1.1. SET
Set key value [EX seconds] [PXmilliseconds] [NX|XX]
將字符串值value關(guān)聯(lián)到key。如果key已經(jīng)持有其他值,SET 就覆寫舊值,無視類型。對于某個原本帶有生存時間(TTL)的鍵來說,當(dāng) SET 命令成功在這個鍵上執(zhí)行時, 這個鍵原有的 TTL 將被清除。
可選參數(shù)
從 Redis 2.6.12 版本開始,SET 命令的行為可以通過一系列參數(shù)來修改:
EXsecond:設(shè)置鍵的過期時間為 second秒。 SET key value EX second效果等同于SETEXkey second value。
PXmillisecond:設(shè)置鍵的過期時間為 millisecond毫秒。 SET key value PX millisecond效果等同于PSETEXkey millisecond value。
NX:只在鍵不存在時,才對鍵進(jìn)行設(shè)置操作。SETkey value NX效果等同于 SETNX key value。
XX:只在鍵已經(jīng)存在時,才對鍵進(jìn)行設(shè)置操作。
#賦值與取值
127.0.0.1:6379> set dbredis
OK
127.0.0.1:6379> get db
"redis"
#使用ex選項
127.0.0.1:6379> set dbredis ex 20
OK
127.0.0.1:6379> ttl db
(integer) 16
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> ttl db
(integer) 5
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> get db
(nil)
#使用 PX 選項
127.0.0.1:6379>set db redis px 20000
OK
127.0.0.1:6379>PTTL db
(integer)15674
127.0.0.1:6379>PTTL db
(integer)8974
127.0.0.1:6379>PTTL db
(integer)8045
127.0.0.1:6379>get db
"redis"
127.0.0.1:6379>PTTL db
(integer)2482
127.0.0.1:6379>get db
"redis"
127.0.0.1:6379>get db
(nil)
#使用 NX 選項
127.0.0.1:6379>set db oracle NX
OK
127.0.0.1:6379>get db
"oracle"
127.0.0.1:6379>set db redis NX ---鍵存在,失敗
(nil)
127.0.0.1:6379>get db
"oracle"
#使用 XX 選項
127.0.0.1:6379>exists name
(integer)0
127.0.0.1:6379>get name
(nil)
127.0.0.1:6379>set name hunt1574 XX ---鍵不存在,失敗
(nil)
127.0.0.1:6379>set name redis
OK
127.0.0.1:6379>set name hunt1574 XX
OK
127.0.0.1:6379>get name
"hunt1574"
Setex key seconds value
將值 value 關(guān)聯(lián)到 key ,并將key 的生存時間設(shè)為 seconds (以秒為單位)。
如果 key 已經(jīng)存在, SETEX 命令將覆寫舊值。
這個命令類似于以下兩個命令:
SETkey value
EXPIREkey seconds # 設(shè)置生存時間
不同之處是, SETEX 是一個原子性(atomic)操作,關(guān)聯(lián)值和設(shè)置生存時間兩個動作會在同一時間內(nèi)完成,該命令在 Redis 用作緩存時,非常實用。
#key不存在賦值
127.0.0.1:6379>EXISTS user
(integer)0
127.0.0.1:6379>setex user 30 root
OK
127.0.0.1:6379>get user
"root"
127.0.0.1:6379>ttl user
(integer)15
127.0.0.1:6379>get user
(nil)
#key存在賦值
127.0.0.1:6379>setex user 20 admin
OK
127.0.0.1:6379>get user
"admin"
127.0.0.1:6379>ttl user
(integer)14
127.0.0.1:6379>get user
(nil)
SETNX key value
將 key 的值設(shè)為 value ,當(dāng)且僅當(dāng) key 不存在。
若給定的 key 已經(jīng)存在,則 SETNX 不做任何動作。
SETNX是『SET if Not eXists』(如果不存在,則 SET)的簡寫。
#賦值與取值
127.0.0.1:6379>EXISTS www
(integer)0
127.0.0.1:6379>setnx www code.google.com
(integer)1
127.0.0.1:6379>setnx www redis.io
(integer)0
127.0.0.1:6379>get www
"code.google.com"
127.0.0.1:6379>
SETRANGE key offset value
用 value 參數(shù)覆寫(overwrite)給定offset的 key 所儲存的字符串值
127.0.0.1:6379>set www code.google.com
OK
127.0.0.1:6379>get www
"code.google.com"
127.0.0.1:6379>SETRANGE www 0 mail
(integer)15
127.0.0.1:6379>get www
"mail.google.com"
127.0.0.1:6379>SETRANGE www 0 gmail
(integer)15
127.0.0.1:6379>get www
"gmailgoogle.com"
MSET key value [key value ...]
同時設(shè)置一個或多個 key-value 對。
如果某個給定 key 已經(jīng)存在,那么 MSET 會用新值覆蓋原來的舊值,如果這不是你所希望的效果,請考慮使用 MSETNX 命令:它只會在所有給定 key 都不存在的情況下進(jìn)行設(shè)置操作。
MSET是一個原子性(atomic)操作,所有給定 key 都會在同一時間內(nèi)被設(shè)置,某些給定 key 被更新而另一些給定 key 沒有改變的情況,不可能發(fā)生。
#賦值與取值
127.0.0.1:6379>mset os "linux" db "redis" date "2015-03-17"
OK
127.0.0.1:6379>mget os db date
1)"linux"
2)"redis"
3)"2015-03-17"
#值覆蓋
127.0.0.1:6379>mset os "linux" db "oracle" date "2015-03-17"
OK
127.0.0.1:6379>mget os db date
1)"linux"
2)"oracle"
3)"2015-03-17"
127.0.0.1:6379>
MSETNX key value [key value ...]
同時設(shè)置一個或多個 key-value 對,當(dāng)且僅當(dāng)所有給定 key 都不存在。
即使只有一個給定 key 已存在,MSETNX 也會拒絕執(zhí)行所有給定 key 的設(shè)置操作。MSETNX是原子性的,因此它可以用作設(shè)置多個不同 key 表示不同字段(field)的唯一性邏輯對象(unique logic object),所有字段要么全被設(shè)置,要么全不被設(shè)置。
#賦值與取值
127.0.0.1:6379>mget os db date
1)"linux"
2)"redis"
3) "2015-03-17"
127.0.0.1:6379>msetnx os "linux" db "oracle" date "2015-03-17"
(integer)0
127.0.0.1:6379>mget os db date
1)"linux"
2)"redis"
3)"2015-03-17"
127.0.0.1:6379>
GET key
返回 key 所關(guān)聯(lián)的字符串值。
如果 key 不存在那么返回特殊值nil 。
假如 key 儲存的值不是字符串類型,返回一個錯誤,因為 GET 只能用于處理字符串值。
127.0.0.1:6379>set dbname redis
OK
127.0.0.1:6379>get dbname
"redis"
127.0.0.1:6379>get dbversion
(nil)
127.0.0.1:6379>lpush db redis MySQL MongoDB
(integer)3
127.0.0.1:6379>get db
(error)WRONGTYPE Operation against a key holding the wrong kind of value
MGET key [key ...]
返回所有(一個或多個)給定 key 的值。
如果給定的 key 里面,有某個 key 不存在,那么這個 key 返回特殊值 nil 。因此,該命令永不失敗。
#賦值與取值
127.0.0.1:6379>set date 2015-03-17
OK
127.0.0.1:6379>set time 10:00
OK
127.0.0.1:6379>mget date time
1)"2015-03-17"
2)"10:00"
127.0.0.1:6379>mget date time week ---week不存在,返回nil
1)"2015-03-17"
2)"10:00"
3)(nil)
GETRANGE key startend
返回 key 中字符串值的子字符串,字符串的截取范圍由 start 和 end 兩個偏移量決定(包括start 和 end 在內(nèi))。負(fù)數(shù)偏移量表示從字符串最后開始計數(shù), -1 表示最后一個字符, -2 表示倒數(shù)第二個,以此類推。范圍超過字符串最大下標(biāo)值以最大下標(biāo)值為準(zhǔn)。
#賦值與取值
127.0.0.1:6379>set www redis.io
OK
127.0.0.1:6379>GETRANGE www 0 4
"redis"
127.0.0.1:6379>GETRANGE www -2 -1
"io"
127.0.0.1:6379>GETRANGE www -100 -1
"redis.io"
GETSET key value
將給定 key 的值設(shè)為 value ,并返回key 的舊值(old value)。
當(dāng) key 存在但不是字符串類型時,返回一個錯誤。
127.0.0.1:6379>getset dbname mysql
(nil)
127.0.0.1:6379>get dbname
"mysql"
127.0.0.1:6379>getset dbname redis
"mysql"
127.0.0.1:6379>get dbname
"redis"
INCR key
將 key 中儲存的數(shù)字值增一。
如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執(zhí)行 INCR 操作。如果值包含錯誤的類型,或字符串類型的值不能表示為數(shù)字,那么返回一個錯誤。
本操作的值限制在 64 位(bit)有符號數(shù)字表示之內(nèi)。
127.0.0.1:6379>EXISTS pages
(integer)0
127.0.0.1:6379>incr pages
(integer)1
127.0.0.1:6379>get pages
"1"
127.0.0.1:6379>set rows 0
OK
127.0.0.1:6379>incr rows
(integer)1
127.0.0.1:6379>incr rows
(integer)2
127.0.0.1:6379>incr rows
(integer)3
127.0.0.1:6379>get rows
"3"
127.0.0.1:6379>
INCRBY keyincrement
將 key 所儲存的值加上增量 increment 。
如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執(zhí)行 INCRBY 命令。
如果值包含錯誤的類型,或字符串類型的值不能表示為數(shù)字,那么返回一個錯誤。
本操作的值限制在 64 位(bit)有符號數(shù)字表示之內(nèi)
#鍵存在
127.0.0.1:6379>get rows
"3"
127.0.0.1:6379>INCRBY rows 3
(integer)6
127.0.0.1:6379>INCRBY rows 3
(integer)9
127.0.0.1:6379>INCRBY rows 3
(integer)12
#鍵不存在
127.0.0.1:6379>get num
(nil)
127.0.0.1:6379>INCRBY num -2
(integer)-2
127.0.0.1:6379>INCRBY num -2
(integer)-4
127.0.0.1:6379>INCRBY num -2
(integer)-6
INCRBYFLOAT keyincrement
為 key 中所儲存的值加上浮點數(shù)增量 increment 。
如果 key 不存在,那么 INCRBYFLOAT 會先將 key 的值設(shè)為 0 ,再執(zhí)行加法操作。
如果命令執(zhí)行成功,那么 key 的值會被更新為(執(zhí)行加法之后的)新值,并且新值會以字符串的形式返回給調(diào)用者。
無論是 key 的值,還是增量 increment ,都可以使用像 2.0e7 、 3e5 、 90e-2 那樣的指數(shù)符號(exponential notation)來表示,但是,執(zhí)行 INCRBYFLOAT 命令之后的值總是以同樣的形式儲存,也即是,它們總是由一個數(shù)字,一個(可選的)小數(shù)點和一個任意位的小數(shù)部分組成(比如 3.14 、 69.768 ,諸如此類),小數(shù)部分尾隨的 0 會被移除,如果有需要的話,還會將浮點數(shù)改為整數(shù)(比如 3.0 會被保存成 3 )。
127.0.0.1:6379>set price 45.99
OK
127.0.0.1:6379>INCRBYFLOAT price 4.5
"50.49"
127.0.0.1:6379>INCRBYFLOAT price 4.5
"54.99"
127.0.0.1:6379>get num
(nil)
127.0.0.1:6379>INCRBYFLOAT num 5.3
"5.3"
127.0.0.1:6379>INCRBYFLOAT num 5.3
"10.6"
DECR key
將 key 中儲存的數(shù)字值減一。
如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執(zhí)行 DECR 操作。
如果值包含錯誤的類型,或字符串類型的值不能表示為數(shù)字,那么返回一個錯誤。
127.0.0.1:6379>set price 398.99
OK
127.0.0.1:6379>decr price
(error)ERR value is not an integer or out of range
127.0.0.1:6379>set pages 98
OK
127.0.0.1:6379>decr pages
(integer)97
127.0.0.1:6379>decr pages
(integer)96
DECRBY keydecrement
將 key 所儲存的值減去減量 decrement 。
如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執(zhí)行 DECRBY 操作。
如果值包含錯誤的類型,或字符串類型的值不能表示為數(shù)字,那么返回一個錯誤。
127.0.0.1:6379>get pages
"96"
127.0.0.1:6379>decrby pages 5
(integer)91
127.0.0.1:6379>decrby pages 5
(integer)86
127.0.0.1:6379>decrby pages -5
(integer)91
127.0.0.1:6379>decrby pages -5
(integer)96
127.0.0.1:6379>
APPEND key value
如果 key 已經(jīng)存在并且是一個字符串, APPEND 命令將 value 追加到 key 原來的值的末尾。
如果 key 不存在, APPEND 就簡單地將給定 key 設(shè)為 value ,就像執(zhí)行 SET key value 一樣。
127.0.0.1:6379> get db
(nil)
127.0.0.1:6379> APPENDdb redis
(integer) 5
127.0.0.1:6379> APPENDdb .io
(integer) 8
127.0.0.1:6379> get db
"redis.io"
127.0.0.1:6379>
STRLEN key
返回 key 所儲存的字符串值的長度。
當(dāng) key 儲存的不是字符串值時,返回一個錯誤。
127.0.0.1:6379> getpages
"96"
127.0.0.1:6379> STRLENpages
(integer) 2
127.0.0.1:6379> get db
"redis.io"
127.0.0.1:6379> STRLENdb
(integer) 8
127.0.0.1:6379>
到此,相信大家對“redis數(shù)據(jù)類型strings的詳細(xì)介紹”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!