基于Map多种方式实现简单的缓存处理

摘要:
通过HashMap进行缓存privatestaticMapcacheMap;publicstaticObjectgetCache(Stringkey,ObjectdefaultValue){Objectobj=getCacheMap().get(key);//Objectobj=getSession().getAttribute(key);returnobj==nul
通过HashMap进行缓存
private static Map<String, Object>cacheMap;
    
    public staticObject getCache(String key, Object defaultValue) {
        Object obj =getCacheMap().get(key);
        //Object obj = getSession().getAttribute(key);
        return obj==null?defaultValue:obj;
    }
 
    public static voidputCache(String key, Object value) {
        getCacheMap().put(key, value);
        //getSession().setAttribute(key, value);
}
 
    public static voidremoveCache(String key) {
        getCacheMap().remove(key);
        //getSession().removeAttribute(key);
}
    
    
    public static Map<String, Object>getCacheMap() {
        if (cacheMap==null){
            cacheMap = new HashMap<String, Object>();
        }
        returncacheMap;
    }

通过LinkedHashMap实现

/**
 * 使用的是LinkedHashMap实现
 */
public class LRU<K, V> extends LinkedHashMap<K, V>{

    private static final long serialVersionUID = 1L;

    //缓存大小
    private intcachaSize;

    public LRU(intcachaSize) {
        super(10, 0.75f, true);

        this.cachaSize =cachaSize;

    }

    /*** 缓存是否已满
     */@Override
    protected boolean removeEldestEntry(Map.Entry<K, V>eldest) {
        boolean r = size() >cachaSize;
        if(r) {
            System.out.println("清除缓存key:" +eldest.getKey());
        }
        returnr;

    }
}


ConcurrentHashMap的本地缓存实现
:与Guava cache相比,ConcurrentHashMap需要自己显式的删除缓存
importjava.util.concurrent.ConcurrentHashMap;

public classConcurrentHashMapTest {

    private static ConcurrentHashMap<String, String> cacheMap = new ConcurrentHashMap<>();

    /*** 获取缓存的对象
     *
     * @paramaccount
     * @return
     */
    public staticString getCache(String account) {

        account =getCacheKey(account);
        //如果缓冲中有该账号,则返回value
        if(cacheMap.containsKey(account)) {
            returncacheMap.get(account);
        }
        //如果缓存中没有该账号,把该帐号对象缓存到concurrentHashMap中
initCache(account);
        returncacheMap.get(account);
    }

    /*** 初始化缓存
     *
     * @paramaccount
     */
    private static voidinitCache(String account) {
        //一般是进行数据库查询,将查询的结果进行缓存
        cacheMap.put(account, "18013093863");
    }

    /*** 拼接一个缓存key
     *
     * @paramaccount
     * @return
     */
    private staticString getCacheKey(String account) {
        return Thread.currentThread().getId() + "-" +account;
    }

    /*** 移除缓存信息
     *
     * @paramaccount
     */
    public static voidremoveCache(String account) {
        cacheMap.remove(getCacheKey(account));
    }

}

免责声明:文章转载自《基于Map多种方式实现简单的缓存处理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇K8S从入门到放弃系列-(8)kube-apiserver 高可用配置如何修改 MySQL 的密码认证方式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

lua 分割字符串

-- 参数:待分割的字符串,分割字符   -- 返回:子串表.(含有空串)   function split(str, split_char)           local sub_str_tab = {}     while true do                   local pos = string.find(str, split_cha...

WPF开发进阶

前一篇 简单的介绍了Fody/PropertyChanged的使用方法, 这一篇,我们详细介绍它的一些比较重要的特性和规则 1. Attributes 通过在类或属性上标记这些特性,可以在编译代码时,注入特定的功能 ImplementPropertyChangedAttribute 为类标记此特性,可以实现INotifyPropertyChanged接口...

[转]Android 操作SQLite基本用法

在Android开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面。本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的。一.SQLite的介绍1.SQLite简介SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入  式的,而且目前已经在很多嵌入...

Jmeter之Bean shell使用(一)

一、什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k。...

Kafka — 高吞吐量的分布式发布订阅消息系统【转】

1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic、发送消息、消费消息?3.如何书写Kafka程序?4.数据传输的事务定义有哪三种?5.Kafka判断一个节点是否活着有哪两个条件?6.producer是否直接将数据发送到broker的leader(主节点)?7.Kafa consumer是否可以消费指定分区消息?8.Kafka消息是采...

C# 文件操作 全收录 追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件....

本文收集了目前最为常用的C#经典操作文件的方法,具体内容如下:C#追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件、指定文件夹下 面的所有内容copy到目标文件夹下面、指定文件夹下面的所有内容Detele、读取文本文件、获取文件列表、读取日志文件、写入日志文件、创建HTML 文件、CreateDirectory方法的使用C#追加文件Stream...