【redis 学习系列】API的理解与使用(二)

3、哈希

几乎所有的语言都支持了哈希(hash)类型。在Redis中,哈希类型是指键值本身又是一个键值对结构,形如:value = {{field, value} ... {field, value}},Redis键值对和哈希类型的关系可以入下图所示:

【redis 学习系列】API的理解与使用(二)

 

哈希类型中的映射关系叫做field-value,注意这里的value指的是field对应的值,而不是键对应的值。

3.1命令

(1)设置值

1 hset key field value

如果设置成功会返回1,反之则返回0。此外Redis提供了hsetnx命令的作用同setnx,只不过作用域由键变为了field。

(2)获取值

1 hget key field

如果获取的键或者field不存在,则返回nil

【redis 学习系列】API的理解与使用(二)

(3)删除field

1 hdel key field [field ...]

hdel会删除一个或者多个field,返回结果为成功删除field的个数。

【redis 学习系列】API的理解与使用(二)

(4)计算filed的个数

1 hlen key

【redis 学习系列】API的理解与使用(二)

(5)批量设置或获取filed-value

1 hmget key field [field ...]
2 hmset key field value [field value ...]

hmset和hmget分别是批量设置和获取field-value,hmset需要的参数是key和多对field-value,hmget需要的参数是key和多个field。

【redis 学习系列】API的理解与使用(二)

(6)判断filed是否存在

1 hexists key field

例如user:3包含name域,所以返回为1,不包含时,返回为0。

(7)获取所有filed

1 hkeys key

hkeys命令应该叫hfield更为恰当,它返回的是执行哈希键所有的field。

【redis 学习系列】API的理解与使用(二)

(8)获取所有value

1 hvals key

(9)获取所有的filed-value

1 hgetall key

如下的操作会获取user:3的所有field-value。

 【redis 学习系列】API的理解与使用(二)

在使用hgetall命令时,如果哈希元素个数比较多时,会存在阻塞Redis的可能,如果开发人员只是为了获取部分field,可以使用hmget,如果一定要获得全部的field-value,可以使用命令hscan,该命令会渐进式遍历哈希类型。

(10)hincrby hincrbyfloat

 

1 hincrby key field
2 hincrbyfloat key field

 

命令hincrby和hincrbyfloat就像incrby和incrbyfloat一样,只不过它们的作用域为field。

 

(11)计算value的字符串长度(Redis 3.2以上版本)

1 hstrlen key field

例如hget user:3 name的value是kevin,那么hstrlen的返回值为5。

【redis 学习系列】API的理解与使用(二)

3.2 内部编码

哈希类型的内部编码有2种:

【redis 学习系列】API的理解与使用(二)

 

3.3 使用场景

 

上一篇:C#在类外部实现对私有字段的值的修改


下一篇:[备忘]js表单序列化代码