Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 658|回复: 0

[默认分类] Redis系列-存储篇hash主要操作函数小结

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-6-12 10:56:39 | 显示全部楼层 |阅读模式


    阳光透过玻璃,洒在身上,一杯暖茶在手,说不尽的安逸自得,让我有种想再写篇blog的冲动。上篇主要谈了string,这里谈谈hash吧!
    hash是一些列key value(field value)的映射表。常常用其存储一些对象实例。相对于把一个对象的各个字段存储为string,存储为hash会占用更少的内存。为什么会更省内存呢?需要搞清楚两个配置(hash-max-zipmap-entries和hash-max-zipmap-value)的含义,配置的详细介绍,我打算放在最后的配置优化环节讲。

    1)新增
    a)hset
    语法:hset key field value
    解释:设置hash表key中的field的值。如果hash表不存在,则创建,并执行设置field的值,如果hash表存在,值field的值覆盖或新增
    1. [root@xsf001 ~]# redis-cli
    2. redis 127.0.0.1:6379> hset user.1 name zhangsan    #设置key user.1 name域 的值
    3. (integer) 1
    4. redis 127.0.0.1:6379> hset user.1 age 45 #设置age域
    5. (integer) 1
    6. redis 127.0.0.1:6379> hset user.1 tech lisi
    7. (integer) 1
    复制代码
      b)hmset


    语法:hash key field value[key value]
    解释:批量设置hash表key的域
    1. redis 127.0.0.1:6379> hmset user.2 name niuer age 34 #同时设置name 和age域
    2. OK
    复制代码
      c)hsetnx


    语法:hsetnx key field value
    解释:仅仅当field域不存在时,设置hash表field的值
      
    1. redis 127.0.0.1:6379> hsetnx user.1 name lisi  #由于name域已经设置过,所以返回0
    2. (integer) 0
    3. redis 127.0.0.1:6379> hsetnx user.1 fri 5  
    4. (integer) 1   #fri域没有设置过,所以hset并返回1
    复制代码
      2)查询
      
    a)hget
    语法:hget key field
    解释:获取哈希表key的field值
    1. redis 127.0.0.1:6379> hget user.1 name  #存在的hash表及域
    2. "zhangsan"
    3. redis 127.0.0.1:6379> hget user.3 name  #不存在的hash表
    4. (nil)
    5. redis 127.0.0.1:6379> hget user.1 bb  #不存在的域
    6. (nil)
    复制代码
      b)hmget
      
    语法:hmget key field[field]
    解释:批量获取hash表的filed
    1. redis 127.0.0.1:6379> hmget user.1 name age fri tech
    2. 1) "zhangsan"
    3. 2) "45"
    4. 3) "5"
    5. 4) "lisi"
    6. redis 127.0.0.1:6379> hmget user.1 name age fri tech nofield #存在hash表中包含不存在的域nofield
    7. 1) "zhangsan"
    8. 2) "45"
    9. 3) "5"
    10. 4) "lisi"
    11. 5) (nil)
    12. redis 127.0.0.1:6379> hmget user.3 name age fri #不存在的hash表
    13. 1) (nil)
    14. 2) (nil)
    15. 3) (nil)
    复制代码
      c)hgetall


    语法:hgetall key
    解释:获取hash表的所有域值
    1. redis 127.0.0.1:6379> hgetall user.2  #存在的hash表
    2. 1) "name"   #域
    3. 2) "niuer"  #域name的值
    4. 3) "age"    #域
    5. 4) "34"     #域age的值
    6. redis 127.0.0.1:6379> hgetall user.3  #不存在的hansh表
    7. (empty list or set)
    复制代码
       

    d)hexists
      
    语法:hexists key field
    解释:判断hash表中是否存在某个域
    1. redis 127.0.0.1:6379> hexists user.1 name  #存在
    2. (integer) 1
    3. redis 127.0.0.1:6379> hexists user.1 nofield  #不存在
    4. (integer) 0
    5. redis 127.0.0.1:6379> hexists use1 nofield #hash表不存在
    6. (integer) 0
    复制代码

    e
    )hkeys

    语法:hkeys key
    解释:获取hash表的所有域
    1. redis 127.0.0.1:6379> hkeys user.1  #存在的hash表
    2. 1) "name"
    3. 2) "age"
    4. 3) "tech"
    5. 4) "fri"
    6. redis 127.0.0.1:6379> hkeys user.4 #不存在的hash
    7. (empty list or set)
    复制代码

    f)hvals


    语法:hvals key
    解释:获取hash表的所有域值
    1. redis 127.0.0.1:6379> hvals user.1  #存在hash
    2. 1) "zhangsan"
    3. 2) "45"
    4. 3) "lisi"
    5. 4) "5"
    6. redis 127.0.0.1:6379> hvals user.4 #不存在
    7. (empty list or set)
    复制代码
      3)修改


    语法:hincrby key field increment
    解释:hash表field域的数值增加步长increment,如果increment是负值,则是递减。如果域不存在,初始值视为0
    1. redis 127.0.0.1:6379> hincrby user.1 age 2  #增加2
    2. (integer) 47
    3. redis 127.0.0.1:6379> hincrby user.1 age -3  #减少3
    4. (integer) 44
    5. redis 127.0.0.1:6379> hincrby user.1 age2 -3 #域不能存在,初始值是0
    6. (integer) -3
    复制代码

    4)删除
    语法:hdel key field[field]
    解释:删除hash的域,如果指定多个field,则删除多个
    1. redis 127.0.0.1:6379> hkeys user.1
    2. 1) "name"
    3. 2) "age"
    4. 3) "tech"
    5. 4) "fri"
    6. 5) "age2"
    7. redis 127.0.0.1:6379> hdel user.1 age2  #删除一个域
    8. (integer) 1
    9. redis 127.0.0.1:6379> hkeys user.1
    10. 1) "name"
    11. 2) "age"
    12. 3) "tech"
    13. 4) "fri"
    14. redis 127.0.0.1:6379> hdel user.1 fri tech #删除2个域
    15. (integer) 2
    16. redis 127.0.0.1:6379> hkeys user.1
    17. 1) "name"
    18. 2) "age"
    19. redis 127.0.0.1:6379> hdel user.1 bb #删除一个不存在的域
    20. (integer) 0 #返回0
    复制代码

    5)其他


    语法:hlen key
    解释:获取hash的域数量
    1. redis 127.0.0.1:6379> hkeys user.1
    2. 1) "name"
    3. 2) "age"
    4. redis 127.0.0.1:6379> hlen user.1 #存在2个域
    5. (integer) 2
    6. redis 127.0.0.1:6379> hlen user.4  #不存在的hash
    7. (integer) 0
    复制代码

      
    关于hash的更多详细用法,请参阅:http://redis.io/commands#hash


    如果感觉对您有所帮助,请粉新浪微博:http://weibo.com/lovecoder



    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-6-14 04:20 , Processed in 0.352157 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

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