极致性能的服务器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

《算法闯关指南:优选算法--模拟》--43.数青蛙

《算法闯关指南:优选算法--模拟》--43.数青蛙

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 43. 数青蛙 * 解法(模拟+分情况讨论): * 算法思路: * C++算法代码: * 算法总结&&笔记展示: * 结尾: 前言: 聚焦算法题实战,系统讲解三大核心板块:优选算法:剖析动态规划、二分法等高效策略,学会寻找“最优解”。 递归与回溯:掌握问题分解与状态回退,攻克组合、排列等难题。 贪心算法:理解“局部最优”到“全局最优”的思路,解决区间调度等问题 内容以题带点,讲解思路与代码实现,帮助大家快速提升代码能力。 43. 数青蛙

By Ne0inhk
数据结构:手撕堆和哈希表,字符串哈希详解----小白也能懂

数据结构:手撕堆和哈希表,字符串哈希详解----小白也能懂

🎬 博主名称:个人主页 🔥 个人专栏: 《算法通关》,《Java讲解》 ⛺️心简单,世界就简单 序言 其实是想把这篇写到上一篇里面的,但是中途困了,趴桌子上睡着了,真是没招 这篇文章,来手撕 堆和哈希表,这一般面试可能会问到,我们来了解他的思想和思路也是比较舒服的 目录 序言 堆 堆的存储 堆有两个基本操作 1,down( x ) 2 , up( x ) 操作一:插入一个数 操作二:求集合中的最小值 操作三:删除最小值 操作四:删除任意一个元素 操作五:修改任意一个元素 题目模板练习1 题目模板练习二 总结: 哈希表 存储结构:拉链法 存储结构:开放寻址法 处理冲突思路: 查找 删除 总结

By Ne0inhk

【面试突击】MySQL InnoDB存储引擎:B+树叶子节点能存多少数据?

文章目录 * MySQL InnoDB存储引擎:B+树叶子节点能存多少数据? * 前言 * 一、叶子节点存什么? * 1.1 叶子节点 vs 非叶子节点 * 1.2 叶子节点的结构 * 二、计算公式 * 2.1 核心公式 * 2.2 每行大小的构成 * 三、实际计算示例 * 示例1:普通用户表(每行200字节) * 示例2:文章表(每行1KB) * 示例3:极简表(每行100字节) * 四、不同表结构对比 * 五、对B+树总容量的影响 * 5.1 以"每行200字节"为例 * 5.2 不同行大小的影响

By Ne0inhk
【每日一题】LeetCode - 最接近的三数之和

【每日一题】LeetCode - 最接近的三数之和

LeetCode 的「最接近的三数之和」问题要求我们从给定整数数组中找到三个数的和,使它最接近目标值。适合初学者的原因在于它结合了双指针、排序等基本技巧,为大家理解基本的算法和数据结构提供了一个很好的机会。 如果你不知道什么是双指针可以参考我之前发的博客,或者直接看我数据结构的博客专栏【数据结构】双指针算法:理论与实战 一、题目介绍 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 这道题与上一题很类似,如果你没看过上一题强烈建议务必去看一下【每日一题】LeetCode - 三数之和 示例 1 * 输入:nums = [-1,2,1,-4], target = 1 * 输出:2 * 解释:与

By Ne0inhk