Redis中Hash类型的命令

news2024/11/25 2:56:39

目录

哈希类型的命令

hset

hget

hexists

hdel

hkeys

hvals

hgetall

hmget

hlen

hsetnx

hincrby

hincrbyfloat

内部编码

Hash类型的应用场景

作为缓存

哈希类型和关系型数据库的两点不同之处

缓存方式对比


Redis自身已经是键值对的结构了,Redis自身的键值对就是通过哈希的方式来组织的.

把key这一层组织完成之后,到了value这一层,value还可以是哈希.

在Redis中哈希类型的映射关系通常称为field-value,用于区分Redis整体的键值对(key-value).所以哈希类型当中value指的是field对应的值,不是键key对应的值.

字符串和哈希类型的比较

当我们需要存储一个uid为1的用户对象,姓名是zhangsan,年龄是18.

用字符串时,我们需要设置两个key-value,一个user:1:name-zhangsan和user:1:age-18.

而我们使用哈希时只需要一个键即可user:1->name-zhangsan,age-18.

哈希类型的命令

hset

设置hash中指定的field的value.

返回值是设置成功的键值对(field-value)的个数.

注意hash类型中的value只能是字符串类型的.

hget

hget key field

获取哈希中指定字段的值.

返回值是字段对应的值或者是nil.

.

hexists

hexists key field

判断hash中是否有指定字段的值.

返回1表示存在,0表示不存在.

hdel

hdel key field [field......]

删除hash中指定的字段.

注意del命令删除的key而hdel命令删除的是field.

返回的是本次操作删除的字段个数.

 

hkeys

hkeys key

获取hash中所有的字段.

返回的是字段列表.

hvals

hvals key         

获取hash中所有的值.

返回的是所有的val值.

hgetall

hgetall key

获取hash中所有的字段以及其对应的值.

返回的是字段和对应的值.

field和value是交替出现的.

hmget

hmget key field [field......] 

一次获取hash中多个字段的值.

返回的是字段对应的值或者是nil.

 

hash中也有hmset能够一次设置多个field和value,但是我们不需要使用,因为hset已经支持一次设置多个field和values了.

hlen

hlen key

获取hash中所有字段的个数.

返回的是字段个数.

hsetnx

hsetnx key field value

在字段不存在的情况下,设置hash中字段的值.

返回1表示设置成功,返回0表示设置失败.

如果key也不存在,也会创建key.

hincrby

hincrby key field increment

将hash中字段对应的数值添加指定的值.此时value必须能被当作数字处理.

hincrbyfloat

这是hincrby的浮点数版本.

hincrbyfloat key field increment

hstrlen

hstrlen key field

计算value的字符串长度.


内部编码

哈希类型的内部编码是ziplist和hashtable.

使用ziplist目的是为了节省内存空间,因为当数据元素不多的时候,使用一个hash表来表示,可能会造成空间的浪费,hash首先是一个数组,数组上的有些位置上有元素,有的元素可能就没有元素,就会造成浪费.但是数据元素过多的时候,此时在使用ziplist,读写元素的速度会比较慢,此时就要使用hashtable来组织和存储数据.

如果哈希中的元素比较少,使用ziplist表示,元素个数比较多的时候使用hashtable来表示.

如果每个value的值的长度都比较短,使用ziplist表示,如果某个value的长度太长了,也会转换哼hashtable.

对于多少个元素是多,多长的value算长,redis中有两个配置.

hash-max-ziplist-entries配置.(默认是512个).

hash-max-ziplist-value配置.(默认是64字节).

我们可以在redis的配置文件中对其进行修改.根据不同的业务场景选择更加契合当前业务的值.


Hash类型的应用场景

作为缓存

string类型也可以作为缓存使用,但是存储结构话的数据,使用hash更加合适一些.

比如mysql中有一个表.

使用hash可以更加直观的表示表中的每一条记录.

上述场景使用string类型也可以做到,要用到json这样的数据格式.

如果使用string(json格式)来表示userinfo,万一只想获取其中的一个field或者修改某个field的值,就需要把整个json都读出来,解析成对象,在操作field,最后重新转写成json字符串,在写回去.

如果使用hash的方式来表示userinfo.就可以使用field表示对象的某个属性,此时就可以非常方便的修改/获取任何一个属性的值了.

