来自文章集合:
一文带你搞懂redis使用过程(持续更新中)
哈希(Hash)
场景
- 存储对象:存储用户信息、商品信息等。通过把每个对象的属性作为哈希的字段和值。
- 缓存存储:将对象的属性存储为哈希字段缓存起来,提高缓存性能
- 存储表单数据:用户注册信息,表单提交数据等
- 计数器和统计数据:用户访问次数、在线时长等
用法示例
127.0.0.1:6379> flushdb
OK
// 插入或更新key中的字段值 HMSET <key_name> <field_name> <value> [field_name value...]
127.0.0.1:6379> HMSET redis_hash_1 name "redis" age 18 version 1
OK
127.0.0.1:6379> HMSET redis_hash_1 age 19 location "China"
OK
// 查询key中的所有字段值:HGETALL <key_name>
127.0.0.1:6379> HGETALL redis_hash_1
1) "name"
2) "redis"
3) "age"
4) "19"
5) "version"
6) "1"
7) "location"
8) "China"
// 查询key的某个字段值:HGET <key_name> <field_name>
127.0.0.1:6379> HGET redis_hash_1 name
"redis"
// 查询key的一个或多个字段值:HMGET <key_name> <field_name> [field_name]
127.0.0.1:6379> HMGET redis_hash_1 name age location
1) "redis"
2) "19"
3) "China"
// 只有在key中字段field不存在时,设置哈希字段的值:HSETNX <key_name> <field_name> <field_value>
127.0.0.1:6379> HSETNX redis_hash_1 name "new_redis"
(integer) 0
127.0.0.1:6379> HSETNX redis_hash_1 descripe "this is new_redis"
(integer) 1
127.0.0.1:6379> HGETALL redis_hash_1
1) "name"
2) "redis"
3) "age"
4) "19"
5) "version"
6) "1"
7) "descripe"
8) "this is new_redis"
// 查询key中某个字段是否存在:HEXISTS <key_name> <field_name>
127.0.0.1:6379> keys *
1) "redis_hash_1"
127.0.0.1:6379> HEXISTS redis_hash_1 age
(integer) 1
127.0.0.1:6379> HEXISTS redis_hash_1 sex
(integer) 0
127.0.0.1:6379> HEXISTS redis_hash_2 sex
(integer) 0
// 删除key中某个字段:HEDL <key_name> <field_name> [field_name...]
127.0.0.1:6379> HDEL redis_hash_1 location
(integer) 1
// 获取key中所有字段:HKEYS <key_name>
127.0.0.1:6379> HKEYS redis_hash_1
1) "name"
2) "age"
3) "version"
127.0.0.1:6379> HKEYS redis_hash_2
(empty list or set)
// 获取哈希表中所有字段的值:HVALS <key_name>
127.0.0.1:6379> HVALS redis_hash_1
1) "redis"
2) "19"
3) "1"
// 查询key中的字段数目:HLEN <key_name>
127.0.0.1:6379> HLEN redis_hash_1
(integer) 3
127.0.0.1:6379> HLEN redis_hash_2
(integer) 0
// 给哈希表key中的指定字段的整数值加上增量increment
127.0.0.1:6379> HINCRBY redis_hash_1 name 10
(error) ERR hash value is not an integer
127.0.0.1:6379> HINCRBY redis_hash_1 age 10
(integer) 29
// 给哈希表key中的指定字段的浮点数加上增量increment
127.0.0.1:6379> hset redis_hash_1 money 12.6
(integer) 1
127.0.0.1:6379> HGETALL redis_hash_1
1) "name"
2) "redis"
3) "age"
4) "39"
5) "version"
6) "1"
7) "descripe"
8) "this is new_redis"
9) "money"
10) "12.6"
127.0.0.1:6379> HINCRBY redis_hash_1 money 10
(error) ERR hash value is not an integer
127.0.0.1:6379> HINCRBYFLOAT redis_hash_1 money 10
"22.60000000000000142"
127.0.0.1:6379> HINCRBYFLOAT redis_hash_1 money 10.2
"32.79999999999999716"