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

hash.

Redis 自身就是键值对结构

Redis 自身的键值对结构就是通过 哈希 的方式来组织的

哈希类型中的映射关系通常称为 field-value,用于区分 Redis 整体的键值对(key-value),
注意这里的 value 是指 field 对应的值,不是键(key)对应的值,注意 value 在不同上下文的作用

常见命令

1)hset

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

hset key field value

返回设置成功的(field-value)个数  O(N)(N field的个数)

2)hget

获取 hash 中指定字段的值

hget key field

返回字段对应的值或者nil  O(1)

3)hdel

删除 hash 中指定的字段

hdel key field [field ...]

返回删除的字段的个数  O(N) (N 字段的个数)

del  删除 key         hdel 删除 field

4)hkeys

根据 key 找到对应的 hash,再遍历 hash (获取 hash 中所有的字段)

hkeys key

返回字段列表  O(N) (N 字段的个数)

5)hvals

获取 hash 中所有的 value

hvals key

返回 hash 中的所有值  O(N) (N field的个数)

6)hgetall

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

hgetall key

返回所有字段和对应的值  O(N) (N field的个数)

7)hmget

hmget key field [field ...]

返回字段对应的值或者nil  O(N)(N 查询元素的个数)

在使用 HGETALL 时,如果哈希元素个数比较多,会存在阻塞 Redis 的可能。如果开发人员只需要获取部分 field,可以使用 HMGET,如果⼀定要获取全部 field,可以尝试使用 HSCAN 命令,该命令采用渐进式遍历哈希类型
敲一次命令,遍历一小部分,连续执行多次就可以完成整个的遍历过程(类似于哈希表的扩容)

8)hlen

获取 hash 中所有字段的个数(不需要遍历)

hlen key

返回所有字段个数  O(1)

9)hsetnx

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

hsetnx key field [field ...]

返回 1表示设置成功,0 表示设置失败  O(1)

10)hincrby

hincrby key field increment(可以是负数)

返回字段加减后的值  O(1)

11)hincrbyfloat

hincrbyfloat key field increment

返回字段加减后的值  O(1)

编码方式

哈希的内部编码有两种:

1. ziplist(压缩列表)

压缩的本质是针对数据进行重新编码(节省内存空间)

不同的数据有不同的特点,根据这些特点进行设计后。重新编码之后,就能够缩小体积

2. hashtable(哈希表)

hash 首先是一个数组,数组上有些位置没有元素,浪费空间

ziplist 进行读写操作的速度比较慢,节省空间

hashtable 的读写时间复杂度为 O(1)

哈希表中的元素个数比较少,用 ziplist 表示,元素个数比较多,用 hashtable 表示

每个 value 的值长度都比较短,用 ziplist 表示,某个 value 比较长,会转换成 hashtable

在 redis.conf 文件中:

hash-max-ziplist-entries 配置(默认512个)

hash-max-ziplist-value 配置(默认64字节)

应用场景

作为缓存

string 也是可以作为缓存使用

存储结构化的数据使用 hash 比较合适(类似于数据库,表结构)

相比于使用 JSON 格式的字符串缓存信息,哈希类型更加直观,并且在操作上更加灵活

如果使用 JSON 的格式表示 UserInfo

如果执行使用其中的某个 field 或者修改某个 field

需要把整个 JSON 都读出来,解析成对象,操作 field ,再重写成 JSON 字符串写回去

如果使用 hash 的方式来表示 UserInfo  —— 空间消耗大

可以使用 field 来表示对象的每个属性(数据的每个列)

可以方便的修改/获取任何一个属性

原生字符串类型 —— 使用字符串类型,每个属性一个键  ——低内聚

相当于是把同一个数据的各个属性,给分散开表示

缓存方式对比总结:

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

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

2.序列化字符串,例如 JSON

优点:针对总是以整体作为操作的信息⽐较合适,编程也简单。同时,如果序列化方案选择             合适,内存的使用效率很
缺点:本⾝序列化和反序列需要⼀定开销,同时如果总是操作个别属性则非常不灵活

3.哈希类型

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

1)哈希类型是比较稀疏的,关系型数据库时完全结构化的

哈希类型每个键可以有不同 field ,关系型数据库添加新的列,所有行都要为其设置值

2)关系型数据库可以做复杂的关系查询,Redis 模仿关系型复杂查询较难实现(联合查询,聚合查询 ...)

相关文章:

hash.

Redis 自身就是键值对结构 Redis 自身的键值对结构就是通过 哈希 的方式来组织的 哈希类型中的映射关系通常称为 field-value,用于区分 Redis 整体的键值对(key-value), 注意这里的 value 是指 field 对应的值,不是键…...

