【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

[特殊字符] AI印象派艺术工坊前端交互:画廊滚动与图片缩放体验优化

🎨 AI印象派艺术工坊前端交互:画廊滚动与图片缩放体验优化 1. 引言 1.1 业务场景描述 在“AI印象派艺术工坊”这一轻量级图像风格迁移Web应用中,用户上传照片后,系统基于OpenCV的计算摄影学算法,无需依赖深度学习模型即可生成素描、彩铅、油画、水彩四种艺术风格图像。整个流程高效稳定,适合边缘设备或低资源环境部署。 然而,随着功能完善,用户体验成为新的优化重点。尤其是在结果展示环节,用户需要在移动端和桌面端均能流畅浏览五张图像(原图+四类艺术图),并对细节进行查看。当前采用的静态卡片式布局在小屏设备上存在滑动不顺、缩放卡顿等问题,影响整体使用满意度。 因此,本文聚焦于画廊滚动与图片缩放体验的前端交互优化,结合现代CSS与JavaScript技术,提出一套适用于此类轻量化AI图像应用的高性能、响应式画廊解决方案。 1.2 痛点分析 现有画廊界面存在以下问题: * 横向滚动卡顿:使用基础overflow-x: scroll时,缺乏惯性滚动与平滑动画,操作生硬。 * 图片缩放体验差:移动端双指缩放常被浏览器默认行为干扰,无法精准控制。 * 响应式适配不足:不

By Ne0inhk
【数据结构】堆——超详解!!!(包含堆的实现)

【数据结构】堆——超详解!!!(包含堆的实现)

【数据结构】堆——超详解!!!(包含堆的实现) * 前言 * 一、堆是什么? * 1. 堆的定义 * 2. 堆的分类 * 3. 堆的特点 * 二、堆的实现(小堆) * 1. 用什么来实现? * 2. 实现思路 * 3. 代码实现 * (1)创建头文件&源文件 * (2)定义堆(定义) * (3)堆的初始化(初始化) * (4)堆的销毁(销毁) * (5)插入数据(入堆) * (6)删除数据(出堆) * (7)获取堆顶元素 * (8)获取堆的数据个数 * (9)检测堆是否为空 * 三、完整代码实现 * 1.

By Ne0inhk
贪心算法(局部最优实现全局最优)第二篇

贪心算法(局部最优实现全局最优)第二篇

目录 1. LeetCode376. 摆动序列 2. LeetCode334. 递增的三元子序列 3. LeetCode674. 最长连续递增序列 4. LeetCode121. 买卖股票的最佳时机 今天我们继续来聊聊贪心算法,因为我在前面也说过贪心算法最重要的就是经验,所以我们今天继续通过刷题的方式来学习贪心算法。 1. LeetCode376. 摆动序列 这道题的意思其实也比较好理解的,就是求一个最长的摆动序列,可以从原数组中删除不符合条件的数。 这道题的话我们先来聊一下思路,因为要求的是最长的子数组。根据题目要求那么是不是说我们每次选的数字都要在有限的分为里面做到尽可能的大或者尽可能的小。为什么要这么做呢?是因为但我们选到最值的时候我们在后面的选择中才可以有更多的选择。 我们看下面这个图,里面有abcdef这几个极值点。我们看,在c和d之间有一个点x1,假设我们在这里选择了这个点的话,那么后面的数都选不了了,因为接下来是要选择比x1小的数。这也是为什么我们每一次都要选择最值的原因。 那么我们代码该怎么设计呢?我们就可以试用一个三指针,通过比较的这三个指针的大

By Ne0inhk

教育AI推荐模型选型难题破解(主流算法对比+落地场景建议)

第一章:教育AI推荐系统的现状与挑战 近年来,随着人工智能技术在教育领域的深入应用,教育AI推荐系统逐渐成为个性化学习的核心支撑。这类系统通过分析学生的学习行为、知识掌握程度和兴趣偏好,动态推荐适合的学习资源、课程路径或练习题目,提升学习效率与体验。 技术架构与核心能力 现代教育AI推荐系统通常基于协同过滤、知识图谱与深度学习模型构建。系统首先采集用户交互数据(如答题记录、停留时长、点击序列),再利用嵌入技术将学生与知识点映射到低维向量空间,实现精准匹配。 # 示例:基于用户行为计算相似度推荐 from sklearn.metrics.pairwise import cosine_similarity import numpy as np user_behavior_matrix = np.array([ [5, 3, 0, 1], [4, 0, 3, 2], [1, 1, 5, 4] ]) similarity

By Ne0inhk