当前位置:网站首页>Using HashMap to realize simple cache

Using HashMap to realize simple cache

2022-07-05 05:25:00 Cold heart

         Recently, there is a need to use simple caching technology , For various reasons , Can't use redis, Other caching framework technologies cannot be used , Therefore, a simple cache implementation is made , The general principle is as follows :

Define a cache initialization class (CacheInit), Used to save data and survival time , Then judge when requesting data map Whether there is a value in , If it exists and is within its lifetime , Then return directly , If it does not exist or exists and exceeds the survival time , Then get the value again , And then put in map, to update map Value in and survival time . The code is as follows :


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(){
        //  When valid in the global buffer , Take the buffered first 
        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(" Cache fetch time :"+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);
        // Set the cache 10 second 
        applyTime.add(Calendar.SECOND, 10);
        init.setApplyTime(applyTime.getTime());
        System.out.println(" Non cached fetch token Time :"+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;
    /**  Acquisition time */
    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;
    }
}

The effect is as follows :

原网站

版权声明
本文为[Cold heart]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/186/202207050518250761.html