亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1984 | 回復(fù): 0
打印 上一主題 下一主題

[Redis] Redis實戰(zhàn)《紅丸出品》2.2 strings類型及操作 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-06-05 21:28 |只看該作者 |倒序瀏覽
2.2          strings類型及操作
string是最簡單的類型,你可以理解成與Memcached是一模一樣的類型,一個key對應(yīng)一個value,其上支持的操作與Memcached的操作類似。但它的功能更豐富。
string類型是二進制安全的。意思是redisstring可以包含任何數(shù)據(jù),比如jpg圖片或者序列化的對象。從內(nèi)部實現(xiàn)來看其實string可以看作byte數(shù)組,最大上限是1G字節(jié),下面是string類型的定義:
struct sdshdr {
  long len;
  long free;
  char buf[];
};

lenbuf數(shù)組的長度。
free是數(shù)組中剩余可用字節(jié)數(shù),由此可以理解為什么string類型是二進制安全的了,因為它本質(zhì)上就是個byte數(shù)組,當(dāng)然可以包含任何數(shù)據(jù)了
buf是個char數(shù)組用于存貯實際的字符串內(nèi)容,其實charc#中的byte是等價的,都是一個字節(jié)。
另外string類型可以被部分命令按int處理.比如incr等命令,如果只用string類型,redis就可以被看作加上持久化特性的memcached。當(dāng)然redisstring類型的操作比memcached還是多很多的,具體操作方法如下:
2.2.1 set
設(shè)置key對應(yīng)的值為string類型的value。
例如我們添加一個name= HongWan的鍵值對,可以這樣做:
redis 127.0.0.1:6379> set name HongWan
OK
redis 127.0.0.1:6379>

2.2.2 setnx
設(shè)置key對應(yīng)的值為string類型的value。如果key已經(jīng)存在,返回0,nxnot exist的意思。
例如我們添加一個name= HongWan_new的鍵值對,可以這樣做:
redis 127.0.0.1:6379> get name
"HongWan"
redis 127.0.0.1:6379> setnx name HongWan_new
(integer) 0
redis 127.0.0.1:6379> get name
"HongWan"
redis 127.0.0.1:6379>

由于原來name有一個對應(yīng)的值,所以本次的修改不生效,且返回碼是0。
2.2.3 setex
設(shè)置key對應(yīng)的值為string類型的value,并指定此鍵值對應(yīng)的有效期。
例如我們添加一個haircolor= red的鍵值對,并指定它的有效期是10秒,可以這樣做:
redis 127.0.0.1:6379> setex haircolor 10 red
OK
redis 127.0.0.1:6379> get haircolor
"red"
redis 127.0.0.1:6379> get haircolor
(nil)
redis 127.0.0.1:6379>

可見由于最后一次的調(diào)用是10秒以后了,所以取不到haicolor這個鍵對應(yīng)的值。
2.2.4 setrange
設(shè)置指定keyvalue值的子字符串。
例如我們希望將HongWan126郵箱替換為gmail郵箱,那么我們可以這樣做:
redis 127.0.0.1:6379> get name
"HongWan@126.com"
redis 127.0.0.1:6379> setrange name 8 gmail.com
(integer) 17
redis 127.0.0.1:6379> get name
"HongWan@gmail.com"
redis 127.0.0.1:6379>

其中的8是指從下標(biāo)為8(包含8)的字符開始替換
2.2.5 mset
一次設(shè)置多個key的值,成功返回ok表示所有的值都設(shè)置了,失敗返回0表示沒有任何值被設(shè)置。
redis 127.0.0.1:6379> mset key1 HongWan1 key2 HongWan2
OK
redis 127.0.0.1:6379> get key1
"HongWan1"
redis 127.0.0.1:6379> get key2
"HongWan2"
redis 127.0.0.1:6379>

2.2.6 msetnx
一次設(shè)置多個key的值,成功返回ok表示所有的值都設(shè)置了,失敗返回0表示沒有任何值被設(shè)置,但是不會覆蓋已經(jīng)存在的key。
redis 127.0.0.1:6379> get key1
"HongWan1"
redis 127.0.0.1:6379> get key2
"HongWan2"
redis 127.0.0.1:6379> msetnx key2 HongWan2_new key3 HongWan3
(integer) 0
redis 127.0.0.1:6379> get key2
"HongWan2"
redis 127.0.0.1:6379> get key3
(nil)

可以看出如果這條命令返回0,那么里面操作都會回滾,都不會被執(zhí)行。
2.2.7 get
獲取key對應(yīng)的string,如果key不存在返回nil
例如我們獲取一個庫中存在的鍵name,可以很快得到它對應(yīng)的value
redis 127.0.0.1:6379> get name
"HongWan"
redis 127.0.0.1:6379>

