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

依托Java和百度地图实现长沙市热门道路与景点实时路况检索的实践探索

依托Java和百度地图实现长沙市热门道路与景点实时路况检索的实践探索

目录 前言 一、实时路况服务简介 1、实时路况服务是什么 2、道路实时路况查询 3、周边实时路况查询 4、返回参数 二、Java响应对象封装 1、响应对象设计 2、响应对象实现 三、UniHttp集成及调用 1、检索接口声明 2、道路实时路况查询 3、周边实时路况查询 四、常见问题 1、道路名称错误 2、中心点坐标位置错误 3、坐标类型错误 4、命名的小插曲 五、总结 前言         在当今数字化时代,交通出行的便捷性与高效性已成为衡量城市智慧化水平的重要指标之一。随着城市化进程的加速,长沙市作为湖南省的省会城市,其交通流量日益复杂,再叠加现在的国庆旅游客流和中秋探亲客流,热门道路与景点的路况信息对于市民日常出行和游客旅游规划至关重要。因此,需要开发一套能够实时检索长沙市热门道路与景点路况的系统。         本实践探索旨在通过Java编程语言调用百度地图的API接口,实现对长沙市热门道路与景点的实时路况检索功能。

By Ne0inhk

从零开始搭建Tare的Java 开发环境

从0开始一步一步讲解如何在Trae 中构建Java开发环境,供大家学习交流。 1. java 项目plugin安装:Extension Pack for Java 拓展包包含以下内容,亦可手动安装; 2. 开发环境配置 Maven for java 拓展配置 与 Language Support for Java(TM) by Red Hat 中的 maven 需要分别单独配置;否则易出现 maven 拓展 与 Java Projects 所引用的 maven settings配置不相同的情况; 3. lombok 项目中有使用lombok时 可安装lombok插件: 并在项目的 settings.json 中增加:“lombok.configPath”: “lombok.

By Ne0inhk
Java之泛型

Java之泛型

目录 泛型类 语法 使用 泛型上界 定义 使用 类型擦除 通配符 通配符上界  通配符下界 泛型方法 语法 使用  泛型的限制 泛型类 语法 class 泛型类名称<类型形参列表> {         // 这里可以使用类型参数 } class ClassName<T1, T2, ..., Tn> { } class 泛型类名称<类型形参列表> extends 继承类/* 这里可以使用类型参数 */ {         // 这里可以使用类型参数 } class ClassName<T1, T2, ..., Tn> extends ParentClass<T1&

By Ne0inhk
从零开始用 Eclipse 写第一个 Java 程序:HelloWorld 全流程 + 避坑指南

从零开始用 Eclipse 写第一个 Java 程序:HelloWorld 全流程 + 避坑指南

对于 Java 初学者来说,第一次用 Eclipse 写程序往往会手足无措 —— 找不到新建项目的入口、不知道包和类该怎么命名、运行时控制台突然消失…… 别慌!本文以最经典的 “HelloWorld” 为例,手把手带你走完从 Eclipse 项目创建到程序运行的完整流程,还会分享代码补全、窗口恢复等实用技巧,帮你轻松搞定入门路上的各种小麻烦,让你的 Java 学习之旅从 “顺利输出第一行代码” 开始。 一、新建 Java 项目 1.基础操作步骤         打开 Eclipse 后,依次点击左上角菜单栏的 “File”→“New”→“Java Project”: 2.特殊情况处理         若 “New” 菜单下无 “Java Project” 选项,点击 “Other…”,在弹出的 “Select

By Ne0inhk