zoukankan      html  css  js  c++  java
  • java原生 简单缓存工具类

    作者: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;
            }
        }
    
    }
    
    
    
    
  • 相关阅读:
    团队冲刺2.6
    团队冲刺2.5
    团队冲刺2.4
    团队冲刺2.3
    个人作业二
    个人作业二
    个人作业二
    课程总结
    每日博客
    每日博客
  • 原文地址:https://www.cnblogs.com/wangbingchen/p/15757832.html
Copyright © 2011-2022 走看看