java相关:springboot使用GuavaCache做简单缓存处理的方法

发布于 2020-3-29|

复制链接

摘记: 问题背景

实际项目碰到一个上游服务商接口有10秒的查询限制(同个账号)。项目中有一个需求是要实时统计一些数据,一个应用下可能有多个相同的账号。由于服务商接口的限制,当批量查询时,可能出现同一个账号第一次查询有数据 ..

问题背景实际项目碰到一个上游服务商接口有10秒的查询限制(同个账号)。项目中有一个需求是要实时统计一些数据,一个应用下可能有多个相同的账号。由于服务商接口的限制,当批量查询时,可能出现同一个账号第一次查询有数据,但第二次查询无数据的情况。解决方案

基于以上问题,提出用缓存的过期时间来解决。这时,可用Redis和Guava Cache来解决:当批量查询时,同一个账号第一次查询有数据则缓存并设置过期时间10s, 后续查询时直接从缓存中取,没有再从服务商查询。最终采用Guava Cache来解决,原因是:

应用是部署单台的,不会有分布式的问题

Redis虽然可以实现,但会有通讯时间消耗

Guava Cache使用本地缓存,支持并发

使用GuavaCache可以快速建立缓存 1.需要在启动类上注解@EnableCaching

2.配置CacheManager

3.控制器上注解使用@Cacheablepom.xml

```xml

org.springframework.boot

spring-boot-starter-parent

1.5.9.RELEASE

UTF-8

UTF-8

1.8

org.springframework.boot

spring-boot-starter-web

org.springframework

spring-context-support

4.3.9.RELEASE

com.google.guava

guava

18.0

org.apache.maven.plugins

maven-compiler-plugin

1.8

1.8

UTF-8

```

CacheConfig.java 配置类

```java

package application.config;

import com.google.common.cache.CacheBuilder;

import org.springframework.cache.CacheManager;

import org.springframework.cache.guava.GuavaCache;

import org.springframework.cache.support.SimpleCacheManager;

import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;

import java.util.List;

import java.util.concurrent.TimeUnit;

@Configuration

public class CacheConfig {

public CacheManager cacheManager(){

GuavaCache guavaCache = new GuavaCache("GuavaCacheAll", CacheBuilder.newBuilder()

.recordStats()

.expireAfterWrite(10000, TimeUnit.SECONDS)

.build());

List list = new ArrayList();

list.add(guavaCache);

SimpleCacheManager simpleCacheManager = new SimpleCacheManager();

simpleCacheManager.setCaches(list);

return simpleCacheManager;

}

}

```

TestController.java 控制器测试类

```java

package application.controller;

import org.springframework.cache.annotation.Cacheable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class TestController {

@RequestMapping("/test")

//key是使用spEl取得参数,根据参数name作为缓存的key,value是使用的缓存list中的那个,具体看配置类

@Cacheable(value = "GuavaCacheAll",key = "#name")

public String tt(String name){

System.out.println("in tt");

return "name:"+name;

}

}

```

Application.java springboot启动类

```java

package application;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cache.annotation.EnableCaching;

@SpringBootApplication

@EnableCaching

public class Application {

public static void main(String[] args) {

SpringApplication.run(Application.class,args);

}

}

```

