清理緩存簡單功能實現

在程序開發中,經常會用到緩存,最常用的后端緩存技術有Redis、MongoDB、Memcache等。

而有時候我們希望能夠手動清理緩存,點一下按鈕就把當前Redis的緩存和前端緩存都清空。

功能非常簡單,創建一個控制器類CacheController,并提供一個post請求的接口/cache/clean供用戶使用。

目錄

后端代碼

CacheController.java

RedisUtils.java

StringRedisUtils.java

前端代碼


后端代碼

CacheController.java

import cn.edu.sgu.www.mhxysy.consts.MimeType;
import cn.edu.sgu.www.mhxysy.redis.RedisUtils;
import cn.edu.sgu.www.mhxysy.restful.JsonResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;/*** @author heyunlin* @version 1.0*/
@RestController
@Api(tags = "緩存管理")
@RequestMapping(path = "/cache", produces = MimeType.APPLICATION_JSON_CHARSET_UTF_8)
public class CacheController {/*** 應用名*/@Value("${spring.application.name}")private String service;private final RedisUtils redisUtils;@Autowiredpublic CacheController(RedisUtils redisUtils) {this.redisUtils = redisUtils;}@ApiOperation("清理應用的緩存")@RequestMapping(value = "/clean", method = RequestMethod.POST)public JsonResult<Void> location() {redisUtils.deleteByPattern(service + "*");return JsonResult.success("緩存清理成功~");}}

RedisUtils.java

?RedisUtils是一個接口,它的實現類為StringRedisUtils是通過StringRedisTemplate封裝成的工具類。

import java.util.concurrent.TimeUnit;/*** redis工具類* @author heyunlin* @version 1.0*/
public interface RedisUtils {/*** 獲取key的值:get key* @param key redis的key* @return key的值*/String get(String key);/*** 設置key:set key value* @param key redis的key* @param value key的值*/void set(String key, String value);/*** 設置key:set key value ex timeout = set key value + expire key timeout* @param key redis的key* @param value key的值* @param timeout 過期時間* @param timeUnit 時間單位*/void set(String key, String value, long timeout, TimeUnit timeUnit);/*** 刪除key:del key* @param key redis的key*/void delete(String key);/*** 根據pattern刪除key:del keys pattern* @param pattern String*/void deleteByPattern(String pattern);/*** 讓key自增:incrby key* @param key redis的key* @return 自增后的值*/Long incrBy(String key);/*** 判斷key是否存在* @param key redis的key* @return key存在則返回true,否則返回false*/Boolean hasKey(String key);/*** 設置key的過期時間:expire key seconds* @param key redis的key* @param timeout 過期時間* @param timeUnit 時間單位*/void expire(String key, long timeout, TimeUnit timeUnit);
}

StringRedisUtils.java

import cn.edu.sgu.www.mhxysy.util.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;import java.util.Set;
import java.util.concurrent.TimeUnit;/*** 封裝了StringRedisTemplate的redis工具類* @author heyunlin* @version 1.0*/
@Component
public class StringRedisUtils implements RedisUtils {private final StringRedisTemplate stringRedisTemplate;@Autowiredpublic StringRedisUtils(StringRedisTemplate stringRedisTemplate) {this.stringRedisTemplate = stringRedisTemplate;}@Overridepublic String get(String key) {return getValueOperations().get(key);}@Overridepublic void set(String key, String value) {getValueOperations().set(key, value);}@Overridepublic void set(String key, String value, long timeout, TimeUnit timeUnit) {getValueOperations().set(key, value, timeout, timeUnit);}@Overridepublic void delete(String key) {stringRedisTemplate.delete(key);}@Overridepublic void deleteByPattern(String pattern) {Set<String> keys = stringRedisTemplate.keys(pattern);if (CollectionUtils.isNotEmpty(keys)) {stringRedisTemplate.delete(keys);}}@Overridepublic Long incrBy(String key) {return getValueOperations().increment(key);}@Overridepublic Boolean hasKey(String key) {return stringRedisTemplate.hasKey(key);}@Overridepublic void expire(String key, long timeout, TimeUnit timeUnit) {stringRedisTemplate.expire(key, timeout, timeUnit);}/*** 獲取ValueOperations對象* @return ValueOperations<String, String>*/private ValueOperations<String, String> getValueOperations() {return stringRedisTemplate.opsForValue();}}

前端代碼

點擊下拉菜單的清理緩存按鈕,就能完成刪除前后端緩存的功能。

前端的javascript代碼如下

