Java本地缓存解决方案其一(使用Google的CacheBuilder)

前不久,业务实现上需要用到本地缓存来解决一些数据量相对较小但是频繁访问的数据,通过查找各种资料,找到了一种可以实现的方案——采用的是Google的CacheBuilder。下面是代码实现过程:1.首先在maven中引入下面的包;
  1. <dependency>
  2. <groupId>com.google.guava</groupId>
  3. <artifactId>guava</artifactId>
  4. <version>19.0</version>
  5. </dependency>
2.下面这段是缓存代码,用到了匿名内部类的方式;package com.jd.common.util;import java.util.concurrent.TimeUnit;import com.google.common.cache.CacheBuilder;import com.google.common.cache.CacheLoader;import com.google.common.cache.LoadingCache;

public class AndyService
{    private final LoadingCache<String, String> cache;

public AndyService()    {        /**         * 5秒自动过期         */        cache = CacheBuilder.newBuilder().expireAfterWrite(5, TimeUnit.SECONDS).build(new CacheLoader<String, String>() {            public String load(String id) throws Exception            {                System.out.println("method inovke");                //这里执行查询数据库,等其他复杂的逻辑                return "User:" + id;            }        });    }

public String getAndyName(String id) throws Exception    {        return cache.get(id);    }}3.下面是测试用例class GuavaCacheTest{    public static void main(String[] args)throws Exception    {        AndyService us = new AndyService();        for(int i=0;i<20;i++)        {            System.out.println(us.getAndyName("1001"));            TimeUnit.SECONDS.sleep(1);        }    }}4.下面的是控制台中代码输入内容:

method inovke
User:1001
User:1001
User:1001

method inovke
User:1001
User:1001
User:1001

method inovke
User:1001
User:1001
User:1001

method inovke
User:1001
User:1001
User:1001

关于为什么使用本地缓存而不使用别的方式的原因,详见前辈的总结:http://www.cnblogs.com/fengli9998/p/7875027.html

原文地址:https://www.cnblogs.com/andychou/p/8342007.html

时间: 2024-10-08 04:30:34

Java本地缓存解决方案其一(使用Google的CacheBuilder)的相关文章

IE get请求拿本地缓存解决方案

// IE get请求拿本地缓存解决方案 // 下面是我自己封装的方法发送的请求,只需要看URL后缀就可以 var res = this.$http.get(`/getbhsbfhjasf?td=${Math.floor(Math.random() * (1000 + 1))}`) // 重点就是 URL后面的 <<|| ?td=${Math.floor(Math.random() * (1000 + 1))} || >> 原文地址:https://www.cnblogs.com/

java本地缓存和redis缓存

  本地缓存 本地缓存存储在内存当中,实现缓存如下 首先需要引入包 <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>2.10.1</version> </dependency> 缓存服务接口: package com.mobcb.platform.service.common; im

关于java中的本地缓存-总结概述

java中的本地缓存,工作后陆续用到,一直想写,一直无从下手,最近又涉及到这方面的问题了,梳理了一下.自己构造单例.guava.ehcache基本上涵盖了目前的大多数行为了.   为什么要有本地缓存? 在 系统中,有些数据,数据量小,但是访问十分频繁(例如国家标准行政区域数据),针对这种场景,需要将数据搞到应用的本地缓存中,以提升系统的访问效率,减 少无谓的数据库访问(数据库访问占用数据库连接,同时网络消耗比较大),但是有一点需要注意,就是缓存的占用空间以及缓存的失效策略. 为什么是本地缓存,而

java应用中的本地缓存

java中的本地缓存,工作后陆续用到,一直想写,一直无从下手,最近又涉及到这方面的问题了,梳理了一下.自己构造单例.guava.ehcache基本上涵盖了目前的大多数行为了. 为什么要有本地缓存?在 系统中,有些数据,数据量小,但是访问十分频繁(例如国家标准行政区域数据),针对这种场景,需要将数据搞到应用的本地缓存中,以提升系统的访问效率,减 少无谓的数据库访问(数据库访问占用数据库连接,同时网络消耗比较大),但是有一点需要注意,就是缓存的占用空间以及缓存的失效策略. 所谓的本地混存是相对于网络

Java内存缓存-通过Google Guava创建缓存

谷歌Guava缓存 Guava介绍 Guava是Google guava中的一个内存缓存模块,用于将数据缓存到JVM内存中.实际项目开发中经常将一些公共或者常用的数据缓存起来方便快速访问. Guava Cache是单个应用运行时的本地缓存.它不把数据存放到文件或外部服务器.如果不符合需求,可以选择Memcached.Redis等工具. 小案例 pom.xml添加guava依赖 <?xml version="1.0" encoding="UTF-8"?>

java应用本地缓存

在java应用中,对于访问频率比较高,又不怎么变化的数据,常用的解决方案是把这些数据加入缓存.相比DB,缓存的读取效率快好不少.java应用缓存一般分两种,一是进程内缓存,就是使用java应用虚拟机内存的缓存:另一个是进程外缓存,现在我们常用的各种分布式缓存.相比较而言,进程内缓存比进程外缓存快很多,而且编码也简单:但是,进程内缓存的存储量有限,使用的是java应用虚拟机的内存,而且每个应用都要存储一份,有一定的资源浪费.进程外缓存相比进程内缓存,会慢些,但是,存储空间可以横向扩展,不受限制.

Java学习之ConcurrentHashMap实现一个本地缓存

ConcurrentHashMap融合了Hashtable和HashMap二者的优势. Hashtable是做了线程同步,HashMap未考虑同步.所以HashMap在单线程下效率较高,Hashtable在多线程下同步操作能保证程序的正确性.  但是Hashtable每次执行同步操作都需要锁住整个结构. ConcurrentHashMap的出现就是为了解决Hashtable同步lock整个数据结构的问题.ConcurrentHashMap锁的方式是细颗粒度. ConcurrentHashMap将

Java内存缓存工具实现 - Guava LoadingCache

一.Guava介绍 Guava是Google guava中的一个内存缓存模块,用于将数据缓存到JVM内存中.实际项目开发中经常将一些公共或者常用的数据缓存起来方便快速访问. Guava Cache是单个应用运行时的本地缓存.它不把数据存放到文件或外部服务器.如果不符合需求,可以选择Memcached.Redis等工具. 二.代码示例 1. POM引入 <dependency> <groupId>com.google.guava</groupId> <artifac

安卓网络请求图片到图片的三级缓存技术(内存缓存,本地缓存,网络缓存)

安卓网络请求图片,对于我们来说并不陌生,因为每个应用都有可能会用到这一技术.通常情况下,我们第一次都是从网络上请求图片资源,然后将 图片资源保存到内存和本地,下一次动态显示图片的时候就不需要再从网络上请求图片资源了,直接从本地或者内存中获取就可以了.这就涉及到图片 的三级缓存技术,分别是内存缓存,本地缓存,网络缓存. 缓存的流程图: 首先我们定义一个类叫ClassLoader: package com.jsako.showprodinfodemo; import java.io.FileOutp