极致性能的服务器Redis之Hash类型及相关指令介绍

极致性能的服务器Redis之Hash类型及相关指令介绍

目录

1. Hash介绍

2. hset

3. hget

3. hdel

5. hkeys

6. hvals

​编辑

7. hgetall

 8. hexists

9. hmget

10. hlen

11. hsetnx

12. hincrby

13. hincrbyfloat


1. Hash介绍

Redis 哈希类型是键值对的集合,字段与值均支持字符串、数字等类型,适合建模用户信息、配置项等对象类数据。其支持单字段 / 多字段的增删改查、字段存在性判断、值自增自减等原子操作,且底层通过压缩列表或哈希表优化存储,空间利用率高、查询效率快,是 Redis 中存储结构化数据的核心类型之一。

在Redis中因为本身就是按照哈希的KV结构来进行存储的,所以当我们想要使用Redis里面的哈希的时候,实际上是哈希的哈希,在后者中,则用field来代替原本的Key位置,防止和前面的哈希名字相同,接下来我会介绍哈希在Redis中的使用。

2. hset

这个指令的话就是用来在Redis中创建一个哈希的键值对。

语法:

hset key field value

我们看下面这张图片,在Redis中的key和field的关系就像这样。一个key可以有很多个field,一个field和一个value一一对应。

我们来看下面这张图片,当我们对一个field重新使用hset时,会对它里面的value进行更新。

同时一个key也可以对应多个field。

3. hget

这个的话就是通过key和field来得到对应的value的。

语法:

hset key field value

我们看下面这张图片,hget相当于是通过两个关键字找到的v3。

它是不支持一次访问多个value的。在后面会有一些特定的指令来获取多个value的。

3. hdel

这个指令的话就是用来删除value和field的。

语法:

hdel key field

我们看下面这张图片,这个hdel删除的是field和它对应的value,不会把key给删除了的(在key还有其他对应field的时候)。所以在这张图里面我们去访问对应的f2还是可以成功的。

5. hkeys

这个的话就是用来查找这个key里面所有的field的,它的返回值也是返回这个key对应的全部field。

语法:

hkeys key

我们看下面这张图片,通过hkeys就可以查找这个k1里面使用的field了。

在下图中之所以会失败,是因为hkeys *返回空数组是因为 Redis 里*不是通配符用法,hkeys只能跟具体的键名,不能直接用通配符匹配多个哈希键。

6. hvals

这个指令的话和上面那个指令很像,只不过上面那个是返回对应的field,这个指令是返回这个key里面使用的value。

语法:

hvals key

我们看下面这张图片,通过hvals就可以拿到k1里面所有的value了。

7. hgetall

这个的话就像是上面两个指令的结合体,它可以直接获得这个key所对应的所有field和value。

语法:

hgetall key

我们看下面这张图片,通过这样的方式就可以吧直接得到这个k1里面使用的field和value了。

PS:无论是hvals,hkeys或者hgetall,他们其实在很多时候是不被推荐使用的,因为我们并不知道这个key里面到底有多少个哈希键值对,由于Redis是单线程的数据库,如果很多的话会让Redis卡住的。

 8. hexists

这个指令的话就是用来判断某一个value是否存在或者说是判断通过两个关键字是否可以找到值。

语法:

hexists key field

我们看下面的图片,如果这个value存在的话就返回1,不存在就返回0。

9. hmget

这个指令的话可以一次获取多个value的值。

语法:

hmget key field........

我们看下面这张图片,我们可以输入对应的key和field,然后就可以批量的得到对应的value。

10. hlen

这个的话就是返回这个key所对应的field的个数,如果这个key不存在的话那么就返回0.

语法:

hlen key

我们看下面这张图片,这个k1里面有三个哈希键值对,所以我们调用hlen的时候会返回3,而k2不存在,所以在这里会返回0。

11. hsetnx

这个指令的话就是在字段不存在的情况下,设置 hash 中的字段和值。

语法:

hsetnx key field value

我们看下面这张图片 ,在k1里面没有f3的时候我们用hsetnx是可以成功的,而有了之后我们再用hsetnx来插入f3是会失败的。

12. hincrby

这个指令的话就是给field对应的那个value的值进行增加或者减少操作。

语法:

hincrby key field 要加或减的值

我们看下面这张图片,这个指令的话既可以加数字也可以减数字,只要我们在原本的数字前面加一个负号就好。

