Redis实战(10)-Hash实战之借助命令行和代码形式认识一下哈希

概述:本系列博文所涉及的相关内容来源于debug亲自录制的实战课程:缓存中间件Redis技术入门与应用场景实战(SpringBoot2.x + 抢红包系统设计与实战),感兴趣的小伙伴可以点击自行前往学习(毕竟以视频的形式来掌握技术 会更快!) 文章所属技术专栏:缓存中间件Redis技术入门与实战

摘要:对于哈希数据类型Hash,有些小伙伴在实际的项目开发中相对于Redis其他的数据结构而言,可能用得并不多。然而,从“道”的层面上看,这丝毫不影响一个客观事实、规律的存在:那就是哈希Hash本身也很强大,从本文开始我们将介绍数据类型~哈希Hash的相关特性及其相应的API和命令行层面上的操作!

内容:对于数据类型哈希Hash,可能有些小伙伴在实际的项目开发中用得并不是很多,而更多的替代性方案是采用前面篇章介绍的:字符串String、列表List、集合Set、有序集合SortedSet等数据结构。

然而,用得少归用得少,其作用还是很强大的,特别是在存储“同种对象类型”的数据列表时哈希Hash更能提现其优势,除此之外,其最大的、直观上的作用便是“减少了缓存Key的数量”,而这主要还得得益于哈希Hash底层存储数据时的存储方式,如下图所示:

从上图中可以看到,哈希Hash底层存储数据的方式确实跟其他数据结构有点不同,其他数据结构几乎都是:Key-Value的存储,而Hash则是:Key – [Field-Value] 的存储,也就是说其他数据结构的Value一般是确切的值,而Hash的Value是一系列的键值对,通常我们是这样子称呼Hash的存储的:大Key为实际的Key,小Key为Field,而具体的取值为Field对应的值

 

一、命令行的方式实战哈希Hash

接下来,我们先采用命令行的方式来认识认识这位大佬,如下图所示,debug给各位小伙伴罗列出了常见、常用的命令行列表:

 

(1)往哈希表指定的Key添加File-Value对(单独添加Field-Value:HSET key field value;HSETNX key field value):

HMSET classOne 2010 xiaoming 2011 xiaohong 2012 debug 2013 jack

(2)获取哈希表中指定 Key的所有字段和值:  

HGETALL classOne

返回值:
1) "2010"
2) "xiaoming"
3) "2011"
4) "xiaohong"
5) "2012"
6) "debug"
7) "2013"
8) "jack"

(3)获取存储在哈希表中Key指定字段的值:  

HGET classOne 2010

返回值:"xiaoming"

(4)删除哈希表中key对应的一个或多个字段Field:  

HDEL classOne 2010

(5)查看哈希表的key中,指定的字段是否存在:  

HEXISTS classOne 2010

返回值:(integer) 0

(6)获取哈希表中指定Key的所有字段Field:  

HKEYS classOne

返回值:
1) "2011"
2) "2012"
3) "2013"

(7)获取哈希表中指定Key的所有字段对应的值Value:  

HVALS classOne

返回值:
1) "xiaohong"
2) "debug"
3) "jack"

 (8)获取哈希表中指定Key的字段的数量:  

HLEN classOne

返回值:(integer)3

 (9)获取所有给定字段Field的值Value:  

HMGET classOne 2011 2012

返回值:
1) "xiaohong"
2) "debug"

二、Java单元测试-代码的方式实战Hash

