结合购物车功能,了解RedisTemplate中的BoundHashOperations源码

news2025/1/11 0:33:49

🧑‍💻作者名称: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

  1. 通过源码阅读,可以看出BoundHashOperations继承自BoundKeyOperations接口。
    在这里插入图片描述

  2. 对于BoundKeyOperations源码的英文解释如下:
    Operations over a Redis key. Useful for executing common key-'bound' operations to all implementations
    翻译:对Redis Key的操作。用来执行命令(所有实现了绑定Key的操作)

  3. 该基类的整体结构,可以看下图,不难看出都是对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

  1. 下图为此接口的结构。对于此源码有一段英文解释:
    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源码到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。如源码分析有误,请各位大佬指出


请添加图片描述

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

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

相关文章

零代码编程:用ChatGPT批量删除文件名称中的部分内容

要批量删除文件名称中的某些特定字符&#xff0c;可以在ChatGPT中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个文件重命名的任务。具体步骤如下&#xff1a; 本地电脑&#xff1a;E:\peppa4 文件夹下有很多mp4文件&#xff0c;比如Peppa Pig Season…

轮换对称性

二重积分 普通对称性–D关于 y x yx yx对称&#xff1a; ∬ D f ( x , y ) d σ { 2 ∬ D 1 f ( x , y ) d σ f ( x , y ) f ( y , x ) 0 f ( x , y ) − f ( y , x ) \iint_{D}f(x,y)d\sigma\begin{cases} 2\iint_{D_1}f(x,y)d\sigma\ \ \ \ \ \ f(x,y)f(y,x) \\ 0 \ \…

每天几道Java面试题:IO流(第五天)

目录 第五幕 、第一场&#xff09;街边 友情提醒 背面试题很枯燥&#xff0c;加入一些戏剧场景故事人物来加深记忆。PS:点击文章目录可直接跳转到文章指定位置。 第五幕 、 第一场&#xff09;街边 【衣衫褴褛老者&#xff0c;保洁阿姨&#xff0c;面试者老王】 衣衫褴褛老…

ATFX汇市:美联储宣布维持利率不变,鲍威尔继续发表鹰派言论

ATFX汇市&#xff1a;今日凌晨02:00&#xff0c;美联储公布9月利率决议结果&#xff0c;宣布维持5.25%5.5%的联邦基金利率区间不变。2:002:05&#xff0c;美元指数从最低104.75飙涨至最高105.21&#xff0c;对应EURUSD的汇率从最高1.0727下跌至最低1.0674&#xff0c;跌幅53基点…

如何将 Transformer 应用于时间序列模型

在机器学习的广阔前景中&#xff0c;transformers 就像建筑奇迹一样高高耸立&#xff0c;以其复杂的设计和捕获复杂关系的能力重塑了我们处理和理解大量数据的方式。 自 2017 年创建第一个 Transformer 以来&#xff0c;Transformer 类型呈爆炸式增长&#xff0c;其中包括 Chat…

VS|vs2017跨平台编译linuxC++ConsoleQtGUI

未完成 待更新 文章目录 首先安装vs时要勾选上使用C的Linux开发使用Vs2017创建跨平台C Console项目配置Vs的SSH连接 Debug >> Option >> Cross Plaform文件加入到Linux项目&#xff0c;使用Windows下的文件即可。将所有项目包含.CPP、.h文件包含进Linux项目设置项…

案例丨如何提升可视化分析能力?听听这两家企业怎么说

神策分析 2.5 版本正式发布经营分析能力以来&#xff0c;已有不少客户接入使用&#xff0c;并充分实现了可视化分析能力的提升。 本文将为大家分享两家客户的真实反馈&#xff0c;希望能够帮助您进一步了解神策经营分析的能力。 案例一&#xff1a;神策数据助力美篇打造公司级“…

Linux学习之gdb的使用

目录 1.Debug与Release模式 如何证明debug是可以被调试的&#xff1f; 2.Linux调试器-gdb使用 gdb调试的指令 指令一&#xff1a;list&#xff08;l&#xff09; 查看源代码 编辑 ​编辑 命令二&#xff1a;run&#xff08;r&#xff09;运行程序 命令三&#xff…

mall电商项目(学习记录1)

1.简介 mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。后台管理系统包含商品管理、订单管…

基于movie lens-100k数据集的协同过滤算法实现

