java原生 簡單快取工具類
阿新 • • 發佈:2022-01-02
作者:wangbingchen
工具類編寫環境,作者為小公司開發,一個小專案,功能中使用到簡訊驗證登入功能,使用快取,可以有很多,第一個想到的是redis,但是如果整個專案只是為了這一個小小的簡訊驗證來使用redis,感覺有點大材小用,再其次是使用資料庫,但是使用資料庫效能肯定沒有使用記憶體來得好。於是就有了這個小巧的快取,直接複製到專案中就可以使用,無需新增第三方依賴。
如果好用記得好評,謝謝_
package com.utils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author wangbingchen * @Description * @create 2021-11-23 14:12 * 簡易的快取工具,用於做簡訊驗證碼校驗 * 此類為常駐記憶體工具 */ public class CacheUtil { public static void main(String[] args) throws InterruptedException { CacheUtil.set("name","zhangsan",2000); CacheUtil.set("name","lisi",2000); CacheUtil.set("name","ww",500); CacheUtil.set("name1","qweqwe",4000); Thread.sleep(1000); String name = CacheUtil.get("name"); String name1 = CacheUtil.get("name1"); System.out.println(name); System.out.println(name1); Thread.sleep(1000); System.out.println(CacheUtil.get("name")); System.out.println(CacheUtil.get("name1")); Thread.sleep(1000); System.out.println(CacheUtil.get("name")); System.out.println(CacheUtil.get("name1")); Thread.sleep(1000); System.out.println(CacheUtil.get("name")); System.out.println(CacheUtil.get("name1")); Thread.sleep(1000); System.out.println(CacheUtil.get("name")); System.out.println(CacheUtil.get("name1")); } private CacheUtil(){} private static final Map<String, CacheUtilBean> CACHE_MAP = new HashMap<String, CacheUtilBean>(); public static void set(String key,String value,long exprTime){ //將傳入的毫秒數 轉換為 將來的時間戳 CACHE_MAP.put(key,new CacheUtilBean(value,System.currentTimeMillis()+exprTime)); } private static final long DEFAULT_EXPR_TIME = 24*60*60*1000L; public static void set(String key,String value){ set(key,value, DEFAULT_EXPR_TIME); } public static String get(String key){ //獲取之前先刪除時間點之前的 removeExp(); CacheUtilBean cacheUtilBean = CACHE_MAP.get(key); if(cacheUtilBean==null){ return ""; } return cacheUtilBean.getValue(); } private static void removeExp() { List<String> removeKey = new ArrayList<>(); for (Map.Entry<String, CacheUtilBean> entry : CACHE_MAP.entrySet()) { Long exprTime = entry.getValue().getExprTime(); if(System.currentTimeMillis()>exprTime){ removeKey.add(entry.getKey()); } } for (String s : removeKey) { CACHE_MAP.remove(s); } } static class CacheUtilBean { //存的值 private String value; //過期時間戳 set的時候計算好 private Long exprTime; public CacheUtilBean(String value, Long exprTime) { this.value = value; this.exprTime = exprTime; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public Long getExprTime() { return exprTime; } public void setExprTime(Long exprTime) { this.exprTime = exprTime; } } }