当前位置:网站首页>利用HashMap实现简单缓存
利用HashMap实现简单缓存
2022-07-05 05:18:00 【心寒丶】
最近有一个需求需要用到简单缓存技术,由于各种原因,无法使用redis,无法使用其他缓存框架技术,因此简单做了一个缓存实现,大致原理如下:
定义一个缓存初始化类(CacheInit),用来保存数据和存活时间,然后请求获取数据的时候判断map中是否存在值,如果存在且在存活时间之内,则直接返回,如果不存在或者存在且超过存活时间,则重新获取值,然后再放入map,更新map中的值及存活时间。代码如下:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @author :Hanjun
* @date 2022/7/4
*/
@RestController
@RequestMapping("/cacheTest")
public class CacheTestControl {
private static Map<String, Object> finalQYMap = new HashMap<>();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@RequestMapping(value = "/getToken")
public String test(){
// 全局缓冲中有效时,优先取缓冲的
if (finalQYMap.size() > 0 && finalQYMap.get("test") != null) {
CacheInit init = (CacheInit) finalQYMap.get("test");
Calendar applyTime = Calendar.getInstance();
applyTime.setTime(init.getApplyTime());
Calendar nowTime = Calendar.getInstance();
nowTime.setTime(new Date());
if(nowTime.compareTo(applyTime) < 0) {
System.out.println("缓存获取时间:"+dateFormat.format(new Date()));
return init.getAccessToken();
}
}
String token = "testToken123456";
CacheInit init = new CacheInit();
init.setAccessToken(token);
Date now = new Date();
Calendar applyTime = Calendar.getInstance();
applyTime.setTime(now);
//设置缓存10秒
applyTime.add(Calendar.SECOND, 10);
init.setApplyTime(applyTime.getTime());
System.out.println("非缓存获取token时间:"+dateFormat.format(new Date()));
finalQYMap.put("test", init);
return token;
}
}
package com.sinosoft.controller;
import java.util.Date;
/**
* @author :Hanjun
* @date 2022/7/4
*/
public class CacheInit {
private String accessToken;
/** 获取时间*/
private Date applyTime;
public String getAccessToken() {
return accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
public Date getApplyTime() {
return applyTime;
}
public void setApplyTime(Date applyTime) {
this.applyTime = applyTime;
}
}
实现效果如下:
边栏推荐
- [binary search] 34 Find the first and last positions of elements in a sorted array
- Cocos2dx Lua registers the touch event and detects whether the click coordinates are within the specified area
- Basic knowledge points
- 【ES实战】ES上的native realm安全方式使用
- room数据库的使用
- Yolov5 adds attention mechanism
- Basic knowledge points of dictionary
- Dotween usage records ----- appendinterval, appendcallback
- Cocos progress bar progresstimer
- Haut OJ 1218: maximum continuous sub segment sum
猜你喜欢
Double pointer Foundation
Django reports an error when connecting to the database. What is the reason
Ue4/ue5 illusory engine, material part (III), material optimization at different distances
Magnifying glass effect
TF-A中的工具介绍
[merge array] 88 merge two ordered arrays
对象的序列化
[turn]: OSGi specification in simple terms
[to be continued] [UE4 notes] L3 import resources and project migration
Reverse one-way linked list of interview questions
随机推荐
《动手学深度学习》学习笔记
Count sort
When will Wei Lai, who has been watched by public opinion, start to "build high-rise buildings" again?
[转]: OSGI规范 深入浅出
[binary search] 69 Square root of X
Haut OJ 1321: mode problem of choice sister
Three dimensional dice realize 3D cool rotation effect (with complete source code) (with animation code)
C language Essay 1
Programmers' experience of delivering takeout
BUUCTF MISC
Fragment addition failed error lookup
[binary search] 34 Find the first and last positions of elements in a sorted array
Cocos2dx screen adaptation
Listview is added and deleted at the index
[to be continued] [UE4 notes] L3 import resources and project migration
2022/7/1學習總結
LeetCode之單詞搜索(回溯法求解)
Transport connection management of TCP
Django reports an error when connecting to the database. What is the reason
To the distance we have been looking for -- film review of "flying house journey"