使用hash的方式读写field更加直观高效,但是付出的是空间的代价.

哈希类型和关系型数据库的两点不同之处

1.哈希类型是稀疏的,而关系型数据库是完全结构化的.例如哈希的每个键都可以有不同的field,而关系型数据库一旦添加新的列,所有行都要为其设置值,即使是null也要设置.

2.关系型数据库可以做复杂的关系查询,而redis去模拟关系型复杂查询基本不可能,维护成本很高.


缓存方式对比

目前,我们已经掌握了三种缓存用户信息的方法.

1.原生字符串类型-使用字符串类型,每个属性一个键

优点:实现比较简单,针对个别属性的操作更加灵活.

缺点:占用过多的键,内存的占用量较大,同时用户的信息在redis中比较分散,缺少内聚性,所以这种方案基本没有实用性.

2.序列化字符串类型-json格式

优点:针对总是以整体作为操作的场景比较合适,编程也简单.同时,如果序列化的方案选择合适,内存的使用效率很高.

缺点:本身的序列化和反序列化需要一定的开销,同时如果针对某个属性进行操作会变的不灵活.

3.哈希类型

优点:简单,直观,灵活.尤其是针对信息的局部变更.

缺点:需要控制哈希在两种内部编码之间的转换,可能会造成内存的较大消耗.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1170821.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文笔记】Point Cloud Forecasting as a Proxy for 4D Occupancy Forecasting

原文链接:https://arxiv.org/abs/2302.13130 1. 引言 运动规划需要预测其余物体的运动,但相应的感知模块如建图、目标检测、跟踪和轨迹预测通常都需要大量人力标注HD地图、语义标签、边界框或物体的轨迹,难以扩展到大型无标签数据集上。3D点…

Linux文本编辑器vim使用和配置详解

vim介绍 ​ vim是Linux的一款文本编辑器,可以用来编辑代码,而且支持语法高亮,还可以进行一系列配置使vim更多样化。也可以运行于windows,mac os上。 ​ vim有多种模式,但目前我们只介绍绝大多数场景用的到的模式&…

CCF CSP认证 历年题目自练Day43

题目一 试题编号: 201604-3 试题名称: 路径解析 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述   在操作系统中,数据通常以文件的形式存储在文件系统中。文件系统一般采用层次化的组织形式&…

NLP之Bert多分类实现案例(数据获取与处理)

文章目录 1. 代码解读1.1 代码展示1.2 流程介绍1.3 debug的方式逐行介绍 3. 知识点 1. 代码解读 1.1 代码展示 import json import numpy as np from tqdm import tqdmbert_model "bert-base-chinese"from transformers import AutoTokenizertokenizer AutoToken…

深入解析Spring Boot自动配置原理:让你的应用无痛集成

1.前言 1.1springboot的优势 Spring Boot是一个用于构建独立、生产级的Spring应用程序的开发框架,它在简化配置、提高开发效率、增强功能丰富性等方面具有以下优势: 简化配置:Spring Boot采用了约定优于配置的原则,通过自动配置和…

Java基于springboot开发的景点旅游项目

演示视频 https://www.bilibili.com/video/BV1cj411Y7UK/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 主要功能:用户可浏览搜索旅游景点(分为收费和免费景点),购票(支持多规格套餐购票&am…

Unity3D实现页面的滑动切换功能

