Redis五大基本数据类型之Hash哈希(转载)
一、概述
Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。
String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便:
Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD:
Hash类型的常见命令
- HSET key field value:添加或者修改hash类型key的field的值
- HGET key field:获取一个hash类型key的field的值
- HMSET:批量添加多个hash类型key的field的值
- HMGET:批量获取多个hash类型key的field的值
- HGETALL:获取一个hash类型的key中的所有的field和value
- HKEYS:获取一个hash类型的key中的所有的field
- HVALS:获取一个hash类型的key中的所有的value
- HINCRBY:让一个hash类型key的字段值自增并指定步长
- HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行
以下是 String 类型和 Hash 类型的结构比较:
二、hset、hget
hset、hget主要用来设置和获取单条数据,格式说明如下:
#贴心测试如下: #设置值 hset key field value 192.168.65.15:6379> hset u1 name zs (integer) 1 #获取值 hget key field 192.168.65.15:6379> hget u1 name "zs" #获取值:如果key不存返回nil 192.168.65.15:6379> hget u2 name (nil) #获取值:如果field不存返回nil 192.168.65.15:6379> hget u1 name1 (nil)
三、hmset、hmget
上述一条一条地增加数据有点繁琐,为此,Redis准备了多条数据的操作,格式如下:
#贴心测试如下: #批量设置值 192.168.65.15:6379> hmset u1 name zs age 22 sex boy OK #批量获取值,按field顺序显示 192.168.65.15:6379> hmget u1 name age sex 1) "zs" 2) "22" 3) "boy" #如果key不存在,则返回nil 192.168.65.15:6379> hmget u2 name 1) (nil) #如果field不存在,则返回nil 192.168.65.15:6379> hmget u1 name name1 1) "zs" 2) (nil)
四、hincrby、hsetnx
如果value是数值类型,我们可以用hincrby来增加大小;在添加时如果key-field不存在,才实现添加,可以用hsetnx命令。具体格式如下:
#贴心测试如下: #查看age原来的值 192.168.65.15:6379> hget u1 age "22" #hincrby给age增加5 192.168.65.15:6379> hincrby u1 age 5 (integer) 27 #查看增加后的结果22+5=27 192.168.65.15:6379> hget u1 age "27" #hsetnx设置如果field存在,则不添加 192.168.65.15:6379> hsetnx u1 age 22 (integer) 0 #查看age还是27,没有变化 192.168.65.15:6379> hget u1 age "27" #hsetnx设置如果field不存在,添加 192.168.65.15:6379> hsetnx u1 age1 22 (integer) 1 #查看age1是22 192.168.65.15:6379> hget u1 age1 "22"
五、hexists、hgetall、hkeys、hvals、hlen
在查询时,有时我们需要知道key是否存在?存在的话有多少个field?如何显示所有的内容?如何显示所有的field或者value?为解决这些问题,我们帮你收集以下命令来解决:
#贴心测试如下: #检查field是否存在 192.168.65.15:6379> hexists u1 age (integer) 1 #如果key不存在,返回0 192.168.65.15:6379> hexists u2 age (integer) 0 #如果field不存在,返回0 192.168.65.15:6379> hexists u1 age2 (integer) 0 #获取u1结构中的全部field和value 192.168.65.15:6379> hgetall u1 1) "name" 2) "zs" 3) "age" 4) "27" 5) "sex" 6) "boy" 7) "age1" 8) "22" #获取u1结构中的全部field 192.168.65.15:6379> hkeys u1 1) "name" 2) "age" 3) "sex" 4) "age1" #获取u1结构中的全部value 192.168.65.15:6379> hvals u1 1) "zs" 2) "27" 3) "boy" 4) "22" #获取u1结构中field的数量 192.168.65.15:6379> hlen u1 (integer) 4
六、hdel
我们一般用的删除单词是remove 和delete,这里删除用的是hdel,h表示hashes,del表示delete,具体如下:
#贴心测试如下: #查看u1的数据 192.168.65.15:6379> hgetall u1 1) "name" 2) "zs" 3) "age" 4) "27" 5) "sex" 6) "boy" 7) "age1" 8) "22" #删除u1中 age1和 sex的数据 192.168.65.15:6379> hdel u1 age1 sex (integer) 2 #查看删除结果 192.168.65.15:6379> hgetall u1 1) "name" 2) "zs" 3) "age" 4) "27"
关于Redis常用类型之Hash哈希存储类型就分享到这里了。
参考文献:
分类:
Redis
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2016-09-08 IIS7的集成模式下如何让自定义的HttpModule不处理静态文件(.html .css .js .jpeg等)请求