mall:redis项目源码解析

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
云解析 DNS,旗舰版 1个月
简介: 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.oopsForList().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,感觉收获颇深,希望这篇文章对你们也会有所帮助。

后续我也会结合该框架学习一下其他的技术栈。

盈若安好,便是晴天

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
2月前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
29天前
|
存储 缓存 Java
什么是线程池?从底层源码入手,深度解析线程池的工作原理
本文从底层源码入手,深度解析ThreadPoolExecutor底层源码,包括其核心字段、内部类和重要方法,另外对Executors工具类下的四种自带线程池源码进行解释。 阅读本文后,可以对线程池的工作原理、七大参数、生命周期、拒绝策略等内容拥有更深入的认识。
什么是线程池?从底层源码入手,深度解析线程池的工作原理
|
1月前
|
开发工具
Flutter-AnimatedWidget组件源码解析
Flutter-AnimatedWidget组件源码解析
152 60
|
29天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
238 37
|
18小时前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
12 3
|
5天前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
24 2
|
21天前
|
编解码 开发工具 UED
QT Widgets模块源码解析与实践
【9月更文挑战第20天】Qt Widgets 模块是 Qt 开发中至关重要的部分,提供了丰富的 GUI 组件,如按钮、文本框等,并支持布局管理、事件处理和窗口管理。这些组件基于信号与槽机制,实现灵活交互。通过对源码的解析及实践应用,可深入了解其类结构、布局管理和事件处理机制,掌握创建复杂 UI 界面的方法,提升开发效率和用户体验。
102 12
|
1月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
3天前
|
监控 数据可视化 搜索推荐
医院绩效核算系统源码开发,平衡计分卡在绩效管理中的应用解析
医院绩效核算系统是专为医疗机构设计的系统,通过科学方法评估科室和员工绩效,与HIS系统集成,确保数据准确实时。核心功能包括战略导向配置、现代技术架构、自动数据集成、灵活绩效核算机制及模块化管理,支持RBRVS、DRGs等多种考核方法,确保全面科学评估。采用平衡计分卡等工具,实现多维度绩效管理,促进组织持续改进与发展。
|
10天前
|
存储 NoSQL Java
Spring Boot项目中使用Redis实现接口幂等性的方案
通过上述方法,可以有效地在Spring Boot项目中利用Redis实现接口幂等性,既保证了接口操作的安全性,又提高了系统的可靠性。
11 0

热门文章

最新文章

推荐镜像

更多