JMeter重要的是什么

重要特性 支持多种协议: JMeter支持对多种协议进行性能测试,包括HTTP、HTTPS、FTP、JDBC(数据库)、LDAP、JMS、SOAP、REST等。这使得它能够适应各种不同的测试场景。强大的负载模拟能力: JMeter能够模拟大量的虚拟用户…...

Java研学-Activiti7工作流(二)

三 Activiti7 搭建环境 1 开发环境 Jdk1.8或以上版本;Mysql 5及以上的版本;Tomcat8.5;IDEA;Activiti 7.0.0.SR1(流程设计器) 2 安装Activiti流程设计器 ① 在线安装:在Plugins中搜索actiBPM,然后点击Sear…...

鸿蒙开发-编译器使用

15.2编译器使用-目录详解 15.3 编辑器使用-切换工程模块 15.3 编辑器使用-多设备预览 15.1 编辑器使用-编辑中英文...

HTML5+CSS前端开发【保姆级教学】+图像标签附路径问题

引入: Hello!,各位编程猿们!我们知道在网页文档中合理地加入图像,会使文档变得更加生动活泼和引人入胜,而且看上去更加专业、更具有信息性且易于浏览。本期主要介绍图像标签以及超链接标签 一、设置图像标…...

快速启动 Rust + WebAssembly 项目

一、 模板一:wasm-pack-template 适合目标:构建一个 Rust 写的 WebAssembly npm 包 这是最常用、也是最官方推荐的起点模板。它提供了: Cargo.toml 配置好 WebAssembly 的 crate 类型(cdylib)已设置 wee_alloc 和 pan…...

Linux命令-vim编辑

用vi或vim命令进入vim编辑器。 基础: u -- 撤销上一次操作。 x -- 剪切当前光标所在处的字符。 yy -- 复制当前行。 dd -- 剪切当前行。 p -- 粘贴剪贴板内容到光标下方。 i -- 切换到输入模式,在光标当前位置开始输入文本。 :wq -- 保存并退出Vim 编辑器。…...

Windows单机模拟MySQL主从复制

这里写自定义目录标题 下载MySQL ZIP压缩包安装主库1、创建配置文件2、安装服务3、初始化数据库4、启动服务5、配置主库 安装从库1、配置ini文件2、安装服务3、初始化数据库4、启动服务5、配置从库6、验证从库状态 操作主库验证 下载MySQL ZIP压缩包 https://dev.mysql.com/do…...

【区块链+ 人才服务】广州理工学院区块链教学平台 | FISCO BCOS 应用案例

深圳市火链文化传播有限公司与广州理工学院合作,共同建设了“区块链教学平台”。该平台旨在探索区块链技术在教 育领域的应用,特别是在混合式教学模式中的创新实践。 “区块链教学平台”运用了区块链技术的核心优势,包括分布式、信息防篡改以…...

Java Stream深度解析 高阶技巧与性能优化实战

文章目录 一、Stream底层机制揭秘1.1 Stream流水线架构1.2 Spliterator探秘 二、自定义收集器高级实现2.1 实现高性能统计收集器2.2 多级分组优化技巧 三、并行流深度优化3.1 并行度控制策略3.2 工作窃取(Work-Stealing)优化 四、无限流与短路操作4.1 生成无限质数流4.2 短路操…...

【JavaEE初阶】多线程重点知识以及常考的面试题-多线程进阶(一)

本篇博客给大家带来的是多线程的知识点, . 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅🚀 要开心要快乐顺便进步 1. 常…...

计算机视觉图像分割入门:阈值、区域生长与分水岭算法

计算机视觉图像分割入门:阈值、区域生长与分水岭算法 一、前言二、图像分割基础概念大揭秘​2.1 图像分割的定义​2.2 图像分割的目的与作用​2.3 图像分割的应用领域​三、阈值算法:最简单的图像分割法​3.1 原理剖析​3.2 手动阈值分割及代码示例​3.3 自动阈值分割方法及代…...

android​​弱网环境数据丢失解决方案(3万字长文)

在移动互联网时代,Android 应用已经成为人们日常生活中不可或缺的一部分。从社交媒体到在线购物,从移动办公到娱乐游戏,用户对应用的依赖程度与日俱增。然而,尽管网络基础设施在全球范围内得到了显著改善,弱网环境依然…...

设计模式:迪米特法则 - 最少依赖,实现高内聚低耦合