/*** 封裝的ajax post請求* @param url 請求url* @param params 請求參數* @param success 成功回調函數* @param error 失敗回調函數* @param async 是否異步*/
function ajaxPost(url, params, success, error, async = true) {$.ajax({type: "POST",url: base + url,data: params,async: async,cache: false,dataType: "json",processData: true,success: success,error: error});
}/*** 錯誤回調函數* @param res*/
let error = (res) => {let response = res.responseJSON;// 請求有響應if (res && response) {let status = res.status;if (status) {let message;if (status === 404) { // 404 not foundif (response.path) {message = "路徑" + response.path + "不存在。";} else {message = response.message;}} else {message = response.message;}alert(message);// console.log("響應狀態碼:" + status + ", 響應消息:" + message);} else {console.log("請求沒有響應狀態碼~");}} else {console.log("請求無響應~");}
}$(function() {$("#clean").on("click", function() {ajaxPost("/cache/clean", {},function(response) {showMsg(response.message);localStorage.clear();}, error);});});

先通過post請求訪問/cache/clean接口,當清理完后端的redis緩存數據之后,再清空前端localStorage的緩存,當然也可以清除cookile里的緩存數據。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/12285.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12285.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12285.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringBoot PowerMockito 私有/靜態/方法/屬性

SpringBoot PowerMockito 私有/靜態/方法/屬性 1 PrepareForTest2 待測試類3 測試類 1 PrepareForTest PrepareForTest 是 PowerMockito 提供的一個注解&#xff0c;用于告訴 PowerMockito 哪些類需要被修改以允許使用 PowerMockito 的功能。 PowerMockito 主要用于修改 Java…

【計算機畢業設計】基于SSM+Vue的線上旅行信息管理系統【源碼+lw+部署文檔+講解】

目錄 1 緒論 1.1 研究背景 1.2 設計原則 1.3 論文組織結構 2 系統關鍵技術 2.1JSP技術 2.2 JAVA技術 2.3 B/S結構 2.4 MYSQL數據庫 3 系統分析 3.1 可行性分析 3.1.1 技術可行性 3.1.2 操作可行性 3.1.3 經濟可行性 3.1.4 法律可行性 3.2系統功能分析 3.2.1管理員功能分析 3.2.…

JavaScript精粹(一)

JavaScript&#xff08;簡稱為JS&#xff09;是一種廣泛應用于網頁開發的腳本語言&#xff0c;具有以下幾個主要作用&#xff1a; 網頁交互&#xff1a;JavaScript 可以用于創建動態的網頁效果&#xff0c;例如響應用戶的操作&#xff0c;實現頁面內容的動態更新&#xff0c;以…

Java SE vs Java EE:深入剖析及面試指南

Java 平臺提供了多個版本來滿足不同應用場景的需求&#xff0c;其中最常用的是 Java SE&#xff08;Standard Edition&#xff09;和 Java EE&#xff08;Enterprise Edition&#xff09;。理解這兩個版本的區別對于任何 Java 開發者都是至關重要的&#xff0c;尤其是在面試過程…

C++字符串細節,面試題06

文章目錄 22. 字符串22.1. 字符數組 vs 字符指針 vs 常量字符指針 vs string22.2. strcpy vs sprintf vs memcpy22.3. strlen vs length vs size vs sizeof22.4. 字符串之間的轉換22.5 其他數據類型與字符串之間的轉換22.6 字符串分割 22. 字符串 22.1. 字符數組 vs 字符指針 …

Spring整合其他技術

文章目錄 Spring整合mybatis思路分析Mybatis程序核心對象分析整合Mybatis 代碼實現 Spring整合Junit修改成警告 Spring整合mybatis 思路分析 Mybatis程序核心對象分析 上面圖片是mybatis的代碼&#xff0c;上述有三個對象&#xff0c;分別是sqlSessionFactory&#xff0c;sqlS…

Linux:配置客戶端自定義autofs服務

Linux&#xff1a;配置客戶端自定義autofs服務 修改autofs的主策略文件 [rootserver200 data]# vim /etc/auto.master# 修改內容如下 /misc /etc/auto.misc # 掛載目錄的上級目錄 /mnt /etc/auto.timinglee --timeout3修改autofs的自定義策略文件 [rootserver200 data]…

數據庫SQL編寫規范-SQL書寫規范整理(SQL語句書寫規范全解-Word原件)

編寫本文檔的目的是保證在開發過程中產出高效、格式統一、易閱讀、易維護的SQL代碼。 1 編寫目 2 SQL書寫規范 3 SQL編寫原則 軟件全套精華資料包清單部分文件列表&#xff1a; 工作安排任務書&#xff0c;可行性分析報告&#xff0c;立項申請審批表&#xff0c;產品需求規格說…

鴻蒙布局Column/Row/Stack