基于movie lens-100k数据集的协同过滤算法实现 数据集处理 基于用户的协同过滤算法的实现 基于物品的协同过滤算法的实现 数据集处理 import pandas as pdu_data pd.read_csv(D:/PyCharmWorkSpace/ml-100k/ml-100k/u.data) u_genre pd.read_csv(D:/PyCharmWorkSpace/ml-10…

c: Sorting Algorithms

SortAlgorithm.h /*****************************************************************//*** \file SortAlgorithm.h* \brief 业务操作方法* VSCODE c11 https://github.com/hustcc/JS-Sorting-Algorithm/blob/master/2.selectionSort.md* https://www.programiz.com/d…

vscode软件安装包下载安装教程

目录 一、软件简介 二、软件下载 三、安装步骤 一、软件简介 VSCode&#xff08;全称&#xff1a;Visual Studio Code&#xff09;是一款由微软开发且跨平台的免费源代码编辑器。该软件支持语法高亮、代码自动补全&#xff08;又称 IntelliSense&#xff09;、代码重构、查…

BD就业复习第三天

1.连续活跃区间表的实现思路 实现连续活跃区间表是数据仓库中常见的需求&#xff0c;通常用于分析用户或实体在一段时间内的活跃情况。以下是一种可能的实现思路&#xff1a; 1. 数据模型设计&#xff1a; 首先&#xff0c;您需要设计一个数据模型来存储连续活跃区间。通常&a…

9.21算法(栈)

栈 用两个栈实现队列 栈&#xff1a;只允许在一头进行入队和出队&#xff0c;先进后出 队列&#xff1a;只允许一头入队&#xff0c;另一头出队&#xff0c;先进先出 如果先都放入一个栈中&#xff0c;就是倒序的&#xff0c;然后再把第一个栈中的元素依次移动到另一个栈中…

eSIM简介

翻译自eSIM eSIM eSIM被称为许多不同的名字。 有人说嵌入式SIM&#xff0c;有人说电子SIM和其他的说eSIM。 在行业标准最终确定并在该地区广泛采用之前&#xff0c;还会有其他名称出现。 无论我们称之为什么&#xff0c;此SIM的基本思想是将SIM&#xff08;UICC&#xff09;作为…

成绩查询解决方案

老师如果想要使用PHP代码创建一个查询系统&#xff0c;可以按照以下步骤进行操作&#xff1a; 建立数据库连接&#xff1a;首先&#xff0c;你需要使用PHP的数据库扩展&#xff08;如MySQLi或PDO&#xff09;来建立与数据库的连接。提供数据库的主机名、用户名、密码和数据库名…

实在智能携手40+央企,探索财务大模型及数智化实践与应用

“这次培训给我一个最大的感触就是&#xff0c;过去以为AI智能化、大模型技术是很高深的事情。但现在&#xff0c;我们通过RPA等数字化工具&#xff0c;自主根据自己的工作岗位&#xff0c;完成业务自动化流程的开发和设计。AI技术没有想象中的那么难入门。” 这是一位参加了“…

[答疑]角色和状态的区别

DDD领域驱动设计批评文集 “软件方法建模师”不再考查基础题 《软件方法》各章合集 jeri 2023-9-10 13:09 设备关联角色&#xff0c;设备也有子类&#xff08;车辆/设备&#xff09;&#xff0c;按书中的解释&#xff0c;设备是一个抽象类&#xff0c;角色类名像是带了状态…

第三天:实现网络编程基于tcp/udp协议在Ubuntu与gec6818开发板之间双向通信

互联网地址 每一台设备接入互联网后&#xff0c;都会举报一个唯一的地址编号 IP地址 INTERNET地址 internet地址 &#xff1a;它是协议上的一个逻辑地址 目前来说&#xff0c;我们主要的IP地址有两类 IPV4 IPV6 IPV4 其实就是使用一个32bit整数作为IP IPV6 其实就是使用一…

#循循渐进学51单片机#实例练习与经验累积#not.9

1、掌握不同类型变量转换的规则与字节操作进行位修改的技巧。 unsigned char a;unsigned int b;unsigned int c; 1)自动类型转换 2&#xff09;强制类型转换C &#xff08;unsigned long&#xff09;a*bl; C (unsigned long)(a*b); 3&#xff09;不同类型变量的赋值b a …