一、迪米特法则简介 迪米特法则(Law of Demeter,简称 LoD),也称为“最少知识法则”,核心思想是:一个对象应当对其他对象有最少的了解,仅与直接相关的对象交互。通过减少对象之间的耦合度&#…...

React 把一系列 state 更新加入队列

把一系列 state 更新加入队列 设置组件 state 会把一次重新渲染加入队列。但有时你可能会希望在下次渲染加入队列之前对 state 的值执行多次操作。为此,了解 React 如何批量更新 state 会很有帮助。 开发环境:Reacttsantd 学习内容 什么是“批处理”以…...

AntVG2可视化学习与开发笔记-React19(持续更新)

目录 开始工作 第一步:创建画布空间 第二步:获取画布空间并挂载AntVG2 第三步:进行画布设计配置与数据挂载 第四步:完整代码 实际效果如下 参数理解 一、scale 1. 归一化range:[0,1] 2.nice、domainMin 开始工作 第一…...

从PPT到DeepSeek开启信息可视化的全新之旅

在当今信息爆炸的时代,如何高效、生动地展示信息成为了个人与企业在沟通、汇报、推广等场景中面临的关键挑战。传统的演示工具,如PPT,虽然曾经是展示信息的主力军,但随着技术的发展和人们审美、交互需求的提升,其局限性…...

spark-sql学习内容总结

SparkSession 定义与功能‌:SparkSession是Spark SQL的入口,封装SparkContext,提供了创建DataFrame和执行SQL的能力。它实质上是SQLContext和HiveContext的组合,因此兼容这两者的API。 创建方式‌:在使用spark-shell…...

Spring-AI-alibaba 结构化输出

1、将模型响应转换为 ActorsFilms 对象实例&#xff1a; ActorsFilms package com.alibaba.cloud.ai.example.chat.openai.entity;import java.util.List;public record ActorsFilms(String actor, List<String> movies) { } GetMapping("/toBean")public Ac…...

ffmpeg实现视频转码

ffmpeg 实现视频转码 什么是视频编码 视频上传成功后需要对视频进行转码处理。 什么是视频编码&#xff1f; 查阅百度百科如下&#xff1a; 所谓视频编码方式就是指通过压缩技术&#xff0c;将原始视频格式的文件转换成另一种视频格式文件的方式。视频流传输中最为重要的编解…...

【Java学习笔记】Java初级阶段代码规范

Java 初级阶段代码规范 1. 类、方法的注释&#xff0c;要以 javadoc 的方式来写。 2. 非 Java Doc 的注释&#xff0c;往往是给代码的维护者看的&#xff0c;着重告读者为什么这样写&#xff0c;如何修改&#xff0c;注重什么问题等 3. 使用 tab 操作&#xff0c;实现缩进&am…...

适应 AI 时代的软件开发流程:用 AI + TDD 构建可维护项目

🧠 适应 AI 时代的软件开发流程:用 AI + TDD 构建可维护项目 本文面向有系统开发经验的工程师,分享如何结合 Git 管理、AI 协作、YAML 驱动与 TDD 开发方式,高效构建一个可维护、可协作、可交付的嵌入式或通用工程项目。适合 BLE 模块、协议栈组件、物联网控制系统等项目落…...

EasyCVR视频汇聚系统:AIoT+视频智能分析赋能食品安全生产全流程监管

近年来,随着食品安全问题频发,消费者对食品加工企业的信任度逐渐下降,企业生产监管难度加大,市场监管也面临诸多挑战。在这样的背景下,食品加工企业迫切需要通过智能化手段提升生产管理水平,满足消费者和监管部门的要求,同时实现自身业绩的提升。 本文将结合EasyCVR与智…...

ASP.NET Core 性能优化:分布式缓存

文章目录 前言一、分布式缓存的核心概念作用&#xff1a;与内存缓存的区别&#xff1a; 二、ASP.NET Core 中的 IDistributedCache三、常用分布式缓存实现1&#xff09;Redis&#xff08;最常用&#xff09;2&#xff09;SQL Server3&#xff09;NCache&#xff08;企业级方案&…...

一款安全好用的企业即时通讯平台,支持统一门户

在数字化转型的浪潮中&#xff0c;企业面临着信息孤岛、系统分散、协作低效等诸多挑战。BeeWorks作为一款专为企业打造的数字化底座平台&#xff0c;凭借其强大的企业内部应用集成能力和单点登录功能&#xff0c;正在成为企业数字化转型的有力推手。 数字化底座平台&#xff1…...

C语言 栈 的 描述 和 详解

什么是栈&#xff1f; 栈是一种特殊的线性数据结构。 定义及特点 - 栈是一种只能在一端进行插入和删除操作的特殊线性表。它按照后进先出&#xff08;Last In First Out&#xff0c;LIFO&#xff09;的原则存储数据&#xff0c;就像一个只能从顶部取放物品的箱子&#xff0c;…...

.NET MCP 示例

服务器端示例 基础服务器 以下是一个基础的 MCP 服务器示例&#xff0c;它使用标准输入输出&#xff08;stdio&#xff09;作为传输方式&#xff0c;并实现了一个简单的回显工具&#xff1a; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.H…...

【论文阅读】MOE奠基论文《Adaptive Mixtures of Local Experts》

《Adaptive Mixtures of Local Experts》 前言一、让协同学习竞争1.1 方案1.2 方案演变的由来 二、让竞争学习协同2.1 竞争学习2.2 竞争学习协同 三、案例验证3.1 任务背景3.2 实验结果3.3 后续工作 (Future Work) 前言 论文提出了一个基于多个分离网络的有监督学习方案,该方案…...

MATLAB中replace函数用法

目录 语法 说明 示例 替换字符串数组中的子字符串 替换匹配模式的子字符串 替换多个子字符串 replace函数的功能是查找并替换一个或多个子字符串。 语法 newStr replace(str,old,new) 说明 newStr replace(str,old,new) 将所有出现的子字符串 old 替换为 new。如果 …...

MATLAB基本数据类型

1. ‌数值类型‌ ‌整数类型‌&#xff1a; 有符号整数&#xff08;如 int8, int16, int32, int64&#xff09;和无符号整数&#xff08;如 uint8, uint16, uint32, uint64&#xff09;。 这些类型分别占用 1、2、4、8 个字节&#xff0c;表示不同范围的整数值。 ‌浮点数类…...

LeetCode 热题 100_单词拆分(86_139_中等_C++)(动态规划)

LeetCode 热题 100_单词拆分&#xff08;86_139&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;动态规划&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一&#xff08;动态规划&#xff09;&a…...

Spring Boot 集成spring-boot-starter-data-elasticsearch

第一步&#xff0c;添加Maven依赖 <!--es--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency> 第二步&#xff0c;配置yml spring:elastic…...

【Linux】Linux下的gcc/g++编译器与动静态库

目录 对程序的认知&&初识gcc逐步分析程序的编译步骤预编译【进行宏替换】gcc需要执行的指令 ⭐ 编译【C语言——>汇编语言】gcc要执行的指令⭐ 汇编【汇编语言——>可重定位目标二进制文件】gcc需要执行的指令 链接【生成可执行文件或库文件】gcc需要执行的指令 …...

从暴力到动态规划再到双指针:使用 Java 探索接雨水问题的不同解法

文章目录 一、问题描述二、暴力法&#xff08;Brute Force&#xff09;思路实现代码 三、动态规划法&#xff08;Dynamic Programming&#xff09;思路实现代码 四、双指针法&#xff08;Two Pointers&#xff09;思路实现代码 五、方法对比 在本文中&#xff0c;我们将探讨经典…...

CI/CD(十) Jenkins共享库与k8s集成

一、创建k8skey&#xff08;v1.28.2版本&#xff09; 1、查看k8s集群名称 rootk8s-master:~# kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE * kubernetes-adminkubernetes kubernetes kuber…...

5.Elasticsearch - Spring Data 框架

一、Kibana 介绍 Kibana 是一个免费且开放的用户界面&#xff0c;能够让你对 Elasticsearch 数据进行可视化&#xff0c;并让你在 Elastic Stack 中进行导航。你可以进行各种操作&#xff0c;从跟踪查询负载&#xff0c;到理解请求如何流经你的整个应用&#xff0c;都能轻松完…...

如何通过技术手段降低开发成本

通过技术手段降低开发成本的关键在于&#xff1a; 自动化工具的使用、优化开发流程、云计算资源的利用、开发技术栈的精简与创新、团队协作平台的高效管理。 其中&#xff0c;自动化工具的使用是最为有效的技术手段之一。自动化工具通过减少人工干预和重复性工作&#xff0c;大…...

java android持久化数据

1. SQLite 数据库&#xff08;Android 内置&#xff09; 1.1 创建数据库帮助类 public class DatabaseHelper extends SQLiteOpenHelper {private static final String DATABASE_NAME "MyDatabase.db";private static final int DATABASE_VERSION 1;// 表名和列名…...

Chromium 134 编译指南 macOS篇:系统环境准备(一)

