3.4.2 HASH-字典

在 Memcached 中,我们经常将一些结构化的信息打包成 hashmap,在客户端序列化后存储为一个字符串的值(一般是 JSON 格式),比如用户的昵称、年龄、性别、积分等。这时候在需要修改其中某一项时,通常需要将字符串(JSON)取出来,然后进行反序列化,修改某一项的值,再序列化成字符串(JSON)存储回去。简单修改一个属性就干这么多事情,消耗必定是很大的,也 不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而 Redis 的 Hash 结构可以使你像在数据库中 Update 一个属性一样只修改某一项属性值。

hset ­­ 设置hash field为指定值,如果key不存在,则先创建。

> hset myhash field1 Hello

hsetnx ­­ 设置hash field为指定值,如果key不存在,则先创建。如果field已经存在,返回0,nx是not exist的意思。

> hsetnx myhash field "Hello"   
(integer) 1
> hsetnx myhash field "Hello"   
(integer) 0

第一次执行是成功的,但第二次执行相同的命令失败,原因是field已经存在了。

hmset ­­ 同时设置hash的多个field。

> hmset myhash field1 Hello field2 World   
> OK

hget ­­ 获取指定的hash field。

> hget myhash field1  
 "Hello"
> hget myhash field2 
  "World"
> hget myhash field3  
 (nil)

由于数据库没有field3,所以取到的是一个空值nil.

hmget ­­ 获取全部指定的hash filed。

 > hmget myhash field1 field2 field3   
 1) "Hello"
 2) "World"
 3) (nil)

hincrby ­­ 指定的hash filed 加上给定值。

> hset myhash field3 20  
 (integer) 1
> hget myhash field3  
 "20"
> hincrby myhash field3 -8   
(integer) 12
> hget myhash field3   
"12

hexists ­­ 测试指定field是否存在。

> hexists myhash field1
  (integer) 1
> hexists myhash field9
  (integer) 0   
  通过上例可以说明field1存在,但field9是不存在的。

hlen ­­ 返回指定hash的field数量。

> hlen myhash
  (integer) 4

hkeys ­­ 返回hash的所有field。

> hkeys myhash   
> 1) "field2"   
> 2) "field"   
> 3) "field3"

说明这个hash中有3个field。

hvals ­­ 返回hash的所有value。

> hvals myhash   
1) "World"   
2)"Hello"   
3)"12"

说明这个hash中有3个field。

hgetall ­­ 获取某个hash中全部的filed及value。

> hgetall myhash   
1) "field2"   
2) "World" 
3) "field"  
4) "Hello"   
5) "field3"   
6) "12"

results matching ""

    No results matching ""