【Redis】Hash类型介绍

【Redis】Hash类型介绍

目录

一、简介

在 Redis 中,哈希类型是指值本⾝⼜是⼀个键值对结构,形如 key = “key”,value = { { field1, value1 }, …, {fieldN, valueN} },在Redis中为了与key - value作区分,将Hash类型键值对结构表示为filed - value。

String与Hash对比图:

二、相关命令

2.1 hset 和 hget

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

语法:hset key field value [field value ...]
命令有效版本:2.0.0 之后

时间复杂度:插⼊⼀组 field 为 O(1), 插⼊ N 组 field 为 O(N)
返回值:添加的字段的个数。

也可以当修改字段的效果:

hget:获取 hash 中指定字段的值。

语法:hget key filed

命令有效版本:2.0.0 之后

时间复杂度:O(1)
返回值:字段对应的值或者 nil。

2.2 hexists

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

语法:hexists key filed

命令有效版本:2.0.0 之后

时间复杂度:O(1)
返回值:1 表⽰存在,0 表⽰不存在。

2.3 hdel

hdel删除 hash 中指定的字段。

语法:hdel key field [field ...]

命令有效版本:2.0.0之后

时间复杂度:删除⼀个元素为 O(1). 删除 N 个元素为 O(N).
返回值:本次操作删除的字段个数。

2.4 hkeys

hkeys获取 hash 中的所有字段。

语法:hkeys key

命令有效版本:2.0.0 之后

时间复杂度:O(N), N 为 field 的个数.
返回值:字段列表。

2.5 hvals

hvals 获取 hash 中的所有的值。

语法:hvals key

命令有效版本:2.0.0 之后

时间复杂度:O(N), N 为 field 的个数.
返回值:Hash所有value列表。

2.6 hgetall

hgetall获取 hash 中的所有的字段和值。

语法:hgetall key

命令有效版本:2.0.0 之后

时间复杂度:O(N), N 为 field 的个数.
返回值:Hash所有字段和对应的值。

2.7 hmget

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

hmget key field [field ...]

命令有效版本:2.0.0 之后

时间复杂度:只查询⼀个元素为 O(1), 查询多个元素为 O(N), N 为查询元素个数.
返回值:字段对应的值或者 nil。

2.8 hlen

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

语法:hlen key

命令有效版本:2.0.0 之后

时间复杂度:O(1)
返回值:字段个数。

2.9 hsetnx

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

语法:hsetnx key field value

命令有效版本:2.0.0 之后

时间复杂度:O(1)
返回值:1表⽰设置成功,0 表⽰失败。

2.10 hincrby

hincrby将 hash 中字段对应的数值(必须是整数)添加指定的值。

语法: hincrby key field increment

命令有效版本:2.0.0之后

时间复杂度:O(1)
返回值:该字段变化之后的值。

2.11 hincrbyfloat

hincrbyfloathincrby的浮点数版本, 将 hash 中字段对应的数值(可以是整数和浮点数)添加指定的值。

语法: hincrbyfloat key field increment

命令有效版本:2.6.0之后

时间复杂度:O(1)
返回值:该字段变化之后的值。

2.12 小结

命令执⾏效果时间复杂度
hset key field value设置值O(1)
hget key field获取值O(1)
hdel key field [field …]删除 fieldO(k), k 是 field 个数
hlen key计算 field 个数O(1)
hgetall key获取所有的 field-valueO(k), k 是 field 个数
hmget key field [field …]批量获取 field-valueO(k), k 是 field 个数
hmset key field value [field value …]批量获取 field-valueO(k), k 是 field 个数
hexists key field判断 field 是否存在O(1)
hkeys key获取所有的 fieldO(k), k 是 field 个数
hvals key获取所有的 valueO(k), k 是 field 个数
hsetnx key field value设置值,但必须在 field 不存在时才能设置成功O(1)
hincrby key field n对应 field-value +nO(1)
hincrbyfloat key field n对应 field-value +nO(1)
hstrlen key field计算 value 的字符串⻓度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)。