鴻蒙布局Column/Row/Stack 簡介我們以Column為例進行講解1. Column({space: 10}) 這里的space: 10&#xff0c;表示Column里面每個元素之間的間距為102. width(100%)&#xff0c;height(100%) 表示寬高占比3. backgroundColor(0xffeeeeee) 設置背景顏色4. padding({top: 50}) 設…

【ARM 嵌入式 C 文件操作系列 20.4 -- 打印 uint64_t 類型的數值】

文章目錄 C代碼中 打印 uint64_t 類型的數值測試效果 C代碼中 打印 uint64_t 類型的數值 為了以16進制方式打印uint64_t類型的數值&#xff0c;可以使用printf函數&#xff0c;配合<inttypes.h>頭文件中定義的宏PRIX64或PRIx64。這些宏確保了無論在哪個平臺上&#xff0…

keepalived雙機熱備超詳細入門介紹

keepalived 一、keepalived入門介紹 1.keepalived簡介 2.keepalived服務的三個重要功能 2.1.管理LVS負載均衡軟件 2.2.實現對LVS集群節點健康檢查功能 2.3.作為系統網絡服務的高可用功能 3.keepalived高可用故障切換轉移原理 4.keepalived安裝及主配置文件介紹 …

如何用Rust獲取本機CPU、內存在Web網頁中顯示?

目錄 一、需求描述 二、具體操作步驟 三、知識點 1、systemstat 2、Actix 一、需求描述 需求&#xff1a; 1、需要使用Rust進行后端開發獲取本機CPU和內存信息&#xff1b; 2、使用WEB框架發布API&#xff1b; 3、然后使用HTML/CSS/JavaScript進行前端開發&#xff0…

MySQL表的增刪查改【基礎部分】

數據表的操作 新增 普通插入 insert into 表名 values(值,值...)注意&#xff1a; 此處的值要和表中的列相匹配 使用’‘單引號或者”“雙引號來表示字符串 mysql> insert into student values(123,zhangsan); Query OK, 1 row affected (0.02 sec)指定列插入 insert …

2024年3月 電子學會 青少年等級考試機器人理論真題五級

202403 青少年等級考試機器人理論真題五級 第 1 題 下圖程序運行后&#xff0c;串口監視器顯示的結果是&#xff1f;&#xff08; &#xff09; A&#xff1a;0 B&#xff1a;1 C&#xff1a;3 D&#xff1a;4 第 2 題 下列選項中&#xff0c;關于74HC595移位寄存器芯片的…

微信小程序開發【Coffee Shopping】(1)

1.環境準備 微信開發者工具&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 前端常用網站集合&#xff1a;http://www.wwp666.cn/ 微信小程序開發文檔&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework/quicksta…

數據結構之二叉樹詳解[1]

在前面我們介紹了堆和二叉樹的基本概念后&#xff0c;本篇文章將帶領大家深入學習鏈式二叉樹。 1.預備知識 2.二叉樹結點的創建 3.二叉樹的遍歷 3.1前序遍歷 3.2中序遍歷 3.3 后序遍歷 4.統計二叉樹的結點個數 5.二叉樹葉子結點的個數 6.二叉樹第k層的結點個數 7.總結 …

鴻蒙ArkUI開發:常用布局【相對布局】

相對布局&#xff08;RelativeContainer&#xff09; 相對布局可以讓子元素指定兄弟元素或父容器作為錨點&#xff0c;基于錨點做位置布局必須為RelativeContainer及其子元素設置ID&#xff0c;用于指定錨點信息。未設置ID的子元素不會顯示RelativeContainer ID為“__containe…

增程SUV價格即將崩盤?買車一定要再等等!

文 | AUTO芯球 作者 | 雷歌? 真是“離譜”啊&#xff0c;車圈真是逗比歡樂多&#xff0c; 我這兩天看一個博主連續40多小時開車直播&#xff0c;充電口、油箱蓋全部封死&#xff0c;全程視頻直播沒斷過&#xff0c; 就為了測試這兩天剛上市的星際元ET續航有多遠。 另一個…

Docker 創建網絡

問題&#xff1a; 1.需要將多個容器添加到同一個網絡. 2.docker-compose.yaml 如果不指定&#xff0c;默認會重新創建一個網卡. 創建網卡 docker network create -d bridge mynet ##-d 指定模式&#xff08;默認橋接&#xff09;查看自定義網絡信息 docker inspect mynet…

NSSCTF Web方向的例題和相關知識點(二)

[SWPUCTF 2021 新生賽]Do_you_know_http 解題&#xff1a; 點擊打開環境&#xff0c;是 提示說請使用wLLm瀏覽器訪問 我們可以更改瀏覽器信息&#xff0c;在burp重放器中發包后發現是302重定向&#xff0c;但是提示說success成功&#xff0c;說明 我們修改是成功的&#xff…