同样的道理,我们仍然需要采用代码的形式来实战哈希Hash,将其常见的命令行与实际的代码API方法结合起来,如此才能更好的理解哈希Hash相关命令的使用:

    @Test
    public void method5() {
        log.info("----开始哈希Hash测试");

        final String key = "SpringBootRedis:Hash:Key:v1";
        redisTemplate.delete(key);

        HashOperations<String,String,String> hashOperations=redisTemplate.opsForHash();
        hashOperations.put(key,"10010","zhangsan");
        hashOperations.put(key,"10011","lisi");

        Map<String,String> dataMap= Maps.newHashMap();
        dataMap.put("10012","wangwu");
        dataMap.put("10013","zhaoliu");
        hashOperations.putAll(key,dataMap);

        log.info("---哈希hash-获取列表元素: {} ",hashOperations.entries(key));
        log.info("---哈希hash-获取10012的元素: {} ",hashOperations.get(key,"10012"));
        log.info("---哈希hash-获取所有元素的field列表: {} ",hashOperations.keys(key));

        log.info("---哈希hash-10013成员是否存在: {} ",hashOperations.hasKey(key,"10013"));
        log.info("---哈希hash-10014成员是否存在: {} ",hashOperations.hasKey(key,"10014"));

        hashOperations.putIfAbsent(key,"10020","sunwukong");
        log.info("---哈希hash-获取列表元素: {} ",hashOperations.entries(key));

        log.info("---哈希hash-删除元素10010 10011: {} ",hashOperations.delete(key,"10010","10011"));
        log.info("---哈希hash-获取列表元素: {} ",hashOperations.entries(key));

        log.info("---哈希hash-获取列表元素个数: {} ",hashOperations.size(key));
    }

其运行结果如下图所示:

 

好了,本篇文章我们就介绍到这里了,建议各位小伙伴一定要照着文章提供的样例代码撸一撸,只有撸过才能知道这玩意是咋用的,否则就成了“空谈者”!

对Redis相关技术栈以及实际应用场景实战感兴趣的小伙伴可以前往debug搭建的技术社区的课程中心进行学习观看:程序员实战基地 !其他相关的技术,感兴趣的小伙伴可以关注底部debug的技术公众号,一起学习、共同成长!

补充:

1、本文涉及到的相关的源代码可以到此地址,check出来进行查看学习:https://gitee.com/steadyjack/SpringBootRedis

2、目前debug已将本文所涉及的内容整理录制成视频教程,感兴趣的小伙伴可以前往观看学习:https://edu.csdn.net/course/detail/26619

3、关注一下debug的技术微信公众号,最新的技术文章、课程以及技术专栏将会第一时间在公众号发布哦!

发布了140 篇原创文章 · 获赞 253 · 访问量 64万+
展开阅读全文

SpringBoot2.0企业中台~分布式系统实战成神之路

12-11

本套餐将包含3大重量级课程,旨在一步一步教授各位小伙伴分布式、微服务SpringBoot2.0实战的相关技术栈,并最终将其用于“企业权限管理平台”和“企业级中台系统”的实战当中,真正践行“从实践中来、从实践中去”的理念,掌握并巩固提升各位小伙伴的核心竞争力!其中包含的3大课程以及学习顺序如下所示: 1、分布式服务调度中间件dubbo实战课程:掌握在分布式系统环境之下如何发布服务-接口,如何调用其他项目的服务-接口以及掌握dubbo在当前微服务项目、分布式系统服务调度的使用;如何基于dubbo rpc协议、http协议实战实际的业务场景,进而巩固dubbo的相关知识要点! 2、SpringBoot2.0企业权限管理平台 : 主要在于将所学的微服务技术栈应用于企业级项目的开发中,了解企业应用业务模块的开发流程与开发模式(从前端到后端再到数据库),最终一步一步地成为企业应用开发中需要的人才! 3、SpringBoot2.0企业中台实战之权限统一管理与应用统一授权 (dubbo分布式系统实战):掌握中台的思想及其如何在项目中落地,并基于微服务SpringBoot2.0和分布式系统架构相关技术栈加以实现;分布式系统架构的设计、业务需求分析、代码实战以及分布式服务通信相关的技术栈;分布式服务调度Dubbo+ZooKeeper的基本开发技术栈、Redis、分布式Session共享、Guava_Retrying重试机制、组件JWT、OkHttp3等核心技术栈;分布式系统中服务与服务之间是如何通信、拦截过滤url以及认证Token的;除此之外,分布式系统架构代码性能优化也可以从本课程中学到!

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览