我們獲取一個庫中不存在的鍵name1,那么它會返回一個nil以表時無此鍵值對
redis 127.0.0.1:6379> get name1
(nil)
redis 127.0.0.1:6379>

2.2.8 getset
設(shè)置key的值,并返回key的舊值。
redis 127.0.0.1:6379> get name
"HongWan"
redis 127.0.0.1:6379> getset name HongWan_new
"HongWan"
redis 127.0.0.1:6379> get name
"HongWan_new"
redis 127.0.0.1:6379>

接下來我們看一下如果key不存的時候會什么樣兒?
redis 127.0.0.1:6379> getset name1 aaa
(nil)
redis 127.0.0.1:6379>

可見,如果key不存在,那么將返回nil
2.2.9 getrange
獲取指定keyvalue值的子字符串。
具體樣例如下:
redis 127.0.0.1:6379> get name
"HongWan@126.com"
redis 127.0.0.1:6379> getrange name 0 6
"HongWan"
redis 127.0.0.1:6379>

字符串左面下標(biāo)是從0開始的
redis 127.0.0.1:6379> getrange name -7 -1
"126.com"
redis 127.0.0.1:6379>

字符串右面下標(biāo)是從-1開始的
redis 127.0.0.1:6379> getrange name 7 100
"@126.com"
redis 127.0.0.1:6379>

當(dāng)下標(biāo)超出字符串長度時,將默認為是同方向的最大下標(biāo)
2.2.10 mget
一次獲取多個key的值,如果對應(yīng)key不存在,則對應(yīng)返回nil。
具體樣例如下:
redis 127.0.0.1:6379> mget key1 key2 key3
1) "HongWan1"
2) "HongWan2"
3) (nil)
redis 127.0.0.1:6379>

key3由于沒有這個鍵定義,所以返回nil。
2.2.11 incr
key的值做加加操作,并返回新的值。注意incr一個不是intvalue會返回錯誤,incr一個不存在的key,則設(shè)置key1
redis 127.0.0.1:6379> set age 20
OK
redis 127.0.0.1:6379> incr age
(integer) 21
redis 127.0.0.1:6379> get age
"21"
redis 127.0.0.1:6379>

2.2.12 incrby
incr類似,加指定值 ,key不存在時候會設(shè)置key,并認為原來的value 0
redis 127.0.0.1:6379> get age
"21"
redis 127.0.0.1:6379> incrby age 5
(integer) 26
redis 127.0.0.1:6379> get name
"HongWan@gmail.com"
redis 127.0.0.1:6379> get age
"26"
redis 127.0.0.1:6379>

2.2.13 decr
key的值做的是減減操作,decr一個不存在key,則設(shè)置key-1
redis 127.0.0.1:6379> get age
"26"
redis 127.0.0.1:6379> decr age
(integer) 25
redis 127.0.0.1:6379> get age
"25"
redis 127.0.0.1:6379>

2.2.14 decrby
decr,減指定值。
redis 127.0.0.1:6379> get age
"25"
redis 127.0.0.1:6379> decrby age 5
(integer) 20
redis 127.0.0.1:6379> get age
"20"
redis 127.0.0.1:6379>

decrby完全是為了可讀性,我們完全可以通過incrby一個負值來實現(xiàn)同樣效果,反之一樣。
redis 127.0.0.1:6379> get age
"20"
redis 127.0.0.1:6379> incrby age -5
(integer) 15
redis 127.0.0.1:6379> get age
"15"
redis 127.0.0.1:6379>

2.2.15 append
給指定key的字符串值追加value,返回新字符串值的長度。
例如我們向name的值追加一個@126.com字符串,那么可以這樣做:
redis 127.0.0.1:6379> append name @126.com
(integer) 15
redis 127.0.0.1:6379> get name
"HongWan@126.com"
redis 127.0.0.1:6379>

2.2.16 strlen
取指定keyvalue值的長度。
redis 127.0.0.1:6379> get name
"HongWan_new"
redis 127.0.0.1:6379> strlen name
(integer) 11
redis 127.0.0.1:6379> get age
"15"
redis 127.0.0.1:6379> strlen age
(integer) 2
redis 127.0.0.1:6379>


-------------------------------------------------------------------
《MongoDB管理與開發(fā)精要》、《Redis實戰(zhàn)》作者
ChinaUnix.net專家博主 http://cdhongwan.blog.chinaunix.net
@CD紅丸                    http://weibo.com/u/2446082491


您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP