Redis 常用数据类型之 hash(哈希)
hash 哈希的特性
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
Redis 中每个 hash 可以存储 - 1 键值对(40多亿)。
hash 相关命令
操作 |
命令 |
例子 |
说明 |
存 |
hset |
hset key name value |
设置值 |
存多个键值对 |
hmset |
hmset key name value name1 value1 |
一次性存入多个值 |
取 |
hget |
hget key name |
|
取多个值 |
hmget |
hmget key name name1 |
获取多个值 |
取所有属性与值 |
hgetall |
hgetall key |
|
删除单个/多个key值 |
hdel |
hdel key name1 name2 |
当删除一个空的 hash 时(key存在),会返回一个0 |
删除集合 |
del |
del key |
删除整个hash |
增加指定的数值 |
hincrby |
hincrby key name 指定数值 |
增加指定的数值,类似于 String 中的 incryby 操作 |
判断集合中是否存在指定的key |
hexists |
hexists key name |
hexists 判断 hash 中的某个属性是否存在,存在返回 1,不存在返回0 |
获取属性的个数 |
hlen |
hlen key |
获取当前key 的 name 的个数 |
获取所有属性的名称 |
hkeys |
hkeys key |
获取当前 key 中 name 的值 |
获取所有属性的值 |
hvals |
hvals key |
获取当前 key 中所有属性的值 |
详细说明
基础操作(hset、hget、hmset、hmget)
127.0.0.1:6379> hset myhash name Tom # 设置 一个具体的 key-value
(integer) 1
127.0.0.1:6379> hget myhash name # 获取名称
"Tom"
127.0.0.1:6379> hmset myhash age 12 flag true # 同时设置多个值(可以设置 key 存在的元素,也可以设置不存在的元素)
OK
127.0.0.1:6379> hmget myhash age name flag # 同时获取 myhash 下面的 age、name、flag 值
1) "12"
2) "Tom"
3) "true"
127.0.0.1:6379> hgetall myhash # 获取 myhash 下面所有的 key-value
1) "name"
2) "Tom"
3) "age"
4) "12"
5) "flag"
6) "true"
127.0.0.1:6379> hmset myhashTest age 12 # 添加一个不存在的 hash key
OK
127.0.0.1:6379> keys m* # 查看以 m开头的 key元素
1) "myhashTest"
2) "myhash"
127.0.0.1:6379>
获取属性相关操作(hlen、hkeys、hvals)
127.0.0.1:6379> hlen myhash # 获取hash 中的字段数量
(integer) 3
127.0.0.1:6379> hkeys myhash # 获取hash 中所有的 key
1) "name"
2) "age"
3) "flag"
127.0.0.1:6379> hvals myhash # 获取hash 中所有的value
1) "Tom"
2) "12"
3) "true"
127.0.0.1:6379>
判断存在与增加指定的值(hexists、hincrby)
127.0.0.1:6379> hexists myhash test # 判断是否存在,不存在返回 0
(integer) 0
127.0.0.1:6379> hexists myhash name # 存在就返回 1
(integer) 1
127.0.0.1:6379> hincrby myhash age 2 # 指定增加数字
(integer) 14
127.0.0.1:6379>
不存在时设置值(hsetnx)
127.0.0.1:6379> hsetnx myhash age 1 # 设置 myhash 值,此时 myhash 存在,设置不成功
(integer) 0
127.0.0.1:6379> hgetall myhash # 查看是否设置成功
1) "name"
2) "Tom"
3) "age"
4) "14"
5) "flag"
6) "true"
127.0.0.1:6379> hsetnx myhash1 age 12 # 设置不存在的的值
(integer) 1
127.0.0.1:6379> keys my*
1) "myhashTest"
2) "myhash"
3) "myhash1"
127.0.0.1:6379>