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

【Redis】redis5种数据类型(哈希)

目录

基本介绍

命令

HSET

HGET

HEXISTS

HKEYS

HVALS

HGETALL

HMGET

HLEN

HSETNX

HINCRBY

HINCRBYFLOAT

HSTRLEN

内部编码

原生字符串类型、哈希类型、序列化字符串json作缓存的区别


基本介绍

哈希类型中的映射关系是field-value,用于区分redis整体的键值对(key-value)

命令

HSET

设置hash中指定的字段(field)和值(value)

语法:

HSET key field value [field  value ..]

时间复杂度:O(1);

返回值:添加的字段的个数。

HGET

获取hash中指定字段的值

语法:

HGET key field

时间复杂度:O(1)

返回值:如果查询的key或者field不存在,返回nil 

HEXISTS

判断hash中是否有指定的字段

语法:

HEXISTS key field

时间复杂度:O(1)

返回值:1表示存在,0表示不存在

HDEL

删除hash中指定的字段

语法:

HDEL key field [field ....]

时间复杂度:O(1);

返回值:本次删除字段的个数。

和del区分,del删除的是key,hdel删除的是field

HKEYS

获取hash中的所有字段 

语法:

HKEYS key

时间复杂度:O(N),这个操作先根据key找到对应的hash,然后再遍历hash,这里的N是hash的元素个数

返回值:字段列表field

注意!这个操作也是存在一定的风险,与key * 类似,如果元素多的话,遍历的时间就比较久,就会把我们的redis阻塞很久。

HVALS

获取hash中所有的值

语法:

 HVALS key

时间复杂度:O(N)

返回值:所有的值

HGETALL

获取hash中的所有字段以及对应的值

语法:

HGETALL key

时间复杂度:O(N)

返回值:字段和对应的值。

HMGET

一次查询多个field对应的值

语法:

HMGET key field1 field2 ..

返回值:多个value的顺序和field的顺序是匹配的。

HLEN

获取hash中所有字段的个数

语法:

HLEN key

时间复杂度:O(1)

返回值:字段个数

HSETNX

在字段不存在的情况下,设置hash中的字段和值

语法:

HSETNX key field value

时间复杂度:O(1)

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

HINCRBY

将hash中字段对应的数值添加指定的值(整数)

语法:

HINCRBY key field increment

时间复杂度:O(1)

返回值:该字段变化之后的值

HINCRBYFLOAT

将hash中字段对应的数值添加指定的值(小数)

语法:

HINCRBYFLOAT key field increment

时间复杂度:O(1)

返回值:该字段变化之后的值

HSTRLEN

计算value的字符串长度

语法:

HSTRLEN key field

内部编码

哈希的内部编码有两种:

ziplist(压缩列表):当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个)、同时所有值都小于hash-max-ziplist-value配置(默认64字节)时,redis会使用ziplist作为哈希的内部实现,ziplist使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比hashtable更加优秀。

hashtable(哈希表):当哈希类型无法满足ziplist 的条件时,redis会使用hashtable作为哈希的内部实现,因为此时ziplist的读写效率会下降,而hashtable的读写时间复杂度是O(1)。

原生字符串类型、哈希类型、序列化字符串json作缓存的区别

1、原生字符串类型--使用字符串类型,每个属性一个键

set user:1:name James

set user:1:age 23

  • 优点:实现简单,针对个别属性变更也很灵活。
  • 缺点:占用过多的键,内存占用量较大,同时用户信息在redis中比较分散,缺少内聚性,没有实用性。

2、序列化字符串类型,例如json格式

  • 优点:针对总是以整体作为操作的信息比较合适,编程也简单,同时,如果序列化方式合理的话,内存利用率也比较高。
  • 缺点:本身序列化和反序列需要一定开销,同时如果总是操作个别属性则非常不灵活。

3、哈希类型

  • 优点:简单、直观、灵活,尤其针对信息局部的修改或获取操作。
  • 缺点:需要控制哈希在ziplist和hashtable两种编码之间的转换,可能会造成较大的内存损耗

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 正点原子阿尔法ARM开发板-IMX6ULL(三)——汇编LED驱动实验-上
  • docker conda
  • 【Postgresql】地理空间数据的存储与查询,查询效率优化策略,数据类型与查询速度的影响
  • 国家商用密码算法——SM4、SM7、SM9
  • 一区霜冰算法+双向深度学习模型+注意力机制!RIME-BiTCN-BiGRU-Attention
  • C语言 ——— 学习并使用条件编译指令
  • 【佳学基因检测】如何使用Letsencrypt对一个网站进行加密?
  • 【Python常用库_1】网络安全清洁专家——Bleach
  • TiDB-从0到1【完结】
  • 细致刨析JDBC ① 基础篇
  • Windows10 如何配置python IDE
  • Apple Intelligence深夜炸场!苹果发布4颗自研芯片,iPhone/iWatch/AirPods大升级
  • 专业级PDF编辑神器大比拼:效率与功能并重的选择
  • 【日常记录-Java】SpringBoot中使用无返回值的异步方法
  • Docker基础-Docker Compose使用
  • 【知识碎片】第三方登录弹窗效果
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • CentOS6 编译安装 redis-3.2.3
  • dva中组件的懒加载
  • EOS是什么
  • ES6 学习笔记(一)let,const和解构赋值
  • Flannel解读
  • js学习笔记
  • js作用域和this的理解
  • React中的“虫洞”——Context
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • 从重复到重用
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 理解在java “”i=i++;”所发生的事情
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 进程与线程(三)——进程/线程间通信
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (七)Activiti-modeler中文支持
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .NET Framework、.NET Core 、 .NET 5、.NET 6和.NET 7 和.NET8 简介及区别
  • .net mvc 获取url中controller和action
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .net2005怎么读string形的xml,不是xml文件。
  • .net中我喜欢的两种验证码
  • /var/spool/postfix/maildrop 下有大量文件
  • [20190401]关于semtimedop函数调用.txt
  • [AIGC] Java 和 Kotlin 的区别
  • [BT]小迪安全2023学习笔记(第15天:PHP开发-登录验证)
  • [ccc3.0][数字钥匙] UWB配置和使用(二)
  • [Django开源学习 1]django-vue-admin
  • [Excel VBA]单元格区域引用方式的小结
  • [hdu 1711] Number Sequence [kmp]