### **可以用作用户资料等场景,一个大类下有许多子类,如用户资料下有姓名,性别,年龄等,各个子类都有对应的值**
* 与 PHP 的 Array 相似
* 可以保存多个 key-value 对,每个k-v 都是字符串类型
* 最多 2 的 32 次方 -1 个字段
### **1.常见的操作**
1. 赋值
`$redis->hSet('key','filed','value');`
2. 赋值多个字段
`$redis->hMset('key',array('filed1' => 'value1','filed2' => 'value2'));`
3. 取值
`$redis->hGet('key','filed');`
4. 取多个字段的值
`$redis->hmGet('key',array('filed1','field2'));`
5. 取所有字段的值
`$redis->hGetAll('key');`
6. 获取字段的数量
`$redis->hLen('key');`
7. 判断字段是否存在
`$redis->hExists('key',field);`
8. 当字段不存在时赋值
`$redis->hSetNx('key',field,value);`
9. 增加数字
`$redis->hIncrBy('key',field,num);`
10. 删除字段
`$redis->hDel('key');`
11. 获取所有字段名
`$redis->hKeys('key');`
12. 获取所有字段值
`$redis->hVal('key');`
### **2.封装自己的 redis hash**
#### 1.编写类
```
/**
* hash赋值
*/
public static function hset($key, $field, $value)
{
return self::getWrite()->hSet($key, $field, $value);
// 如 用户资料-姓名-张三
}
/**hash取值
* @param $key
* @param string $field
* @return array|false|string
*/
public static function hget($key, $field = '')
{
if (empty($field)) {
return self::getRead()->hGetAll($key);
} else {
return self::getRead()->hGet($key, $field);
}
}
/**自增
* @param $key
* @param $field
* @param int $number
* @return mixed
*/
public static function hincrby($key, $field, $number = 1)
{
return self::getWrite()->hIncrBy($key,$field,$number);
}
```