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
可以把github上的專案轉移到gitee上,方便克隆到idea。
具體步驟如下:
由於github部署在國外,雖然idea也支援從github上拉取,但是克隆速度太慢,所以才推薦上述匯入gitee後在克隆專案到idea。
具體的克隆步驟過於簡單和常規化,讀者可自行完成,或百度一下~
Redis是一個開源的使用ANSI C語言編寫、遵守BSD協定、支援網路、可基於記憶體亦可持久化的紀錄檔型、Key-Value資料庫,並提供多種語言的API,是一個高效能的key-value資料庫。
它通常被稱為資料結構伺服器,因為值(value)可以是 字串(String), 雜湊(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等型別。
Redis 與其他 key - value 快取產品有以下三個特點:
Redis開發檔案地址: Redis 簡介_redis教學
安裝Redis操作簡單,讀者自行百度或檢視開發檔案安裝即可。
下圖是結合專案經歷,外加百度查詢資料,自行總結的基本使用流程。
Redis的使用流程圖如下:
下圖是結合專案經歷,外加百度查詢資料,自行總結的基本使用場景。
Redis的使用場景圖如下:
下圖是結合專案經歷,外加百度查詢資料,自行總結的常見快取問題。
Redis的快取問題圖如下:
看原始碼自我總結出來的看新專案時的基本步驟,首先先看整合和設定,在從業務的角度來分析,結合整合的框架和元件,來依次剝削系統的架構。
解析內容:下方的解析內容大部分在圖中解釋,外面就不做過多的闡述。
直接拿原始碼分析,只分析與Redis有關的部分,其它部分讀者請,自行看原始碼分析。
專案啟動:只需要啟動mall-tiny-redis
模組的部分即可。
啟動所需:啟動mysql5,Redis的服務,建立資料庫,並匯入表(sql檔案位置在,專案同級目錄的document
資料夾裡)。
ps:記得修改資料庫連線的設定資訊和Redis的連線資訊。
在pom檔案
中匯入Redis的相關依賴。
在application.yml
中新增Redis的相關設定。
Redis設定類實現了Redis的設定和初始化工作,包括建立RedisTemplate物件、設定Redis序列化器、設定Redis快取有效期等。通過這些設定,應用程式可以方便地使用Redis來進行快取操作。
1、Redis的設定和初始化工作
2、Redis序列化器
3、管理Redis快取的讀寫操作和生命週期
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、成功效果
經過上面的小插曲,現在開始步入正題。
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的操作嗎?那咋沒有看見儲存效果,姍姍來遲的效果圖如下,外加一些介紹。
對於品牌介面使用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,感覺收穫頗深,希望這篇文章對你們也會有所幫助。
後續我也會結合該框架學習一下其他的技術棧。
盈若安好,便是晴天