设为首页 收藏本站
查看: 696|回复: 0

[经验分享] 系统学习redis之四——redis数据类型之hash类型及操作

[复制链接]

尚未签到

发表于 2018-11-2 07:56:30 | 显示全部楼层 |阅读模式
hash数据类型
  Redis的hash是一个string类型的field(字段)和value的映射表。它的添加、删除操作都是0/1(平均操作法)。hash特别适合用于存储对象。相较于将对象的每一个字段存成单个string类型。。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。

hash数据类型方法


  • hset:设置hash field为指定值,如果key不存在,则先创建
  • hsetnx:设置hash field为指定值,如果key不存在,则先创建,如果存在,就返回0
  • hmset:同时设置hash的多个field(字段)
  • hmget:获取全部指定的hash field
  • hincrby:给指定的hash field加上给定的值
  • hexists:测试指定field是否存在
  • hlen:返回指定hash的field数量
  • hdel:删除指定的hash的field
  • hkeys:返回hash的所有field
  • hvals:返回hash表的所有value
  • hgetall:获取某个hash表中全部的field及对应的value(常用)
方法及操作
  1)hset:设置hash field为指定值,如果key不存在,则先创建
  例如:设置异常hash表,名字为user:001,然后给表里面添加一个字段为name,对应的值为crystal:
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> HSET user:001 name crystal   #user:001可以看做是一个hash表的名称,name是字段,crystal是字段的值
  
(integer) 1
  
127.0.0.1:6379> HGET user:001 name    #获取user:001这个表里面name的值
  
"crystal"
  
127.0.0.1:6379>
  

  备注,同《系统学习redis之三——redis数据类型之string类型及操作》一样,后面的例子也都在同一台机器一次性操作完毕的,因为后面的代码如果不加上“ [root@test101 redis-4.0.1]# src/redis-cli ”这一句。代码高亮也会格式有问题,所以后面所有的例子中都加上了“[root@test101 redis-4.0.1]# src/redis-cli ”,只是为了格式问题。
  2)hsetnx:设置hash field为指定值,如果key不存在,则先创建,如果存在,就返回0
  例如:黑hash表user:001设置age
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> HSETNX user:001 age 10   #因为age这个key不存在,所以第一次指定成功
  
(integer) 1
  
127.0.0.1:6379> HGET user:001 age
  
"10"
  
127.0.0.1:6379> HSETNX user:001 age 30    #age这个key刚刚已经设置过了,这里就会设置失败,而且不会覆盖原来的值
  
(integer) 0
  
127.0.0.1:6379> HGET user:001 age
  
"10"
  
127.0.0.1:6379>
  

  3)hmset:同时设置hash的多个field(字段)
  例如:一次性创建一张名字为user:002的hash表,并且设置里面两个字段:name=crystal,age=18
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> HMSET user:002 name crystal age 18
  
OK
  
127.0.0.1:6379> HGET user:002 name
  
"crystal"
  
127.0.0.1:6379> HGET user:002 age
  
"18"
  
127.0.0.1:6379>
  

  4)hmget:获取全部指定的hash field
  例如:一次性获取上面例子中user:002中的name和age的值
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> HMGET user:002 name age
  
1) "crystal"
  
2) "18"
  
127.0.0.1:6379> HMGET user:002 name age sex   #这里因为表中并没有sex这个字段,所以会返回空值
  
1) "crystal"
  
2) "18"
  
3) (nil)
  
127.0.0.1:6379>
  

  5)hincrby:给指定的hash field加上给定的值
  例如:给user:002中的age加上10岁
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> HMGET user:002 name age
  
1) "crystal"
  
2) "18"
  
127.0.0.1:6379> HINCRBY user:002 age 10     #给 age加上10岁
  
(integer) 28
  
127.0.0.1:6379> HGET user:002 age
  
"28"
  
127.0.0.1:6379> HINCRBY user:002 age -8     #给age减了8岁
  
(integer) 20
  
127.0.0.1:6379> HGET user:002 age
  
"20"
  
127.0.0.1:6379>
  

  6)hexists:测试指定field是否存在
  例如:检测hash表user:002里面name和sex是否存在
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> HEXISTS user:002 name  #name存在,返回1
  
(integer) 1
  
127.0.0.1:6379> HEXISTS user:002 sex        #sex字段不存在,返回0
  
(integer) 0
  
127.0.0.1:6379>
  

  7)hlen:返回指定hash的field数量
  例如:查看hash表user:002的field数量
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> HLEN user:002
  
(integer) 2     #2表示2个field
  

  8)hdel:删除指定的hash的field
  例如:删除user:001里面的field age
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> HGET user:001 age
  
"18"
  
127.0.0.1:6379>
  
127.0.0.1:6379> HDEL user:001 age
  
(integer) 1
  
127.0.0.1:6379> HGET user:001 age   #age已经成功删除,因此这里返回nil空值
  
(nil)
  
127.0.0.1:6379>
  

  9)hkeys:返回hash的所有field
  例如:返回hash表user:001和user:002所有的field
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> HKEYS user:001
  
1) "name"
  
127.0.0.1:6379>
  
127.0.0.1:6379> HKEYS user:002
  
1) "name"
  
2) "age"
  

  10)hvals:返回hash表的所有value
  例如:返回hash表user:002和user:001所有的value
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> HVALS user:001
  
1) "crystal"
  
127.0.0.1:6379> HVALS user:002
  
1) "crystal"
  
2) "20"
  
127.0.0.1:6379> :
  

  11)hgetall:获取某个hash表中全部的field及对应的value(常用)
  例如:返回hash表user:002和user:001所有的field及其value
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> HGETALL user:001
  
1) "name"       #field
  
2) "crystal"    #value
  
127.0.0.1:6379> HGETALL user:002
  
1) "name"       #field1
  
2) "crystal"    #value1
  
3) "age"        #field2
  
4) "20"         #value2
  
127.0.0.1:6379>



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-629583-1-1.html 上篇帖子: 初步认识redis-i am dream-51CTO博客 下篇帖子: 系统学习redis之五——redis数据类型之list类型及操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表