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。

具体步骤如下:

Insertar descripción de la imagen aquí

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的使用流程图如下:

Insertar descripción de la imagen aquí

2.3 分布式后端项目的使用场景

下图是结合项目经历,外加百度查找资料,自行总结的基本使用场景。

Redis的使用场景图如下:

Insertar descripción de la imagen aquí

2.4 常见的缓存问题

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

Redis的缓存问题图如下:

Insertar descripción de la imagen aquí

三、源码解析

看源码自我总结出来的看新项目时的基本步骤,首先先看集成和配置,在从业务的角度来分析,结合集成的框架和组件,来依次剥削系统的架构。

**解析内容:**下方的解析内容大部分在图中解释,外面就不做过多的阐述。

3.1 集成与配置

直接拿源码分析,只分析与Redis有关的部分,其它部分读者请,自行看源码分析。

**项目启动:**只需要启动mall-tiny-redis模块的部分即可。

**启动所需:**启动mysql5,Redis的服务,创建数据库,并导入表(sql文件位置在,项目同级目录的document文件夹里)。

**ps:**记得修改数据库连接的配置信息和Redis的连接信息。

3.1.1 导入依赖

pom文件中导入Redis的相关依赖。

Insertar descripción de la imagen aquí

3.1.2 添加配置

application.yml中添加Redis的相关配置。
Insertar descripción de la imagen aquí

3.1.3 全局跨域配置

Insertar descripción de la imagen aquí

3.2 Redis测试

3.2.1 Redis配置类

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

1、Redis的配置和初始化工作

Insertar descripción de la imagen aquí

2、Redis序列化器

Insertar descripción de la imagen aquí

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

Insertar descripción de la imagen aquí

3.2.2 启动遇到swagger版本问题

1、出现问题

springboot集成swagger,出现 No mapping for GET /swagger-ui.html的错误

Insertar descripción de la imagen aquí

2、解决办法

在配置类中继承WebMvcConfigurationSupport类,重写addResourceHandlers方法

步骤一:继承

Insertar descripción de la imagen aquí

步骤二:重写

Insertar descripción de la imagen aquí

代码如下:

  @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、成功效果

Insertar descripción de la imagen aquí

3.2.3 测试Redis的缓存

经过上面的小插曲,现在开始步入正题。

1、测试简单缓存

存:redisTemplate.opsForValue().set(key, value)

取:redisTemplate.opsForValue().get(key)

Insertar descripción de la imagen aquí

2、测试Hash结构的缓存

存:redisTemplate.opsForHash().putAll(key, map)

取:redisTemplate.opsForHash().entries(key)

Insertar descripción de la imagen aquí

3、测试Set结构的缓存(无序)

存:redisTemplate.opsForSet().add(key, values)

删:redisTemplate.opsForSet().remove(key, values)

取:redisTemplate.opsForSet().members(key)

Insertar descripción de la imagen aquí

4、测试List结构的缓存(有序)

批量存:redisTemplate.opsForList().rightPushAll(key, values)

删:redisTemplate.opsForList().remove(key, count, value)

Ejemplo:redisTemplate.opsForList().range(clave, inicio, fin)

Insertar descripción de la imagen aquí

5 、Redis中的存储效果

Cuando los lectores navegaron antes, deben tener dudas: ¿no se trata del funcionamiento de Redis? ¿Por qué no ve el efecto de almacenamiento? La representación tardía es la siguiente, además de algunas introducciones.

Insertar descripción de la imagen aquí

3.2.4 Probar el caché de la interfaz de marca

Con respecto al uso del caché de Redis para la interfaz de marca, solo la consulta de detalles de la marca, la eliminación y la actualización usan el caché de Redis, y se describen en forma de anotaciones. Aquí daré dos ejemplos, consultando detalles de la marca y actualizando la información de la marca, respectivamente.

1 、获取指定id的品牌详情

Nota:@Cacheable(valor = RedisConfig.REDIS_KEY_DATABASE, clave = “'pms:brand:'+#id”, a menos que = “#result==null”)

Representación de pruebas bajo arrogancia :

Insertar descripción de la imagen aquí

Código de lógica empresarial:

Insertar descripción de la imagen aquí

Representación de Redis :

Insertar descripción de la imagen aquí

2 、更新指定id品牌信息

Nota:@CacheEvict(valor = RedisConfig.REDIS_KEY_DATABASE, clave = “'pms:brand:'+#id”)

Representación de pruebas bajo arrogancia :

Insertar descripción de la imagen aquí

Código de lógica empresarial:

Insertar descripción de la imagen aquí

Representación de Redis :

Insertar descripción de la imagen aquí

4. Resumen

En este artículo, primero obtuve los requisitos del proyecto real para aprender el caché de Redis, lo combiné con el código fuente para aprender y aprendí mallRedis del proyecto de código abierto. Siento que he ganado mucho. Espero este artículo te será útil.

En el futuro, también combinaré este marco para aprender otras pilas de tecnología.

盈若安好,便是晴天

Supongo que te gusta

Origin blog.csdn.net/qq_51601665/article/details/132514142
Recomendado
Clasificación