***Redis hash是一个string类型的field和value的映射表.它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象...
http://redis.readthedocs.org/en/latest/hash/hset.html
HSET
HSET key field value ? (存一個(gè)對(duì)象的時(shí)候key存)
將哈希表?key?中的域?field?的值設(shè)為?value?。
如果?key?不存在,一個(gè)新的哈希表被創(chuàng)建并進(jìn)行?HSET?操作。
如果域?field?已經(jīng)存在于哈希表中,舊值將被覆蓋。
可用版本:?------------------------------------------------------------------------------------
http://langgufu.iteye.com/blog/1434408
?
Redis hash是一個(gè)string類型的field和value的映射表.它的添加、刪除操作都是O(1)(平均)。hash特別適合用于存儲(chǔ)對(duì)象。相較于將對(duì)象的每個(gè)字段存成單個(gè)string類型。將一個(gè)對(duì)象存儲(chǔ)在hash類型中會(huì)占用更少的內(nèi)存,并且可以更方便的存取整個(gè)對(duì)象。省內(nèi)存的原因是新建一個(gè)hash對(duì)象時(shí)開始是用zipmap(又稱為small hash)來存儲(chǔ)的。這個(gè)zipmap其實(shí)并不是hash table,但是zipmap相比正常的hash實(shí)現(xiàn)可以節(jié)省不少hash本身需要的一些元數(shù)據(jù)存儲(chǔ)開銷。盡管zipmap的添加,刪除,查找都是O(n),但是由于一般對(duì)象的field數(shù)量都不太多。所以使用zipmap也是很快的,也就是說添加刪除平均還是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é)。
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、hsetnx
設(shè)置hash field為指定值,如果key不存在,則先創(chuàng)建。如果field已經(jīng)存在,返回0,nx是not 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)存在了。
3、hmset
同時(shí)設(shè)置hash的多個(gè)field。
redis?127.0.0.1:6379>?hmset myhash field1 Hello field2 WorldOK
redis?127.0.0.1:6379>
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ù)庫沒有field3,所以取到的是一個(gè)空值nil。
5、hmget
獲取全部指定的hash filed。
redis?127.0.0.1:6379>?hmget myhash field1 field2 field31)?"Hello"
2)?"World"
3) (nil)
redis?127.0.0.1:6379>
由于數(shù)據(jù)庫沒有field3,所以取到的是一個(gè)空值nil。
?
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的操作。
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>
通過上例可以說明field1存在,但field9是不存在的。
8、hlen
返回指定hash的field數(shù)量。
redis?127.0.0.1:6379>?hlen myhash(integer)?4
redis?127.0.0.1:6379>
通過上例可以看到myhash中有4個(gè)field。
9、hdel
返回指定hash的field數(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>
10、hkeys
返回hash的所有field。
redis?127.0.0.1:6379>?hkeys myhash1)?"field2"
2)?"field"
3)?"field3"
redis?127.0.0.1:6379>
說明這個(gè)hash中有3個(gè)field。
11、hvals
返回hash的所有value。
redis?127.0.0.1:6379>?hvals myhash1)?"World"
2)?"Hello"
3)?"12"
redis?127.0.0.1:6379>
說明這個(gè)hash中有3個(gè)field。
12、hgetall
獲取某個(gè)hash中全部的filed及value。
redis?127.0.0.1:6379>?hgetall myhash1)?"field2"
2)?"World"
3)?"field"
4)?"Hello"
5)?"field3"
6)?"12"
redis?127.0.0.1:6379>
可見,一下子將myhash中所有的field及對(duì)應(yīng)的value都取出來了。
總結(jié)
以上是生活随笔為你收集整理的***Redis hash是一个string类型的field和value的映射表.它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sed简单用法
- 下一篇: 为什么PostgreSQL比MongoD