当前位置 > it书童 > redis > 正文

redis 哈希 hash

redis it书童 2019-10-04 17:25:00 0赞 0踩 617阅读 0评论

哈希类型中的映射关系叫作field-value

设置值

hset key field value 成功返回1 失败返回0

还有hsetnx命令,键不存在时才设置值

127.0.0.1:6379> hset user:1 name guojing
(integer) 1

获取值

hget key field

127.0.0.1:6379> hset user:1 name guojing
127.0.0.1:6379> hget user:1 name
"guojing"

删除field

hdel key field[field ...]

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

127.0.0.1:6379> hset user:1 name guojing
127.0.0.1:6379> hdel user:1 name
(integer) 1
127.0.0.1:6379> hdel user:1 age
(integer) 0

计算field个数

hlen key

127.0.0.1:6379> hset user:1 name guojing
127.0.0.1:6379> hset user:1 name guojing
(integer) 1
127.0.0.1:6379> hset user:1 age 25
(integer) 1
127.0.0.1:6379> hset user:1 city xiangyang
(integer) 1
127.0.0.1:6379> hlen user:1
(integer) 3

批量设置/获取field-value

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

127.0.0.1:6379> hset user:1 name guojing
127.0.0.1:6379> del user:1
(integer) 1
127.0.0.1:6379> hmset user:1 name guojing age 25 city xiangyang
OK
127.0.0.1:6379> hmget user:1 name age city
1) "guojing"
2) "25"
3) "xiangyang"

判断field是否存在

hexists key field

存在返回1 不存在返回0

127.0.0.1:6379> hset user:1 name guojing
127.0.0.1:6379> hexists user:1 name
(integer) 1
127.0.0.1:6379> hexists user:1 kongfu
(integer) 0

获取所有field

hkeys user:1

127.0.0.1:6379> hset user:1 name guojing
127.0.0.1:6379> hkeys user:1
1) "name"
2) "age"
3) "city"

获取所有value

hvals key

127.0.0.1:6379> hset user:1 name guojing
127.0.0.1:6379> hvals user:1
1) "guojing"
2) "25"
3) "xiangyang"

获取所有的field-value

hgetall key

127.0.0.1:6379> hset user:1 name guojing
127.0.0.1:6379> hgetall user:1
1) "name"
2) "guojing"
3) "age"
4) "25"
5) "city"
6) "xiangyang"

使用hgetall时,如果哈希元素个数比较多,存在阻塞redis的可能

对field的值进行增加

hincrby key field hincrbyfloat key field

计算value的字符串长度

hstrlen key field

时间复杂度

应用场景

储存用户信息,一个用户的信息包含:姓名,年龄,地区。如果用关系型数据库储存,就需要用相应的字段,每个用户的信息结构都是一致的。而哈希类型是稀疏的,每个键可以有不同的field

关系型数据库可以做复杂的关系查询,而redis要去模拟这种复杂查询是相当困难的

关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
转载须注明出处:https://www.itshutong.com/articles/191/redis-hash