【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

【DGX Spark 实战】部署 vLLM + Open WebUI 运行 Qwen3-Coder-Next-FP8(CUDA 13.0 兼容版)-修订

【DGX Spark 实战】部署 vLLM + Open WebUI 运行 Qwen3-Coder-Next-FP8(CUDA 13.0 兼容版)-修订

感谢Qwen3-Coder-Next-FP8为本文进行润色,调整,绘制架构图。但是所有的文字及链接经过手工修订。需要SGLang推理框架,移步 【DGX Spark 实战】部署SGLang,千问3.5-27B模型初探 我们已严格按您提供的原始内容(包括 CUDA_VERSION=130、CPU_ARCH=aarch64、路径 ~/vllm、用户 admin 等)进行全量修正与标准化,确保所有命令与 DGX Spark 实际环境一致。 摘要本文详细记录在 NVIDIA DGX Spark(Grace Blackwell 架构)上部署 vLLM 推理服务并接入 Open WebUI 的完整流程,包含 FlashAttention 编译、vLLM wheel 安装、Qwen3-Coder-Next-FP8

By Ne0inhk
全网最牛批的前端面试八股文(最全)堪称2025最强!

全网最牛批的前端面试八股文(最全)堪称2025最强!

嗨害嗨 铁铁们 来了奥,秘制前端小面试它不就来了么,铁铁们是不是经常遇到这情况?技术栈整得明明白白,项目经验写得密密麻麻,一到面试官面前直接大脑宕机!面试官问你问题,你说:我不到啊。这好使吗,不好使,那感觉就像老八端着秘制小汉堡站在撤硕门口——进退两难啊! 所以很多前端铁子们技术不错,但面试时总差一口气。其实原因很简单——面试就像考试,不划重点真的会丢分!(每次准备面试跟高考一样) 我花了一周时间,把今年的八股都整全乎了,这你要是都会了,出去面试那不就是小卡拉米啊,直接给面试官惊鸿一瞥,必须把面试官头发给他拽掉,必须打他脸:往下看! 前端面试题及八股文完整版: https://github.com/encode-studio-fe/natural_traffic/wiki/scan_material9 💡 核心知识板块(按优先级排序) 1. JavaScript 灵魂拷问 * 作用域链:变量查找的“寻宝游戏” * 闭包:函数的小金库,私房钱存放处

By Ne0inhk

OpenWebUI联网搜索实战:如何用SearXNG让本地大模型获取实时信息(附百度/360配置)

OpenWebUI联网搜索实战:如何用SearXNG让本地大模型获取实时信息(附百度/360配置) 如果你在本地运行大模型,比如用Ollama部署了Qwen、Llama或者DeepSeek,可能会发现一个尴尬的问题:模型的知识截止日期是固定的,它不知道今天股市涨跌,不清楚最新的科技新闻,甚至不知道明天是什么节日。这种“信息孤岛”的感觉,让本地大模型的实用性大打折扣。 我最初搭建OpenWebUI环境时,也遇到了这个痛点。看着模型一本正经地分析过时的数据,那种无力感让我开始寻找解决方案。市面上有不少联网搜索方案,但要么配置复杂,要么对国内网络环境不友好。经过几周的折腾和测试,我发现SearXNG这个开源元搜索引擎,配合OpenWebUI的联网搜索功能,是目前最稳定、最灵活的方案之一。 更重要的是,通过合理配置SearXNG,我们可以让本地大模型直接调用百度、360等国内搜索引擎,获取符合中文用户习惯的实时信息。这不仅仅是技术上的连接,更是让本地AI真正“接地气”的关键一步。下面我就把自己踩过的坑、验证过的配置,以及实际效果对比,毫无保留地分享给你。 1. 为什么需要SearXN

By Ne0inhk
Flutter for OpenHarmony: Flutter 三方库 cached_query 为鸿蒙应用打造高性能声明式数据缓存系统(前端缓存终极方案)

Flutter for OpenHarmony: Flutter 三方库 cached_query 为鸿蒙应用打造高性能声明式数据缓存系统(前端缓存终极方案)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 在进行 OpenHarmony 应用开发时,网络请求的响应速度直接决定了用户体验(体验 UX)。如果用户每次切换页面都必须等待加载动画,应用会显得非常低级。我们不仅需要处理异步数据请求,更需要一套精密的机制来解决以下痛点: 1. 自动缓存:第二次访问时应瞬间展示历史数据。 2. 过期失效(Stale-while-revalidate):在展示旧数据的同时,后台静默拉取新数据。 3. 无限滚动:简单地处理分页与数据追加内容逻辑。 cached_query 是一个类似于 Web 端 React Query 的 Dart 状态管理库。它专注于数据获取与同步,让你的鸿蒙应用具备顶级的数据缓存表现。 一、核心缓存驱动机制 cached_query 在内存与数据源之间建立了一层“智能感知”缓存。 数据过期/缺失 返回新数据 发射流

By Ne0inhk