• 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,感觉收获颇深,希望这篇文章对你们也会有所帮助。

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

    盈若安好,便是晴天

  • 相关阅读:
    艾美捷专有脂质SM-102说明书
    springboot整合MeiliSearch轻量级搜索引擎
    【图像修复】论文阅读笔记 ----- 《Image inpainting based on deep learning: A review》
    CorelDRAW2022矢量绘图软件老牌的矢量图形制作工具
    Echats-wordcloud 文字云图的踩坑点【Unknown series wordCloud】
    【ML on Kubernetes】第 7 章:模型部署和自动化
    应用商店优化的好处有哪些?
    【技术实战】Java开发岗位的八股文积累【一】
    [卷积神经网络]FasterNet论文解析
    c++ 重载、重写、覆盖
  • 原文地址:https://www.cnblogs.com/MrDevil-k/p/17659243.html