java+cache使用方法_java相关:springboot使用GuavaCache做简单缓存处理的方法相关推荐

  1. java方法设置切点_java相关:Spring AOP中定义切点的实现方法示例

    java相关:Spring AOP中定义切点的实现方法示例 发布于 2020-6-6| 复制链接 摘记: 本文实例讲述了Spring AOP中定义切点的实现方法.分享给大家供大家参考,具体如下:一 配 ...

  2. latch.await java有什么作用_java相关:CountDownLatch源码解析之await()

    java相关:CountDownLatch源码解析之await() 发布于 2020-6-18| 复制链接 摘记: CountDownLatch 源码解析-- await(),具体内容如下上一篇文章说 ...

  3. fileitem方法_java相关:浅谈FileItem类的常用方法

    java相关:浅谈FileItem类的常用方法 发布于 2020-5-2| 复制链接 下面小妖就为大家带来一篇浅谈FileItem类的常用方法.小妖觉得挺不错的,现在就分享给大家,也给大家做个参考.一 ...

  4. java indexof 子字符串_Java中字符串中子串的查找共有四种方法(indexof())

    Java中字符串中子串的查找共有四种方法(indexof()) Java中字符串中子串的查找共有四种方法,如下: 1.int indexOf(String str) :返回第一次出现的指定子字符串在此 ...

  5. java new thread参数_java开启新线程并传参的两种方法

    一.继承Thread类 步骤: 1):定义一个类A继承于Java.lang.Thread类. 2):在A类中覆盖Thread类中的run方法. 3):我们在run方法中编写需要执行的操作:run方法里 ...

  6. java渐变色字体生成器_java阴影文字效果怎么做?渐变的怎么做?

    随着时代的不断发展,新兴技术的使用也促使人们不断地在学习进步.今天主要为大家介绍一下,java的阴影和渐变的文字效果怎么做. 首先为大家介绍的是阴影效果文字的做法.第一步:使用Graphics类的se ...

  7. java+cache使用方法_java相关:Spring boot redis cache的key的使用方法

    java相关:Spring boot redis cache的key的使用方法 发布于 2020-8-16| 复制链接 摘记: 在数据库查询中我们往往会使用增加缓存来提高程序的性能,@Cacheabl ...

  8. java定时调度main方法_java相关:Spring中实现定时调度的几种方法

    java相关:Spring中实现定时调度的几种方法 发布于 2020-11-28| 复制链接 本篇文章主要介绍了Spring中实现定时调度示例,可以在无人值守的时候系统可以在某一时刻执行某些特定的功能 ...

  9. java -jar vm参数_java相关:运行jar程序时添加vm参数的方法

    java相关:运行jar程序时添加vm参数的方法 发布于 2020-3-15| 复制链接 下面小妖就为大家带来一篇运行jar程序时添加vm参数的方法.小妖觉得挺不错的,现在就分享给大家,也给大家做个参 ...

最新文章

  1. DGL RDKit|基于GCN与基于3D描述符的分子溶解度预测模型对比
  2. yii框架相关知识(转)
  3. uniaccess进程无法结束 拒绝访问_嵌入式Linux编程——程序员小白不懂的进程、信号量、并发、互斥...
  4. mac屏幕截图_如何在Mac上拍摄屏幕截图
  5. android 恢复app 到前台,android手机把app disable了,怎么恢复
  6. 点工转自动化速成指南
  7. Delphi调用Android的.so文件(转)
  8. 华为Y9s海外官网上架:升降式全面屏+侧面指纹识别
  9. Css中实现一个盒子固定宽度,另一个盒子宽度自适应的方法
  10. [原创]jQuery Validation范例
  11. 【Spring第七篇】Java配置类:JavaConfig
  12. PHP 实现简单购物车功能(2)
  13. 金山词霸发音功能需要Flash player
  14. Hadoop The Definitive Guide:Hadoop权威指南-PART 1
  15. Matlab——线性规划模型
  16. ZBrush中保存历史记录太多该如何解决
  17. python中的dot是什么意思_Python 的NumPy 库中dot()函数详解
  18. c语言用分支结构判断最大字符,第3章C语言 分支结构PPT课件.ppt
  19. C/C++之钢条切割
  20. postgresql之List

热门文章

  1. c 语言五子棋游戏代码,C语言案例:控制台版本的五子棋游戏【代码】
  2. comparator比较器用法_汽车三元催化器堵塞咋办?不拆不换,用这招清理干净、动力猛如虎...
  3. 语言中的petchar运用_还在担心你家孩子发音、语言问题?12个表现、3个预防是重点...
  4. 软件工程质量管理体系要求_软件质量管理| 软件工程
  5. 基于 MyBatis 手撸一个分表插件
  6. Visual Studio 2012资源管理器里单击打开改为双击打开文件
  7. innerHTML、innerText和outerHTML、outerText的区别
  8. JQuery Datatables单元格内显示数据太长,截取部分显示功能
  9. C#中利用Expression表达式树进行多个Lambda表达式合并
  10. matlab disteclud,机器学习实战ByMatlab(3)K-means算法