浅谈java缓存机制自己编写cacheutil工具类

缓存的意义在于高效的读取高命中率的数据库信息避免高频的访问数据库,便捷的读取常用的、全局的配置信息。

什么是缓存

缓存(英语:cache,/kæʃ/ kash ),这里讨论的不是计算机组成中的缓存,而是编程实现中的一种机制;是指存放在服务器内存中的数据,特点是可以高速存取

缓存机制的使用场景

  • 存取全局的数据
  • 存取数据库中高频访问的数据

使用java实现一个缓存工具类

既然缓存的特点就是高速存取,按键值存取,那么在java编程中实现缓存机制首选的数据结构就是map,不得不说map数据结构真的很神奇,有关于map的性能效率问题参见我的另外一篇博客hashmap性能效率分析
但是需要注意的是map不是线程安全的数据结构,所以使用的时候可以需要做线程安全控制,或者直接使用java高并发包中提供的ConcurrentHashMap;

因为是本机应用内实现的缓存机制,为了不影响服务的性能,建议存取一些全局配置,或者少量数据数据,类似小说章节缓存等大数据量缓存不适用,另外此实现没有过期概念,适合存储长久有效的数据

缓存工具类

因为是工具类,并且为了全局获取便利,使用单例模式实现,持有一个map对象

    private CacheUtil()
    {
    }

    private  ConcurrentHashMap hm = new ConcurrentHashMap<>();

    private static class CacheUtilHandle 
    { 
        static CacheUtil instance = new CacheUtil(); 
    }

	public static CacheUtil getInstance() {
		return CacheUtilHandle.instance;
	}

为缓存工具增加四个方法,方便存取

public void add(Object pk, Object obj)
    {
        hm.put(pk, obj);
    }

    public void update(Object pk, Object obj)
    {
        hm.put(pk, obj);
    }

    public  void delete(Object pk)
    {
        hm.remove(pk);
    }

    public  Object query(Object pk)
    {
        return hm.get(pk);
    }

一个简洁缓存工具就编写完成了,

使用:

如果是javaWeb项目可以在项目启动类中初始化缓存,例如在启动类中从数据库加载初始化一些系统全局配置,避免频繁读取数据库;

高效的缓存数据库

非关系型数据库 :redis,缓存数据库memcache等,配置成单独的缓存服务器,可以提供高性能的缓存服务,例如小说站章节内容的存取,并且可以设置过期时间;

你可能感兴趣的:(java,java学习笔记)