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

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

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

[Redis] Redis實(shí)戰(zhàn)《紅丸出品》2.3 hashes類(lèi)型及操作 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2012-06-13 21:36 |只看該作者 |倒序?yàn)g覽

2.3         hashes類(lèi)型及操作
Redis hash是一個(gè)string類(lèi)型的fieldvalue的映射表.它的添加、刪除操作都是O(1)(平均)。hash特別適合用于存儲(chǔ)對(duì)象。相較于將對(duì)象的每個(gè)字段存成單個(gè)string類(lèi)型。將一個(gè)對(duì)象存儲(chǔ)在hash類(lèi)型中會(huì)占用更少的內(nèi)存,并且可以更方便的存取整個(gè)對(duì)象。省內(nèi)存的原因是新建一個(gè)hash對(duì)象時(shí)開(kāi)始是用zipmap(又稱(chēng)為small hash)來(lái)存儲(chǔ)的。這個(gè)zipmap其實(shí)并不是hash table,但是zipmap相比正常的hash實(shí)現(xiàn)可以節(jié)省不少hash本身需要的一些元數(shù)據(jù)存儲(chǔ)開(kāi)銷(xiāo)。盡管zipmap的添加,刪除,查找都是O(n),但是由于一般對(duì)象的field數(shù)量都不太多。所以使用zipmap也是很快的,也就是說(shuō)添加刪除平均還是O(1)。如果field或者value的大小超出一定限制后,Redis會(huì)在內(nèi)部自動(dòng)將zipmap替換成正常的hash實(shí)現(xiàn). 這個(gè)限制可以在配置文件中指定
hash-max-zipmap-entries 64 #配置字段最多64個(gè)
hash-max-zipmap-value 512 #配置value最大為512字節(jié)
2.3.1 hset
設(shè)置hash field為指定值,如果key不存在,則先創(chuàng)
建。
redis 127.0.0.1:6379> hset myhash field1 Hello
(integer) 1
redis 127.0.0.1:6379>

2.3.2 hsetnx
設(shè)置hash field為指定值,如果key不存在,則先創(chuàng)建。如果field已經(jīng)存在,返回0,nxnot exist的意思。
redis 127.0.0.1:6379> hsetnx myhash field "Hello"
(integer) 1
redis 127.0.0.1:6379> hsetnx myhash field "Hello"
(integer) 0
redis 127.0.0.1:6379>

第一次執(zhí)行是成功的,但第二次執(zhí)行相同的命令失敗,原因是field已經(jīng)存在了。
2.3.3 hmset
同時(shí)設(shè)置hash的多個(gè)field。
redis 127.0.0.1:6379> hmset myhash field1 Hello field2 World
OK
redis 127.0.0.1:6379>

2.3.4 hget
獲取指定的hash field。
redis 127.0.0.1:6379> hget myhash field1
"Hello"
redis 127.0.0.1:6379> hget myhash field2
"World"
redis 127.0.0.1:6379> hget myhash field3
(nil)
redis 127.0.0.1:6379>

由于數(shù)據(jù)庫(kù)沒(méi)有field3,所以取到的是一個(gè)空值nil
2.3.5 hmget
獲取全部指定的hash filed
redis 127.0.0.1:6379> hmget myhash field1 field2 field3
1) "Hello"
2) "World"
3) (nil)
redis 127.0.0.1:6379>

由于數(shù)據(jù)庫(kù)沒(méi)有field3,所以取到的是一個(gè)空值nil
2.3.6 hincrby
指定的hash filed 加上給定值。
redis 127.0.0.1:6379> hset myhash field3 20
(integer) 1
redis 127.0.0.1:6379> hget myhash field3
"20"
redis 127.0.0.1:6379> hincrby myhash field3 -8
(integer) 12
redis 127.0.0.1:6379> hget myhash field3
"12"
redis 127.0.0.1:6379>

在本例中我們將field3的值從20降到了12,即做了一個(gè)減8的操作。
2.3.7 hexists
測(cè)試指定field是否存在。
redis 127.0.0.1:6379> hexists myhash field1
(integer) 1
redis 127.0.0.1:6379> hexists myhash field9
(integer) 0
redis 127.0.0.1:6379>

通過(guò)上例可以說(shuō)明field1存在,但field9是不存在的。
2.3.8 hlen
返回指定hashfield數(shù)量。
redis 127.0.0.1:6379> hlen myhash
(integer) 4
redis 127.0.0.1:6379>

通過(guò)上例可以看到myhash中有4個(gè)field
2.3.9 hdel
返回指定hashfield數(shù)量。
redis 127.0.0.1:6379> hlen myhash
(integer) 4
redis 127.0.0.1:6379> hdel myhash field1
(integer) 1
redis 127.0.0.1:6379> hlen myhash
(integer) 3
redis 127.0.0.1:6379>

2.3.10 hkeys
返回hash的所有field。
redis 127.0.0.1:6379> hkeys myhash
1) "field2"
2) "field"
3) "field3"
redis 127.0.0.1:6379>

說(shuō)明這個(gè)hash中有3個(gè)field
2.3.11 hvals
返回hash的所有value。
redis 127.0.0.1:6379> hvals myhash
1) "World"
2) "Hello"
3) "12"
redis 127.0.0.1:6379>

說(shuō)明這個(gè)hash中有3個(gè)field
2.3.12 hgetall
獲取某個(gè)hash中全部的filedvalue。
redis 127.0.0.1:6379> hgetall myhash
1) "field2"
2) "World"
3) "field"
4) "Hello"
5) "field3"
6) "12"
redis 127.0.0.1:6379>

可見(jiàn),一下子將myhash中所有的field及對(duì)應(yīng)的value都取出來(lái)了。
-------------------------------------------------------------------
《MongoDB管理與開(kāi)發(fā)精要》、《Redis實(shí)戰(zhàn)》作者
ChinaUnix.net專(zhuān)家 http://cdhongwan.blog.chinaunix.net
@CD紅丸           http://weibo.com/u/2446082491

您需要登錄后才可以回帖 登錄 | 注冊(cè)

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP