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

Redis6五大常用数据类型-哈希(Hash)

mhr18 2024-11-14 16:25 23 浏览 0 评论

redis命令中文参考网站:http://www.redis.cn/commands.html
redis命令英文参考网站:https://redis.io/commands
Redis目前支持5种数据类型:
1. String(字符串)
2. List(列表)
3. Hash(字典)
4. Set(集合)
5. Sorted Set(有序集合)

哈希(Hash)

哈希(hash)或者叫散列类型(hash),它是一个 string 类型的 field(字段) 和 value(值) 的映射表,其特别适合用于存储对象,类似于Java中的Map。其结构如下图:value部分指的就是hash部分

常用命令列表

命令

描述

hset key field value [field value ...]

设置 key 指定的哈希集中一个或多个字段field的值value。在最新Redis6中hset/hmset命令都可以一次性设置多个field-value

hmset key field value [field value ...]

设置 key 指定的哈希集中一个或多个字段field的值value。在最新Redis6中hset/hmset命令都可以一次性设置多个field-value

het key field

返回 key 指定的哈希集中该字段filed所关联的值value

hgetall key

返回 key 指定的哈希集中所有的字段和值

hexists key field

判断key指定的哈希集中的字段filed字段是否存在(如果存在则返回1,否则返回0(如果键不存在也会返回0))。

hsetnx key field value

当key指定的哈希集中,字段filed不存在时赋值value,如果字段已经存在,hsetnx命令将不执行任何操作

hdel key field [field ...]

删除key指定哈希集中的一个或多个字段filed

hincrby key field increment

增加 key 指定的哈希集中指定字段filed的数值value。如果 key 不存在,会创建一个新的哈希集并与 key 关联。如果字段filed不存在,则字段的值在该操作执行前被设置为 0,然后执行增加increment操作。HINCRBY 支持的值的范围限定在 64位 有符号整数

hvals key

获取哈希集中所有字段filed对应的值value。

hincrbyfloat key field increment

为指定key的hash的field字段值执行float类型的increment加操作。如果field不存在,则在执行该操作前设置为0,然后执行增加increment操作。

hkeys key

获取指定key对应的哈希集中所有的字段filed

hlenkey

获取指定key对应的哈希集中字段filed数量

常用命令演示

以下命令演示以存储User对象为例

public class User{
    private String name;
    private int age;
    private String address;
}

1.hset/ hmset key field value [field value ...]

设置 key 指定的哈希集中一个或多个字段field的值value。在最新Redis6中hset/hmset命令都可以一次性设置多个field-value

hset返回值说明:如果字段是哈希表中的一个新建字段,并且值设置成功,返回 1 。 如果哈希表中域字段已经存在且旧值已被新值覆盖,返回 0 。

hmset返回值说明:如果命令执行成功,返回 OK 。

127.0.0.1:6379> hset user:1 name xiaoming age 18 address beijing
(integer) 3 
127.0.0.1:6379> hmset user:2 name xiaohong age 17 address tianjin
OK

2.het key field

返回 key 指定的哈希集中该字段filed所关联的值value 。

127.0.0.1:6379> hget user:1 name
"xiaoming"

3.hgetall key

返回 key 指定的哈希集中所有的字段filed和值 value 。

127.0.0.1:6379> hgetall user:1
1) "name"
2) "xiaoming"
3) "age"
4) "18"
5) "address"
6) "beijing"
127.0.0.1:6379> hgetall user:2
1) "name"
2) "xiaohong"
3) "age"
4) "17"
5) "address"
6) "tianjin"

4.hvals key

获取哈希集中所有字段filed对应的值value。

127.0.0.1:6379> hgetall user:2 //返回 user:2 指定的哈希集中所有的字段filed和值 value 。
1) "name"
2) "xiaohong"
3) "age"
4) "17"
5) "address"
6) "tianjin"
127.0.0.1:6379> hvals user:2 //获取user:2 指定的哈希集中所有字段filed对应的值value。  
1) "xiaohong"
2) "17"
3) "tianjin"

5.hkeys key

获取哈希集中所有字段filed。

127.0.0.1:6379> hgetall user:2//获取key指定哈希集中的所有filed和value
1) "name"
2) "xiaohong"
3) "age"
4) "17"
5) "address"
6) "tianjin"
127.0.0.1:6379> hkeys user:2//获取key指定哈希集中的所有filed
1) "name"
2) "age"
3) "address"
127.0.0.1:6379> hvals user:2//获取key指定哈希集中的所有filed对应的value
1) "xiaohong"
2) "17"
3) "tianjin"

6.hexists key field

判断key指定的哈希集中的字段filed字段是否存在(如果存在则返回1,否则返回0(如果键不存在也会返回0))。

127.0.0.1:6379> hget user:1 name
"xiaoming"
127.0.0.1:6379> hexists user:1 name
(integer) 1
127.0.0.1:6379> hexists user:1 fff//filed字段不存在
(integer) 0
127.0.0.1:6379> hexists aaa name//key 不存在
(integer) 0

7.hsetnx key field value

当key指定的哈希集中,字段filed不存在时赋值value,如果字段已经存在,hsetnx命令将不执行任何操作。

127.0.0.1:6379> hexists user:1 name //存在字段name
(integer) 1
127.0.0.1:6379> hget user:1 name //获取字段name值
"xiaoming"
127.0.0.1:6379> hsetnx user:1 name new_xiaoming //给name字段重新赋值
(integer) 0
127.0.0.1:6379> hget user:1 name //再获取字段name值
"xiaoming"

8.hdel key field [field ...]

删除key指定哈希集中的一个或多个字段filed 。

127.0.0.1:6379> hgetall user:1 //获取删除前user:1 对应的hash集
1) "name"
2) "xiaoming"
3) "age"
4) "18"
5) "address"
6) "beijing"
127.0.0.1:6379> hdel user:1 name//删除哈希集中的name字段
(integer) 1
127.0.0.1:6379> hgetall user:1//获取删除后user:1 对应的hash集
1) "age"
2) "18"
3) "address"
4) "beijing"

9.hincrby key field increment

增加 key 指定的哈希集中指定字段filed的数值value。如果 key 不存在,会创建一个新的哈希集并与 key 关联。如果字段filed不存在,则字段的值在该操作执行前被设置为 0,然后执行增加increment操作。HINCRBY 支持的值的范围限定在 64位 有符号整数。

127.0.0.1:6379> hget user:1 age
"18"
127.0.0.1:6379> hincrby user:1 age 10
(integer) 28
127.0.0.1:6379> hget user:1 age
"28"

10.hincrbyfloat key field increment

为指定key的hash的field字段值执行float类型的increment加操作。如果field不存在,则在执行该操作前设置为0,然后执行增加increment操作。

127.0.0.1:6379> hget user:1 age
"28"
127.0.0.1:6379> hincrbyfloat user:1 age 10.2
"38.2"
127.0.0.1:6379> hget user:1 age
"38.2"

11.hlen key

获取指定key对应的哈希集中字段filed数量。

127.0.0.1:6379> hkeys user:2//查看指定Key中的字段
1) "name"
2) "age"
3) "address"
127.0.0.1:6379> hlen user:2//获取指定key对应的哈希集中字段filed数量。
(integer) 3



曾经以为,自己很勇敢,很坚强,不怕流泪,不畏痛苦。谁知,遇到伤心,遭遇痛苦,一样会流泪,一样会哭泣。

相关推荐

C++开发必知的内存问题及常用的解决方法-经典文章

1.内存管理功能问题由于C++语言对内存有主动控制权,内存使用灵活和效率高,但代价是不小心使用就会导致以下内存错误:omemoryoverrun:写内存越界odoublefree:同一块内...

缓存用不好,系统崩得早!10条军规让你成为缓存高手

凌晨三点,我被电话惊醒:“苏工!首页崩了!”监控显示:缓存命中率0%,数据库QPS10万+,线程阻塞2000+。根本原因竟是同事没加缓存!不会用缓存的程序员,就像不会刹车的赛车手——...

彻底搞清楚内存泄漏的原因,如何避免内存泄漏,如何定位内存泄漏

作为C/C++开发人员,内存泄漏是最容易遇到的问题之一,这是由C/C++语言的特性引起的。C/C++语言与其他语言不同,需要开发者去申请和释放内存,即需要开发者去管理内存,如果内存使用不当,就容易造成...

Java中间件-Memcached(Java中间件大全)

一、知识结构及面试题目分析缓存技术的大规模使用是互联网架构区别于传统IT技术最大的地方,是整体高并发高性能架构设计中是重中之重的关键一笔,也是互联网公司比较偏好的面试题目。按照在软件系统中所处位置...

linux内存碎片防治技术(linux内存碎片整理)

推荐视频:90分钟了解Linux内存架构,numa的优势,slab的实现,vmalloc原理剖析Linux内核内存分配与回收Linuxkernel组织管理物理内存的方式是buddysystem(伙...

Redis主从架构详解(redis主从配置详细过程)

Redis主从架构搭建Redis主节点配置创建主节点目录(/opt/redis-master),复制redis.conf到该目录下,redis.conf配置项修改#后台启动daemonizeyes...

揭开CXL内存的神秘面纱(内存c1)

摘要:现代数据中心对内存容量的高需求促进了内存扩展和分解方面的多条创新线,其中一项获得极大关注的工作是基于ComputeeXpressLink(CXL)的内存扩展。为了更好地利用CXL,研究人员建...

一文彻底弄懂 TPS RPS QPS(tps cps)

以下是关于RPS、QPS、TPS的核心区别与关联的总结,结合实际场景和优化建议:一、核心定义与区别RPS:RequestsPerSecond每秒请求数客户端到服务器的完整请求数量Web服务...

用Redis的“集合”找出你和朋友的“共同关注”

你是不是在刷抖音、微博、小红书的时候,常常会看到这样的提示:“你和XXX有共同关注的博主/朋友”?或者当你关注了一个新的明星,系统会推荐“你的朋友YYY也关注了这位明星”?这个看似简单的功能背后,其实...

WOT2016彭哲夫:科班出身开发者对运维人员的期许

“运维与开发”是老生常谈的话题,前几天和一个运维人聊天,TA说一些公司运维岗位都不公开招聘了,这让众多运维人员情何以堪?是运维的岗位真的饱和了?是找到合适的运维人才难?还是有这样那样的因素?带着这些疑...

Java程序员最常用的20%技术总结(java程序员要掌握什么)

我听说编程语言,经常使用的是其中20%的技术。在Java这门语言中,这20%包括哪些内容?找到一份Java初级程序员的工作,有哪些是必须掌握的,有哪些是可以现学现卖的?一个完整的Javaweb项目,有...

秒杀系统实战(四)| 缓存与数据库双写一致性实战

前言微笑挖坑,努力填坑。————已经拥有黑眼圈,但还没学会小猪老师时间管理学的蛮三刀同学本文是秒杀系统的第四篇,我们来讨论秒杀系统中「缓存热点数据」的问题,进一步延伸到数据库和缓存的...

头条评论精灵翻牌子(头条评论精灵翻牌子怎么弄)

关于“头条评论精灵翻牌子”功能,这通常是指平台通过算法或运营手段,将用户的优质评论随机或定向推送到更显眼的位置(如信息流顶部、独立曝光位等),以提升互动率和用户参与感。以下是详细解析和建议:一、功能理...

15个程序员们都应该知道的大模型高级提示词指令模板和示例

作为程序员你如何写大模型指令?你写的指令是不是更专业呢?下面是15个程序员使用的专业的大模型指令,如果早知道可以能节省你很多时间。这些指令可以用在chatgpt,deepseek等大模型。1.一键...

MyBatis-Plus内置的主键生成策略有大坑,要注意!

昨天小伙伴使用Mybaits-Plus开发的项目线上(集群、K8S)出现了主键重复问题,其报错如下:Mybatis-Plus启动时会通过com.baomidou.mybatisplus.core.to...

取消回复欢迎 发表评论: