Redis的哈希(Hash)使用

60 阅读2分钟

来自文章集合:一文带你搞懂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"