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

Redis常用数据类型--Hash

Hash

  • 常用命令
    • HSET
    • HGET
    • HEXISTS
    • HDEL
    • HKEYS/HVALS
    • HGETALL
    • HMGET
    • HLEN
    • HSETNX
    • HINCRBY/HINCRBYFLOAT
  • 内部编码
  • 典型应用场景

常用命令

HSET

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

 HSET key field value [field value ...]

时间复杂度:插⼊⼀组 field 为 O(1), 插⼊ N 组 field 为 O(N)

HGET

获取 hash 中指定字段的值

HGET key field

时间复杂度:O(1)

HEXISTS

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

HEXISTS key field

时间复杂度:O(1)

HDEL

删除 hash 中指定的字段

HDEL key field [field ...]

时间复杂度:删除⼀个元素为 O(1). 删除 N 个元素为 O(N)

HKEYS/HVALS

获取 key 中所有 fields / values

HKEYS key/HVALS key

时间复杂度:O(N), N 为 field 的个数

HGETALL

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

 HGETALL key

时间复杂度:O(N), N 为 field 的个数

HMGET

⼀次获取 hash 中多个字段的值

 HMGET key field [field ...]

时间复杂度:只查询⼀个元素为 O(1), 查询多个元素为 O(N), N 为查询元素个数

HLEN

获取 hash 中的所有字段的个数

HLEN key

时间复杂度:O(1)

HSETNX

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

HSETNX key field value

时间复杂度:O(1)

HINCRBY/HINCRBYFLOAT

将 hash 中字段对应的数值添加指定的整数/浮点数

HINCRBY key field increment/ HINCRBYFLOAT key field increment

时间复杂度:O(1)

内部编码

哈希的内部编码有两种:

  • ziplist(压缩列表):当哈希类型元素个数⼩于 hash-max-ziplist-entries 配置(默认 512 个)、 同时所有值都⼩于 hash-max-ziplist-value 配置(默认 64 字节)时,Redis 会使⽤ ziplist 作为哈 希的内部实现,ziplist 使⽤更加紧凑的结构实现多个元素的连续存储,所以在节省内存⽅⾯⽐ hashtable 更加优秀。
  • hashtable(哈希表):当哈希类型⽆法满⾜ ziplist 的条件时,Redis 会使⽤ hashtable 作为哈希 的内部实现,因为此时 ziplist 的读写效率会下降,⽽ hashtable 的读写时间复杂度为 O(1)。

典型应用场景

映射关系表⽰⽤⼾信息

相关文章:

  • 只用一台服务器部署上线(宝塔面板) 前后端+数据库
  • vue基本理解
  • [网络安全] IIS----WEB服务器
  • wireshark分析数据包:追踪流
  • C语言搭配EasyX实现贪吃蛇小游戏
  • AJAX-认识URL
  • 通过Nacos权重配置,实现微服务金丝雀发布效果(不停机部署)
  • leetcode209长度最小的子数组|滑动窗口算法详细讲解学习
  • Docker 集群配置
  • 如何使用wireshark解析二进制文件
  • ubuntu+nginx+uwsgi部署django项目
  • 【misc | CTF】攻防世界 2017_Dating_in_Singapore
  • Compose | UI组件(十二) | Lazy Layout - 列表
  • 行为型设计模式—命令模式
  • 【issue-halcon例程学习】lines_gauss.hdev
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 4. 路由到控制器 - Laravel从零开始教程
  • 78. Subsets
  • Android 控件背景颜色处理
  • Create React App 使用
  • C语言笔记(第一章:C语言编程)
  • ES6 ...操作符
  • Laravel5.4 Queues队列学习
  • Objective-C 中关联引用的概念
  • rc-form之最单纯情况
  • SpiderData 2019年2月23日 DApp数据排行榜
  • 工程优化暨babel升级小记
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 追踪解析 FutureTask 源码
  • 最简单的无缝轮播
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​如何在iOS手机上查看应用日志
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (翻译)terry crowley: 写给程序员
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)jdk与jre的区别
  • (转)使用VMware vSphere标准交换机设置网络连接
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .net core 6 redis操作类
  • .NET Core Web APi类库如何内嵌运行?
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • []C/C++读取串口接收到的数据程序
  • [AIGC 大数据基础]hive浅谈
  • [CISCN2019 华东南赛区]Web11
  • [cocos creator]EditBox,editing-return事件,清空输入框
  • [HackMyVM]靶场 Quick3
  • [IE编程] IE8 新增的C++开发接口
  • [Java开发之路](14)反射机制
  • [leetcode] 103. 二叉树的锯齿形层次遍历