百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

Redis中的Hash相关命令总结 redis的hash算法用的是啥?

wptr33 2024-12-25 16:02 30 浏览

作者 / 以码为梯

排版 / 以码为梯

文章字数 / 1847

阅读时长 / 8分钟

希望大家可以从本文有所收获[凝视]

Redis哈希数据类型是字符串字段和字符串值之间的映射,该数据类型多用于表示对象。在Redis中每个哈希表最多能存放2^32-1个字段值对。

下面我们主要从新增字段/值对删除字段/值对修改字段对应的值查询字段/值对这四个方面来介绍相关的命令。

新增字段/值对

Redis中HSETHMSETHSETNX都可以用来新增键值对。

从Redis 4.0.0开始HSET也实现了可变参数并允许多个字段/值对,效果跟HMSET一样,因此HMSET在Redis 4.0.0后被视为过期的。

HSET、HMSET可以接收多个字段/值对,哈希表中已经存在的字段对应的值会被覆盖。对于返回结果,HSET执行成功返回插入的字段/值对的个数,HMSET执行成功返回字符串OK。两个命令的语法如下:

HMSET key field value [field value ...]
HSET key field value [field value ...]

命令HSETNX只能接收一个字段/值对,且该命令对哈希表中已经存在字段对应的值不会覆盖也不会有其他任何影响(NX可以理解为NOT EXISTS)。该命令在成功新增一个字段/值对时会返回1,在字段已经存在于哈希表的情况,返回0。命令的语法如下:

HSETNX key field value

删除字段/值对

Redis提供了HDEL命令来删除哈希表中指定字段的的字段/值对,该命令可以一次性删除多个字段/值对。命令的语法如下:

HDEL key field [field ...]

修改字段对应的值

Redis中提供了HINCRBYHINCRBYFLOAT两个命令对字段对应的值进行增/减操作,命令的语法如下。

HINCRBY key field increment
HINCRBYFLOAT key field increment

对于命令HINCRBY,在值不符合64位带符号的整数时会报错。

对于HINCRBYFLOAT,在值不是字符串以及字符串值和指定的增量不能转换为双精度浮点数时会报错。

对于increment参数,在increment为正数时执行加法,在increment为负数时执行减法,两个命令在执行成功之后,返回增/减之后的值。

查询字段/值对

Redis提供了较多查询哈希表相关信息的命令,我们一一介绍

  • 通过HGETALL命令返回哈希表中所有的字段/值对

该命令返回哈希表中所有的字段/值对,命令的语法如下:

HGETALL key
  • 通过HEXISTS命令查询字段/值对是否在哈希表中

字段存在于哈希表中时返回1,不存在时返回0

HEXISTS key field
  • 通过HGET/HMGET命令获取字段对应的值

HGET命令返回的是字符串或(nil)(字段存在于键对应的哈希表中返回对应的值,否则返回(nil))。

HMGET命令返回的是字段对应的值组成的数组。对于数组中的值,如果字段存在于哈希表中则数组中的值为字段对应的值,否则为(nil)。

HGET key field
HGET key field [field...]
  • 通过HKEYS命令获取哈希表中所有字段

命令返回哈希表中所有字段构成的数组,键不存在的情况返回空数组。

HKEYS key
  • 通过HVALS命令获取哈希表中所有的值

命令返回哈希表中所有字段对应的值构成的数组,在键不存在的情况下返回空数组。

KVALS key
  • 通过HLEN命令获取哈希表中字段/值对的个数

命令返回键对应的哈希表中字段/值对的个数,在键不存在时返回0。

HLEN key
  • 通过HSTRLEN命令获取哈希表中字段对应的值的长度

命令返回字段对应的值的长度,在字段不存在或键不存在时返回0。

HSTRLEN key field
  • 通过HRANDFIELD命令从哈希表中随机获取字段或字段/值对

命令的语法如下:

HRANDFIELD key [count [WITHVALUES]]

在命令只带有key一个参数时作用是从哈希表中获取任意一个字段。

在命令带有count参数且count>0时返回的结果有下面的特点

返回的字段是不重复的。

返回的字段个数不超过哈希表中字段个数(如果count值大于最大字段个数只返回全部字段)。

返回的字段的顺序并不是真正的随机的。

在命令带有count参数且count的值小于0时返回的结果有下面的特点:

返回的字段是可以重复的。

返回的字段的个数是count的绝对值个,字段个数可以大于哈希表中有的字段个数。

返回的字段的顺序是真正随机的。

  • 通过HSCAN命令以游标的方式获取哈希表元素

在哈希表中字段/值对比较多的情况,如果使用HGETALL命令一次性取出所有的字段/值,有可能会阻塞服务器。但是我们可以通过HSCAN命令以迭代的方式,一次性获取一小部分内容直到将所有的元素取出为止,HSCAN命令的语法如下:

HSCAN key cursor [MATCH pattern] [COUNT count]

该命令返回的是两个值组成的数组,第一个值表示下一次调用中使用的新游标(当这个值为0时,说明已经遍历结束),第二个表示本次调用获取的元素列表。

HSCAN是Redis中SCAN系列命令中的一个针对Hash的命令。这里只是讲解了其简单的用法,其实这是一个比较复杂的命令,后续会单独写一篇文章来讲解这个命令。

到这里这篇关于Redis中Hash相关的命令就结束了,希望对大家能有些许帮助。

点个赞再走呗[惊喜][惊喜][惊喜]

相关推荐

MySQL进阶五之自动读写分离mysql-proxy

自动读写分离目前,大量现网用户的业务场景中存在读多写少、业务负载无法预测等情况,在有大量读请求的应用场景下,单个实例可能无法承受读取压力,甚至会对业务产生影响。为了实现读取能力的弹性扩展,分担数据库压...

Postgres vs MySQL_vs2022连接mysql数据库

...

3分钟短文 | Laravel SQL筛选两个日期之间的记录,怎么写?

引言今天说一个细分的需求,在模型中,或者使用laravel提供的EloquentORM功能,构造查询语句时,返回位于两个指定的日期之间的条目。应该怎么写?本文通过几个例子,为大家梳理一下。学习时...

一文由浅入深带你完全掌握MySQL的锁机制原理与应用

本文将跟大家聊聊InnoDB的锁。本文比较长,包括一条SQL是如何加锁的,一些加锁规则、如何分析和解决死锁问题等内容,建议耐心读完,肯定对大家有帮助的。为什么需要加锁呢?...

验证Mysql中联合索引的最左匹配原则

后端面试中一定是必问mysql的,在以往的面试中好几个面试官都反馈我Mysql基础不行,今天来着重复习一下自己的弱点知识。在Mysql调优中索引优化又是非常重要的方法,不管公司的大小只要后端项目中用到...

MySQL索引解析(联合索引/最左前缀/覆盖索引/索引下推)

目录1.索引基础...

你会看 MySQL 的执行计划(EXPLAIN)吗?

SQL执行太慢怎么办?我们通常会使用EXPLAIN命令来查看SQL的执行计划,然后根据执行计划找出问题所在并进行优化。用法简介...

MySQL 从入门到精通(四)之索引结构

索引概述索引(index),是帮助MySQL高效获取数据的数据结构(有序),在数据之外,数据库系统还维护者满足特定查询算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构...

mysql总结——面试中最常问到的知识点

mysql作为开源数据库中的榜一大哥,一直是面试官们考察的重中之重。今天,我们来总结一下mysql的知识点,供大家复习参照,看完这些知识点,再加上一些边角细节,基本上能够应付大多mysql相关面试了(...

mysql总结——面试中最常问到的知识点(2)

首先我们回顾一下上篇内容,主要复习了索引,事务,锁,以及SQL优化的工具。本篇文章接着写后面的内容。性能优化索引优化,SQL中索引的相关优化主要有以下几个方面:最好是全匹配。如果是联合索引的话,遵循最...

MySQL基础全知全解!超详细无废话!轻松上手~

本期内容提醒:全篇2300+字,篇幅较长,可搭配饭菜一同“食”用,全篇无废话(除了这句),干货满满,可收藏供后期反复观看。注:MySQL中语法不区分大小写,本篇中...

深入剖析 MySQL 中的锁机制原理_mysql 锁详解

在互联网软件开发领域,MySQL作为一款广泛应用的关系型数据库管理系统,其锁机制在保障数据一致性和实现并发控制方面扮演着举足轻重的角色。对于互联网软件开发人员而言,深入理解MySQL的锁机制原理...

Java 与 MySQL 性能优化:MySQL分区表设计与性能优化全解析

引言在数据库管理领域,随着数据量的不断增长,如何高效地管理和操作数据成为了一个关键问题。MySQL分区表作为一种有效的数据管理技术,能够将大型表划分为多个更小、更易管理的分区,从而提升数据库的性能和可...

MySQL基础篇:DQL数据查询操作_mysql 查

一、基础查询DQL基础查询语法SELECT字段列表FROM表名列表WHERE条件列表GROUPBY分组字段列表HAVING分组后条件列表ORDERBY排序字段列表LIMIT...

MySql:索引的基本使用_mysql索引的使用和原理

一、索引基础概念1.什么是索引?索引是数据库表的特殊数据结构(通常是B+树),用于...