mall:redis项目源码解析
一、mall开源项目
1.1 来源
mall学习教程,架构、业务、技术要点全方位解析。mall项目(50k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5.0、MongoDB 4.2.5、Mysql5.7等技术,采用Docker容器化部署。
项目github地址: github.com
1.2 项目转移
可以把github上的项目转移到gitee上,方便克隆到idea。
具体步骤如下:

1.3 项目克隆
由于github部署在国外,虽然idea也支持从github上拉取,但是克隆速度太慢,所以才推荐上述导入gitee后在克隆项目到idea。
具体的克隆步骤过于简单和常规化,读者可自行完成,或百度一下~
二、Redis 非关系型数据库
2.1 Redis简介
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API,是一个高性能的key-value数据库。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Redis开发文档地址: Redis 简介_redis教程
安装Redis操作简单,读者自行百度或查看开发文档安装即可。
2.2 分布式后端项目的使用流程
下图是结合项目经历,外加百度查找资料,自行总结的基本使用流程。
Redis的使用流程图如下:

2.3 分布式后端项目的使用场景
下图是结合项目经历,外加百度查找资料,自行总结的基本使用场景。
Redis的使用场景图如下:

2.4 常见的缓存问题
下图是结合项目经历,外加百度查找资料,自行总结的常见缓存问题。
Redis的缓存问题图如下:

三、源码解析
看源码自我总结出来的看新项目时的基本步骤,首先先看集成和配置,在从业务的角度来分析,结合集成的框架和组件,来依次剥削系统的架构。
解析内容:下方的解析内容大部分在图中解释,外面就不做过多的阐述。
3.1 集成与配置
直接拿源码分析,只分析与Redis有关的部分,其它部分读者请,自行看源码分析。
项目启动:只需要启动mall-tiny-redis模块的部分即可。
启动所需:启动mysql5,Redis的服务,创建数据库,并导入表(sql文件位置在,项目同级目录的document文件夹里)。
ps:记得修改数据库连接的配置信息和Redis的连接信息。
3.1.1 导入依赖
在pom文件中导入Redis的相关依赖。

3.1.2 添加配置
在application.yml中添加Redis的相关配置。

3.1.3 全局跨域配置

3.2 Redis测试
3.2.1 Redis配置类
Redis配置类实现了Redis的配置和初始化工作,包括创建RedisTemplate对象、配置Redis序列化器、设置Redis缓存有效期等。通过这些配置,应用程序可以方便地使用Redis来进行缓存操作。
1、Redis的配置和初始化工作

2、Redis序列化器

3、管理Redis缓存的读写操作和生命周期

3.2.2 启动遇到swagger版本问题
1、出现问题
springboot集成swagger,出现 No mapping for GET /swagger-ui.html的错误

2、解决办法
在配置类中继承WebMvcConfigurationSupport类,重写addResourceHandlers方法
步骤一:继承

步骤二:重写

代码如下:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("doc.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
3、成功效果

3.2.3 测试Redis的缓存
经过上面的小插曲,现在开始步入正题。
1、测试简单缓存
存:redisTemplate.opsForValue().set(key, value)
取:redisTemplate.opsForValue().get(key)

2、测试Hash结构的缓存
存:redisTemplate.opsForHash().putAll(key, map)
取:redisTemplate.opsForHash().entries(key)

3、测试Set结构的缓存(无序)
存:redisTemplate.opsForSet().add(key, values)
删:redisTemplate.opsForSet().remove(key, values)
取:redisTemplate.opsForSet().members(key)

4、测试List结构的缓存(有序)
批量存:redisTemplate.opsForList().rightPushAll(key, values)
删:redisTemplate.opsForList().remove(key, count, value)
取:redisTemplate.opsForList().range(key, start, end)

5、Redis中的存储效果
读者在前面浏览时,肯定有疑惑,不是对Redis的操作吗?那咋没有看见存储效果,姗姗来迟的效果图如下,外加一些介绍。

3.2.4 测试品牌接口的缓存
对于品牌接口使用Redis缓存情况,这里只有查询品牌详情,删除,更新这三个使用到了Redis缓存,并且是以注解的形式描述,这里我举2个例子,分别为查询品牌详情和更新品牌信息。
1、获取指定id的品牌详情
注解:@Cacheable(value = RedisConfig.REDIS_KEY_DATABASE, key = "'pms:brand:'+#id", unless = "#result==null")
swagger下测试的效果图:

业务逻辑代码:

Redis的效果图:

2、更新指定id品牌信息
注解:@CacheEvict(value = RedisConfig.REDIS_KEY_DATABASE, key = "'pms:brand:'+#id")
swagger下测试的效果图:

业务逻辑代码:

Redis的效果图:

四、总结
本文是有我先从实际项目中获取需求,从而对Redis缓存的学习,结合源码来学习,从mall开源项目中学习Redis,感觉收获颇深,希望这篇文章对你们也会有所帮助。
后续我也会结合该框架学习一下其他的技术栈。
盈若安好,便是晴天
mall:redis项目源码解析的更多相关文章
- Android 开源项目源码解析(第二期)
Android 开源项目源码解析(第二期) 阅读目录 android-Ultra-Pull-To-Refresh 源码解析 DynamicLoadApk 源码解析 NineOldAnimations ...
- [原创]android开源项目源码解析(一)----CircleImageView的源码解析
CircleImageView的代码很简洁,因此先将此工程作为源码解析系列的第一篇文章. 解析说明都在代码里了. /* * Copyright 2014 - 2015 Henning Dodenhof ...
- 开源项目源码解析-PhotoView 源码解析
1. 功能介绍 特性(Features): 支持 Pinch 手势自由缩放. 支持双击放大/还原. 支持平滑滚动. 在滑动父控件下能够运行良好.(例如:ViewPager) 支持基于 Matrix 变 ...
- Github star 1.7k 的项目源码解析
先拜读源码,最后总结,以及其他实现思路.如有错误,欢迎指正! 项目介绍 名称:Darkmode.js 功能:给你的网站添加暗色模式 项目链接:https://github.com/sandoche/D ...
- 源码解析-Volley(转自codeKK)
Volley 源码解析 本文为 Android 开源项目源码解析 中 Volley 部分项目地址:Volley,分析的版本:35ce778,Demo 地址:Volley Demo分析者:grumoon ...
- Volley 源码解析(转)
项目:Volley,分析者:grumoon,校对者:Trinea 本文为 Android 开源项目源码解析 中 Volley 部分项目地址:Volley,分析的版本:35ce778,Demo 地址:V ...
- 【转载】Xutils3源码解析
Github源码地址:https://github.com/wyouflf/xUtils3 原文地址 :http://www.codekk.com/blogs/detail/54cfab086c476 ...
- Flink 源码解析 —— 项目结构一览
Flink 源码项目结构一览 https://t.zsxq.com/MNfAYne 博客 1.Flink 从0到1学习 -- Apache Flink 介绍 2.Flink 从0到1学习 -- Mac ...
- 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新
本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
随机推荐
- vue全家桶进阶之路29:Element Plus
Element Plus是一个用于Vue.js的UI组件库,为开发人员提供了一组可重用和可定制化的组件,用于构建现代Web应用程序.它是流行的Element UI库的扩展,重点是提高性能和可访问性. ...
- Github Copilot Chat 初体验
最近因为阳了的缘故一直躺在床上.今天终于从床上爬起来了.不是因为好透了,而是因为我收到了申请Copilot Chat preview 权限通过的邮件.实在忍不住,于是起床开电脑在咳嗽声中进行了一番体验 ...
- 在Winform中一分钟入门使用好看性能还好的Blazor Hybrid
在Winform中一分钟入门使用好看性能还好的Blazor Hybrid 安装模板 dotnet new install Masa.Template::1.0.0-rc.2 创建 Winform的Bl ...
- linux nfs共享存储服务
目录 一.nfs服务 二.nfs优点 三.配置文件 四.共享文件配置过程 五.实验 1.创建共享文件(两台终端共享) 一.nfs服务 概念:网络上共享文件系统的协议,运行多个服务器之间通过网络共享文件 ...
- 未来之JavaScript做嵌入式
只听说过汇编,c做嵌入式,从不曾想JAVAScript也牛到涉入硬件领域了,原本对他的思维定格就是一个浏览器脚本.看来真应了那句话'只有想不到,没有做不到' 话不多说看看这些大佬的帖子在嵌入式设备中使 ...
- Python基础 - 第一个python程序
Python程序是什么? Python源程序就是一个特殊格式的文本文件,可以使用任意文本编辑器软件做python的开发,python的文件扩展名为 .py 执行python程序的三种方式 直接调用解释 ...
- Kubernetes 证书详解(鉴权)
Kubernetes 证书详解(鉴权) 简介 上一篇 系统分析了 Kubernetes 集群中每个证书的作用和证书认证的原理.对于 Kube-apiserver,Kubelet 来说,它们都能提供 H ...
- 让优惠再续一年!SHPC 老客专享
最近云筏君经常收到自家小伙伴发来的关于产品活动的关心慰问,掐指一算,哦,原来是一年一度大家喜闻乐见的剁手节(学名"双十一")马上要来了! 大家都知道,云筏家的产品向来主打高性价比, ...
- 让ChatGPT来写今年的高考作文,能得几分?
使用最新的ChatGPT4模型,做2023年全国甲卷的高考作文. 作文考试题目如下 人们因技术发展得以更好地掌控时间,但也有人因此成了时间的仆人.这句话引发了你怎样的联想与思考?请写一篇文章. 要求: ...
- 推送服务接入指导(HarmonyOS篇)
消息推送作为App运营日常使用的用户促活和召回手段,是与用户建立持续互动和连接的良好方式.推送服务(Push Kit)是华为提供的消息推送平台,建立了从云端到终端的消息推送通道,本文旨在介绍Harmo ...