Redis : Hash类型

哈希类型 

哈希类型的命令

hset

设置key指定的字段(field)的值(value) 

也可以设置多组field和value

hget 

获得哈希中指定字段的值

如果该字段为空或者key为空则返回nil

hexists

判断哈希中是否有该字段的值

如果有则会返回1,否则返回0

 

hdel

删除哈希中该字段对应的值

返回本次删除的字段个数

也可以一次删除多个哈希中的字段

hkeys

获得哈希中的全部字段

hvals

获得哈希中的所有值

hgetall

获得哈希中的全部字段和全部的值

hmget

一次性获得哈希中的多个字段

hlen

获得哈希中所有字段的个数

hstrlen

获得哈希中字段的长度

hsetnx

字段不存在下,设置哈希中的字段和值

返回1表示设置成功,0表示设置失败

hincrby

对哈希中对应字段的值添加指定的值(+/-)

hincrfloat

对哈希中的字段中的值进行浮点数运算

 

注:如果只对单个的字段进行命令作用,时间复杂度为O(1),否则是O(N)N为字段(field)的个数

带H的命令必须保证作用的是哈希类型

内部编码

哈希的内部编码一共有两种:ziplist(压缩列表)和hashtable(哈希表)

当field的个数较少,并且没有特别大的value,内部编码为ziplist,否则会自动转换为hashtable

压缩的本质,是对数据进行重新编码

可以再redis的配置文件中修改默认的配置(ziplist -> hashtable)

 

使用场景

用户信息的保存

关系型数据库保存用户信息

userIduesrNameage
1zhangsan2
2lisi3

映射关系表示用户信息

相⽐于使⽤JSON格式的字符串缓存用户信息,哈希类型变得更加直观,并且在更新操作上变得更灵活。

作为缓存

如果使用String(json)的格式表示UserInfo

  • 只是想获取某个field,或者修改某个field
  • 就需要把整个json都读出来,操作field,转成json字符串,再写回去

如果用哈希的方式表示UserInfo

  • 就可以使用field表示对象的属性
  • 此时修改和获取任何一个属性就会十分的方便

注:使用hash进行field的读取和修改,确实是十分的方便,但是会使其内部编码再ziplist和hashtable中进行切换,造成内存的消耗

 

希望能对大家有所帮助!!!!!!!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值