🧑💻作者名称:DaenCode
🎤作者简介:CSDN实力新星,后端开发两年经验,曾担任甲方技术代表,业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开发。技术尚浅,闭关学习中······
😎人生感悟:尝尽人生百味,方知世间冷暖。
📖所属专栏:Redis相关源码分析
专栏推荐
- 专门为Redis入门打造的专栏,包含Redis基础知识、基础命令、五大数据类型实战场景、key删除策略、内存淘汰机制、持久化机制、哨兵模式、主从复制、分布式锁等等内容。
链接>>>>>>>>>
《Redis从头学》 - SpringBoot实战相关专栏,包含SpringBoot过滤器、拦截器、AOP实现日志、整合Freemaker、整合Redis等等实战相关内容,多篇文章登入全站热榜、领域热榜、被技术社区收录。
链接>>>>>>
《SpringBoot实战》
文章目录
- 专栏推荐
- 🌟前言
- 🌟购物车存储结构
- 🌟总体结构
- 基类BoundKeyOperations
- BoundHashOperations
- RedisTemplate中的boundHashOps方法
- 🌟总结
- 🌟写在最后
🌟前言
之前做的电商项目中的购物车功能,采用了Redis中的Hash结构进行存储实现。这就很有必要了解一下其Hash结构以及其底层操作源码是怎样的。不然在实现功能的时候,调用相关API就是一头雾水。若源码解释有误,望大佬们指出,不胜感激!!!
🌟购物车存储结构
分析之前,先来看一下购物车的存储结构是怎样的:
Map<String,Map<Object,Object>>—》BoundHashOperations<H,HK,HV>
- 第一层map的key:userId-用户id
- 第二层map的key:productId-商品id
- 第二层map的value:productdetail:商品的详情。
🌟总体结构
分析之前可以先将BoundHashOperations的结构看作为BoundHashOperations<String,Object,Object>。
基类BoundKeyOperations
-
通过源码阅读,可以看出BoundHashOperations继承自BoundKeyOperations接口。
-
对于BoundKeyOperations源码的英文解释如下:
Operations over a Redis key. Useful for executing common key-'bound' operations to all implementations
翻译:对Redis Key的操作。用来执行命令(所有实现了绑定Key的操作) -
该基类的整体结构,可以看下图,不难看出都是对Key的相关操作。进一步分析其中的getKey()源码以及对于其英文解释:
Returns the key associated with this entity. Returns:key associated with the implementing entity
就可以确定此接口就是为了绑定key以及实现了这个接口的实例的key。不难理解,此接口中的操作,是对BoundHashOperations<String,Object,Object>中的最外层的String类型的这个Key进行进行操作的。
BoundHashOperations
- 下图为此接口的结构。对于此源码有一段英文解释:
Hash operations bound to a certain key.
翻译:绑定到特定Key的Hash操作。通过此解释,不难理解,此接口中的操作,是对BoundHashOperations<String,Object,Object>中的Object,Object这两个值(这两个值也可正好构成Hash结构)进行操作的。
实践结合:通过此接口中的get方法来获取某个HKey(商品ID)对应的HValue(商品数据)。
RedisTemplate中的boundHashOps方法
通过源码可以看出,操作模板中的boundHashOps方法就是为了抽取出BoundHashOperations这个接口,也就是绑定某个Key的Hash操作。
实践结合:调用此方法,来抽取某用户id(Key)的购物车(商品id(HKey),商品详情(HValue))
🌟总结
下方为手写的草图,看着可以让我更有印象哈哈哈哈哈。
🌟写在最后
有关于结合购物车功能,了解RedisTemplate中的BoundHashOperations源码到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。如源码分析有误,请各位大佬指出