1. 引言 在当今浏览器领域&#xff0c;开源项目Chromium的地位举足轻重。作为众多现代浏览器的技术基础&#xff0c;Chromium不仅驱动着Google Chrome&#xff0c;还为Microsoft Edge、Opera等众多知名浏览器提供了核心引擎。对于热衷于浏览器技术研究&#xff0c;或希望开发自…...

性能优化-Spring参数配置、数据库连接参数配置、JVM调优

SpringBoot配置参数 server:tomcat:#线程池配置max-threads: 200 # 最大工作线程数&#xff08;建议&#xff1a;2~4倍CPU核心数&#xff0c;如16核设200-400&#xff09;min-spare-threads: 20 # 最小空闲线程&#xff08;应对突发流量&#xff0c;…...

【2025年泰迪杯数据挖掘挑战赛】B题 数据预处理+问题建模与求解

目录 2025年泰迪杯数据挖掘挑战赛 B题数据预处理 问题一、二建模与求解三、数据预处理3.1 基于多核并行的协同处理方法的数据读取3.2 基于多核并行协同处理的数据聚合 四、问题一五、问题一技术文档与matlab代码 2025年泰迪杯数据挖掘挑战赛 B题 数据预处理 问题一、二建模与求…...

git怎么使远程分支回退到指定的节点处

git使远程分支回退到指定的节点 引言场景描述步骤 引言 最近提交代码的时候&#xff0c;总将分支合并错&#xff0c;原本要合到A分支&#xff0c;结果合并到了B分支&#xff0c;这样就导致b分支需要回退到我没有合并之前的节点处。 本文记录下怎么将远程分支回退到指定的节点。…...

Spring Boot 使用 QQ 企业邮箱发送邮件的完整指南(含 535 错误排查)

在 Spring Boot 项目中集成邮件功能非常常见,尤其是用户注册通知、异常报警、定期报告等场景。但如果你使用的是 QQ 企业邮箱(smtp.exmail.qq.com),可能会遇到如下典型错误: 535 Error: authentication failed, system busy这篇博客将详细解析出现该问题的原因、排查路径…...

MySQL联合查询||多表查询

mysql中如何注释...

java 递归遍历JSON字符串获取某个字段的值

在 Java 中&#xff0c;若要递归遍历 JSON 字符串并获取特定字段的值&#xff0c;可借助 Jackson 库。以下是一个示例代码&#xff0c;它能实现递归遍历 JSON 字符串并获取指定字段的值。 import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.data…...

OceanBase4.0社区版 单机快速部署

以下内容结合OceanBase官方文档进行安装部署测试 官方文档地址&#xff1a;https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002012693 一.部署方式 OceanBase 企业版&#xff1a; • 使用 OCP 部署 OceanBase 集群 • 使用 OBD 部署 OceanBase 集群 •…...

CExercise_05_1伪随机数_2编写程序模拟掷骰子的游戏(每一次投掷,都投掷两个骰子)

题目&#xff1a; 编写程序模拟掷骰子的游戏&#xff08;每一次投掷&#xff0c;都投掷两个骰子&#xff09;。每局游戏的规则如下&#xff1a; 第一次掷的时候&#xff1a; 如果点数之和为 7 或 11 则获胜&#xff1b; 如果点数之和为2、3或12则落败&#xff1b; 其他情况下的…...

【更新至2023年】2000-2023年中国气候政策不确定性指数(全国、省、市三个层面)

【更新至2023年】2000-2023年中国气候政策不确定性指数&#xff08;全国、省、市三个层面&#xff09; 1.时间&#xff1a;2000-2023年 2.来源&#xff1a;使用人工审计和深度学习算法MacBERT模型&#xff0c;基于中国《人民日报》《光明日报》《经济日报》《环球时报》《科技…...

机器学习中 提到的张量是什么?

在机器学习中, 张量(Tensor) 是一个核心数学概念,用于表示和操作多维数据。以下是关于张量的详细解析: 一、数学定义与本质 张量在数学和物理学中的定义具有多重视角: 多维数组视角 传统数学和物理学中,张量被定义为多维数组,其分量在坐标变换时遵循协变或逆变规则。例…...

【Python爬虫】简单案例介绍3

本文继续接着我的上一篇博客【Python爬虫】简单案例介绍2-CSDN博客 目录 3.3 代码开发 3.3 代码开发 编写代码的步骤&#xff1a; request请求科普中国网站地址url&#xff0c;解析得到类名为"list-block"的div标签。 for循环遍历这个div列表里的每个div&#xff0…...