一、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项目源码解析的更多相关文章

  1. Android 开源项目源码解析(第二期)

    Android 开源项目源码解析(第二期) 阅读目录 android-Ultra-Pull-To-Refresh 源码解析 DynamicLoadApk 源码解析 NineOldAnimations ...

  2. [原创]android开源项目源码解析(一)----CircleImageView的源码解析

    CircleImageView的代码很简洁,因此先将此工程作为源码解析系列的第一篇文章. 解析说明都在代码里了. /* * Copyright 2014 - 2015 Henning Dodenhof ...

  3. 开源项目源码解析-PhotoView 源码解析

    1. 功能介绍 特性(Features): 支持 Pinch 手势自由缩放. 支持双击放大/还原. 支持平滑滚动. 在滑动父控件下能够运行良好.(例如:ViewPager) 支持基于 Matrix 变 ...

  4. Github star 1.7k 的项目源码解析

    先拜读源码,最后总结,以及其他实现思路.如有错误,欢迎指正! 项目介绍 名称:Darkmode.js 功能:给你的网站添加暗色模式 项目链接:https://github.com/sandoche/D ...

  5. 源码解析-Volley(转自codeKK)

    Volley 源码解析 本文为 Android 开源项目源码解析 中 Volley 部分项目地址:Volley,分析的版本:35ce778,Demo 地址:Volley Demo分析者:grumoon ...

  6. Volley 源码解析(转)

    项目:Volley,分析者:grumoon,校对者:Trinea 本文为 Android 开源项目源码解析 中 Volley 部分项目地址:Volley,分析的版本:35ce778,Demo 地址:V ...

  7. 【转载】Xutils3源码解析

    Github源码地址:https://github.com/wyouflf/xUtils3 原文地址 :http://www.codekk.com/blogs/detail/54cfab086c476 ...

  8. Flink 源码解析 —— 项目结构一览

    Flink 源码项目结构一览 https://t.zsxq.com/MNfAYne 博客 1.Flink 从0到1学习 -- Apache Flink 介绍 2.Flink 从0到1学习 -- Mac ...

  9. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  10. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

随机推荐

  1. Selenium - 元素定位(3) - CSS进阶

    Selenium - 元素定位 CSS 定位进阶 元素示例 属性定位 # css 通过id属性定位 driver.find_element_by_css_selector("#kw" ...

  2. 使用js闭包封装一个原生的模态框

    现在都是用的是人家封装的框架什么的,但是对于底层的了解也是必须的,不然就无法提升,下面分享一个2 years ago 自己封装的一个提示框 样式很简单(适用于任何分辨率) 具体代码如下 /** * 该 ...

  3. 每周更新 | Verilog测试用例及波形展示图功能上线

    Hi,亲爱的技术伙伴,经过产研团队的努力,本周ShowMeBug有以下4个功能上线啦- 芯片语言 Verilog 支持测试用例 芯片语言 Verilog 支持测试用例,自动评分同步上线- 同时,Ver ...

  4. Spark常用算子

    Spark是一个快速.通用.可扩展的分布式数据处理引擎,支持各种数据处理任务.Spark提供了许多强大的算子,用于对数据集进行各种转换和操作. 以下是Spark中常用的一些算子: 1. map:对RD ...

  5. Python爬虫————泉州二手房数据爬取和数据可视化

    1.选题的背景 我本次的主题是泉州二手房房价的调查分析. 首先通过爬虫采集链家网上所有二手房的房源数据,并对采集到的数据进行清洗:然后,对清洗后的数据进行可视化分析,探索隐藏在大量数据背后的规律:将这 ...

  6. Spring Boot实现高质量的CRUD-3

    (续前文) 7.Service接口类 ​ ​ Service类提供业务的实现逻辑,其调用Dao类的方法进行数据存取,并为Controller类提供方法.类似于Dao的接口类,服务层使用接口类,便于代码 ...

  7. 尚医通-day12【token续期和就诊人管理】(内附源码)

    页面预览 就诊人管理 就诊人列表 添加就诊人 查看就诊人 ![image-20230225060710 管理员系统用户管理 前面我们完成了用户登录.用户认证与就诊人管理,现在我们需要把这些信息在我们的 ...

  8. spark连接mysql数据库

    1.安装启动检查Mysql服务.netstat -tunlp (3306) 2.spark 连接mysql驱动程序. –cp /usr/local/hive/lib/mysql-connector-j ...

  9. Python读取本地文件时出现错误UnicodeDecodeError

    Python读取本地文件时出现错误UnicodeDecodeError: 'gbk' codec can't decode byte 0x94 in position 5702: illegal mu ...

  10. 字符串加密DES

    提前关于加密的方式,我目前知道的有MD5,DES等等.今天写一下使用DES的代码,方便下次使用. package mocha.framework.hrbase.rest.utils; import j ...