当前位置: 首页 > news >正文

Redis数据类型之hash

上篇文章:

Redis数据类型之Stringhttps://blog.csdn.net/sniper_fandc/article/details/149139418?fromshare=blogdetail&sharetype=blogdetail&sharerId=149139418&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

目录

1 hset和hget

2 hexists和hdel

3 hkeys和hvals

4 hgetall、hmget和hlen

5 hincrby和hincrbyfloat

6 hash的使用场景


        hash数据结构中键叫field,值是value。键名不叫key是为了和redis的键值对结构区分。相关命令是h系列的命令,需要保证value是hash类型的。

1 hset和hget

        命令:hset key field value

        设置key的value为hash类型,field为键,value是field对应的值。可以同时设置多个field-value,因此返回值是设置hash中键值对的个数。时间复杂度O(1)。

        命令:hget key field

        获取key的value中键为field的value。时间复杂度O(1)。

2 hexists和hdel

        命令:hexists key field

        判断key的value中field的键值对是否存在。返回值1表示存在,0表示不存在。时间复杂度O(1)。

        命令:hdel key field1 field2 ...

        批量删除多个field。返回值为成功删除的个数。时间复杂度O(N),N表示删除的个数。

3 hkeys和hvals

        命令:hkeys key

        查询key对应的hash中所有的键field。返回值为key对应的所有的field。时间复杂度O(N),N表示field的个数。

        命令:hvals key

        查询key对应的hash中所有的value。返回值为key对应的所有的field的value。时间复杂度O(N),N表示value的个数。

4 hgetall、hmget和hlen

        命令:hgetall key

        获取key的hash类型的值的所有field和value。时间复杂度O(N),N表示field的个数。返回值每两行为一对键值对。

        命令:hmget key field1 field2 ...

        获取key的hash类型的指定field(可以同时获取多个)的值。时间复杂度O(N),N表示field的个数。返回值field对应的值。

        命令:hlen key

        获取key的hash类型的长度。时间复杂度O(1)。

5 hincrby和hincrbyfloat

        命令:hincrby key field number

        对hash类型的field的value进行加减number(整数,正数是加,负数是减)。时间复杂度O(1)。

        命令:hincrbyfloat key field float

        对hash类型的field的value进行加减float(浮点数,正数是加,负数是减)。时间复杂度O(1)。

6 hash的使用场景

        hash主要用于存储结构化的数据(关系型数据库更适合,完全结构化的数据),比如在Java中经常使用user类似的对象存储用户的信息,并且会经常访问(热点数据),就可以把经常访问的用户信息放在redis中。

        即把user:id作为key,user具体的信息作为hash来存储,uid:1、name:zhangsan、age:18、gender:man等等,这里的uid、name、age和gender是field,对应的值是value。当缓存未命中时,就去数据库查询user信息,查询到了就写入redis并设置过期时间;否则就直接hget key获取对应的user信息返回。

        对于结构化数据存储有三种方式:

  1. string类型存储,set user:1:name zhangsan。优点是灵活简单,缺点是key太多了,并且很分散(低内聚)。
  2. JSON类型存储,set user:1 json。优点针对总是以整体作为操作的信息比较合适,编程也简单。同时,如果序列化方案选择合适,内存的使用效率很高。缺点是修改属性不灵活,序列化和反序列化需要开销。
  3. hash类型存储,这个不必多说。但是缺点是底层编码需要转换(ziplist和hashtable),对内存消耗可能较大。

下篇文章:

http://www.dtcms.com/a/272427.html

相关文章:

  • Android 网络开发核心知识点
  • ICML 2025|快手提出了基于残差的超低码率图像压缩方法ResULIC
  • 【Bluedroid】蓝牙协议栈控制器能力解析与核心功能配置机制(decode_controller_support)
  • git中的fork指令解释
  • Linux - firewall 防火墙
  • 强缓存和协商缓存详解
  • 机器学习核心算法:PCA与K-Means解析
  • Java从入门到精通!第三天(数组)
  • Shell 中的重定向
  • C++实习面试题
  • 如何看待java开发和AI的关系?
  • GO启动一个视频下载接口 前端可以边下边放
  • 【PyTorch】PyTorch中的数据预处理操作
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | DoubleVerticalSlider(双垂直滑块)
  • 图解LeetCode:79递归实现单词搜索
  • Django+DRF 实战:自定义异常处理流程
  • 20.4 量子安全加密算法
  • 案例分享--福建洋柄水库大桥智慧桥梁安全监测(二)之数字孪生和系统平台
  • 机器学习13——支持向量机下
  • TCP传输控制层协议深入理解
  • 当CCLinkIE撞上Modbus TCP:照明控制系统的“方言战争”终结术
  • VIP可读
  • 线性回归与正则化
  • Django专家成长路线知识点——AI教你学Django
  • 【PTA数据结构 | C语言版】顺序栈的3个操作
  • 【深度学习系列--经典论文解读】Gradient-Based Learning Applied to Document Recognition
  • LINUX710 MYSQL
  • linux-用户与用户组管理
  • serialVersionUID
  • 配置 msvsmon.exe 以无身份验证启动