13. hincrbyfloat

这个指令的话和上面那个很像,不同的地方就是这个是可以给浮点数进行浮点数的加减的。

注意:这个指令不止可以给浮点数用,他也可以给整数用,同时它的值也可以为整数。

语法:

hincrbyfloat key field 要加或减的值

我们看下面这张图片,这个hincrbyfloat即可以给整数加浮点数,也可以给浮点数加整数。

Read more

Xiaomusic 让小爱音箱解锁本地曲库,内网穿透更能远程点歌

Xiaomusic 让小爱音箱解锁本地曲库,内网穿透更能远程点歌

Xiaomusic 是一款专为小爱音箱打造的本地音乐管理工具,核心功能是绑定小米账号后让小爱音箱直接读取 NAS 中的音乐文件,支持语音点播、随机播放、循环歌单等基础操作,适配所有能运行 Docker 的设备,无论是家用 NAS(极空间、群晖等)还是普通电脑都能部署。它的适用人群主要是有本地音乐收藏习惯、不想被音乐平台会员限制的用户,尤其是家中有小爱音箱且配备 NAS 的家庭用户,优点在于部署门槛低,无需编程基础,轻量化占用资源少,还能通过网页端可视化管理歌单和设备,操作简单易上手。 使用 Xiaomusic 时能明显感受到本地音乐调用的便捷性,比如喊一声 “播放收藏的经典老歌” 就能秒响应,但也有需要注意的地方:小米账号绑定后建议定期检查登录状态,避免因账号安全设置导致连接失效;NAS 中的音乐文件最好按统一格式整理,否则可能出现语音点播识别不准确的情况;另外部署时要确保存储路径设置正确,不然会出现音乐文件无法读取的问题。 不过仅在局域网内使用 Xiaomusic 会有明显的局限性,比如人在公司想给家里的老人点播戏曲,却因为不在同一网络无法操作;出门旅游时想远程调整家中小爱音箱的

RUST异步微服务架构的最佳实践与常见反模式

RUST异步微服务架构的最佳实践与常见反模式

RUST异步微服务架构的最佳实践与常见反模式 一、项目优化前的问题分析 1.1 任务调度不合理 💡在第21篇项目中,用户同步服务的任务调度使用了Cron调度器,但Cron调度器的精度有限,可能导致任务执行延迟。此外,任务的并发度没有配置,可能导致任务积压。 1.2 I/O资源限制不足 订单处理服务的TCP连接队列大小没有配置,可能导致连接失败。数据库连接池的大小没有配置,可能导致数据库连接耗尽。 1.3 同步原语使用不当 实时监控服务中,Redis连接没有使用连接池,可能导致连接开销过大。任务结果的处理没有使用批量操作,可能导致上下文切换过多。 1.4 错误处理不完善 任务失败的处理逻辑不够完善,没有进行任务重试和错误统计。服务之间的通信没有进行超时管理和错误处理。 二、异步架构设计模式的应用 2.1 命令查询分离(CQS) CQS是一种架构设计模式,将系统的操作分为命令和查询两种类型。命令用于修改系统状态,查询用于获取系统状态,两者互不干扰。 在项目中,我们可以将用户同步任务视为命令操作,将系统状态查询视为查询操作: // 用户同步任务(

Node.js零基础小白入门知识点【基础完整版 · 前端友好版】

Node.js零基础小白入门知识点【基础完整版 · 前端友好版】

✅ 当前最新技术规范,贴合前端开发视角,剔除后端冷门语法,只讲前端工程师必备的Node.js核心知识点,学完即用 ✅ 零基础友好,通俗易懂无专业黑话,完全从0开始,只需要有HTML/CSS/JS基础即可,不用任何后端知识,完美衔接前端学习路线 ✅ 条理清晰、循序渐进,知识点由浅入深,搭配极简案例+实战代码,每一个知识点都有可运行示例,学完就能上手开发 ✅ 核心定位:前端必备技能,Node.js = 前端工程师的后端入门必修课,Vue3/React/小程序/工程化打包/接口开发都离不开Node.js,企业招聘硬性要求 一、前置必懂:零基础扫盲(5分钟吃透,少走99%弯路 · 前端视角) ✔️ 1. 什么是 Node.js? Node.js 不是一门编程语言,也不是一个框架,而是一个 基于Chrome