效果展示 Unity3D实现页面的滑动切换 效果 文章目录 前言一、先上代码二、创建UI1.创建Scroll View如下图,并挂载该脚本:2.Content下创建几个Itme 总结 前言 好记性不如烂笔头! 一、先上代码 /*******************************************…

堆排序--C++实现

1. 简介 堆排序利用的是堆序性,最小堆进行从大到小的排序。 先建初堆,保证堆序性。将堆顶元素与最后一个元素交换, 就将当前堆中的最大(小)的元素放到了最后后。堆大小递减,再重新调整堆选出第二大,重复上述过程。 2…

python推导式特殊用法

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 字典推导式 >>> dic {x: x**2 for x in (2, 4, 6)} >>> dic {2: 4, 4: 16, 6: 36} >>> type(dic) <class dict>集合推导式 …

VSCode 的 C/C++ 开发环境的傻瓜级自动部署程序

软件介绍 VSCode 是一款优秀的编辑器&#xff0c;可以通过各种插件&#xff0c;将其配置成 C/C 开发环境。只是对于初学者而言&#xff0c;配置步骤有点繁琐。 软件 VSCode-Setup(MinGW) 提供了自动下载安装 VSCode 并配置成 C/C 开发环境的功能。无需担心该软件会对系统有额…

JavaWeb | JavaWeb开发环境相关知识点

JavaWeb开发环境相关知识点: 1.C/S结构、B/S结构2.浏览器与服务器的交互模式3.Tomcat安装目录中&#xff0c;比较重要的文件夹/文件4.怎么修改Tomcat端口&#xff1f;5.URL /url / 统一资源定位符 1.C/S结构、B/S结构 网络应用程序中&#xff0c;有 两种基本结构&#xff1a; C…

java.io.FileNotFoundException: D:\桌面\file3 (拒绝访问。)

java.io.FileNotFoundException: D:\桌面\file3 拒绝访问。 问题描述一、问题原因及其解决办法 问题描述 今天笔者使用FileInputStream输入流的时候&#xff0c;向里面添加了&#xff08;new File(“D://桌面//file3”)的File文件参数&#xff09;&#xff0c;最后不管怎样运行…

广州华锐互动:数字孪生可视化制作软件有哪些亮点?

由广州华锐互动开发的数字孪生可视化制作软件在当今的数字孪生领域中扮演着重要角色&#xff0c;它突破了许多传统数字孪生可视化制作软件的限制。以下是几个方面的突破&#xff1a; 无限自由度&#xff1a;传统的3D建模工具通常有限制编辑器的自由度&#xff0c;使用户难以进行…

KEDA:基于事件驱动扩展K8S应用的深度实践

新钛云服已累计为您分享773篇技术干货 为什么我们要自动扩展应用程序&#xff1f; 作为 SRE&#xff0c;需要保证应用弹性和高可用性。因此&#xff0c;自动缩放是我们需要的必须功能。通过自动缩放&#xff0c;我们能确保工作负载能够高效的地处理业务流量。 在本文中&#xf…

[vmware]vmware虚拟机压缩空间清理空间

vmware中的ubuntu使用如果拷贝文件进去在删除&#xff0c;vmare镜像文件并不会减少日积月累会不断是的真实物理磁盘空间大幅度减少&#xff0c;比如我以前windows操作系统本来只有30GB最后居然占道硬盘200GB&#xff0c;清理方法有2种。 第一种&#xff1a;vmware界面操作 第二…

Dubbo篇---第二篇

系列文章目录 文章目录 系列文章目录一、注册中心挂了,consumer 还能不能调用 provider?二、怎么实现动态感知服务下线的呢?三、Dubbo 负载均衡策略?一、注册中心挂了,consumer 还能不能调用 provider? 可以。因为刚开始初始化的时候,consumer 会将需要的所有提供者的地…

多目标跟踪算法 实时检测 - opencv 深度学习 机器视觉 计算机竞赛

文章目录 0 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习多目标跟踪 …

解决Ts中的error.stack报错property ‘stack‘ does not exist on type ‘unknown typescript

我用的Ts版本是5.x&#xff0c;所以在使用的时候出现了这个问题 解决方式&#xff1a; 将error先转一遍就好了 参考链接&#xff1a; 你真的会处理TS中的Error么 - 掘金 (juejin.cn) Announcing TypeScript 4.4 - TypeScript (microsoft.com)

黑群晖安装及使用小计

最近发现4t的盘装满了&#xff0c;最主要的照片也来到了4万张大关。所以怎么处理&#xff0c;怎么定位&#xff0c;怎么更方便的查找图片就变得很重要。 第一步我选择了picturama这个软件&#xff0c;只要指定图片文件夹&#xff0c;能够很快速 的浏览&#xff0c;并且带时间轴…

Zabbix结合Grafana统计日志网站访问量

Zabbix除了可以通过HTTP代理及WEB场景监控网站的响应结果、响应时间和传输速度等&#xff0c;也可以通过读取网站的后台日志&#xff0c;获取有用的统计信息。 下面我以Grafana为例&#xff0c;通过日志统计网站的访问量。 操作如下&#xff1a; 1、读取grafana日志 首先要基…