四、应用场景

4.1 作为缓存

存储结构化的数据的时候,使用 hash 更加合适。

使用hash表示:

Read more

如何在VS Code中安装GitHub Copilot进行AI编程

如何在VS Code中安装GitHub Copilot进行AI编程

本文教您轻松在VS Code中玩转GitHub Copilot:从安装认证到实战网页开发,5分钟解锁AI编程神器,还能自由切换模型、实时调试代码! 在Visual Studio Code中搭建GitHub Copilot编程环境需要经过几个关键步骤,以下是详细指南: 环境准备阶段 1. 安装最新版VS Code(当前版本≥1.85)官网下载地址:https://code.visualstudio.com/ 2. 拥有有效的GitHub账户(建议启用双重验证) 注册地址:https://github.com/ 3. 稳定的网络连接(Copilot需实时云端交互) 安装流程 1、安装VS Code后,选择”Use All features with Copilot for free”。如果已经安装VS Code,可以打开VS Code扩展市场(

By Ne0inhk
开源智能体搭建平台MaxKB4j 技术文档

开源智能体搭建平台MaxKB4j 技术文档

MaxKB4j 技术文档 项目概述 MaxKB4j (Max Knowledge Base for Java) 是一个基于 Java/Spring Boot 和 LangChain4j 构建的开源的 RAG(检索增强生成)知识库和 LLM 工作流平台,支持多模型集成、可视化工作流编排、知识库问答和多模态能力,专为构建企业级智能问答系统而设计。 核心特性 * 开箱即用的知识库问答: 支持上传本地文档或自动抓取网页内容,自动完成文本分块 → 向量化 → 向量数据库存储 → RAG 流程构建 * 模型无关的灵活集成: 支持多种主流大语言模型(OpenAI、Claude、Gemini、DeepSeek、Qwen、Ollama 等) * 可视化工作流编排: 内置低代码 AI 工作流引擎,支持条件分支、函数调用、多轮对话记忆 * MCP

By Ne0inhk
VLM Unlearning 有关论文阅读总结与梳理

VLM Unlearning 有关论文阅读总结与梳理

文章目录 目录 前言 一、什么是 Unlearning 二、AUVIC 三、Neuron Pruning 四、 Neuron Path Editing 五、 MLLM Eraser 前言 本文整理了当前多模态大模型(VLM)中常见的 Unlearning 技术路线,主要包括: * AUVIC * Neuron Pruning * Neuron Path Editing * MLLM Eraser 这些方法的核心目标都是: 让模型“遗忘”指定知识,同时尽量不影响其它知识。 一、什么是 Unlearning 在多模态大模型(Vision-Language Model / VLA)中,我们经常需要: * 删除隐私数据 * 移除不安全知识 * 删除特定人物或敏感概念

By Ne0inhk
Flutter for OpenHarmony: Flutter 三方库 github 在鸿蒙应用中深度集成 GitHub API 构建高效的开发者协作工具(出海与工具链开发)

Flutter for OpenHarmony: Flutter 三方库 github 在鸿蒙应用中深度集成 GitHub API 构建高效的开发者协作工具(出海与工具链开发)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 在进行 OpenHarmony 为核心的开发者工具、代码托管助手或出海类社交应用开发时,与 GitHub 的数据打交道是必修课。我们需要实现: 1. 鸿蒙端展示用户的 GitHub 仓库列表和 Stars。 2. 自动化管理 Issues,或是监控 Repo 的 PR 动态。 3. 利用 GitHub 账号直接登录鸿蒙端的开发者社区。 github 软件包是 Flutter 生态中功能最全、维护最稳健的 GitHub REST API 封装库。它提供了 100% 强类型的接口定义,让你的鸿蒙应用能以最轻量化的方式接入全球最大的开源社区数据。 一、API 通讯与对象模型 github 库将繁杂的 JSON

By Ne0inhk