Springboot整合GuavaCache缓存过程解析

网友投稿 705 2022-12-14


Springboot整合GuavaCache缓存过程解析

这篇文章主要介绍了springboot整合GuavaCache缓存过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Guava Cache是一种本地缓存机制,之所以叫本地缓存,是因为它不会把缓存数据放到外部文件或者其他服务器上,而是存放到了应用内存中。

Guava Cache的优点是:简单、强大、轻量级。

GuavaCache适用场景:

1.某些接口或者键值会被查询多次以上;

2.愿意使用或牺牲一些内存空间来提升访问或者计算速度;

3.缓存内容或者结果值较小,不会超过内存总容量;

GuavaCache中基于注解的声明式缓存操作

@Cacheable 触发缓存逻辑

Spring 在执行 @Cacheable 标注的方法前先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,执行该方法并将方法返回值放进缓存。

参数: value缓存名、 key缓存键值、 condition满足缓存条件、unless否决缓存条件

@CacheEvict

触发缓存逐出逻辑

方法执行成功后会从缓存中移除相应数据。

参数: value缓存名、 key缓存键值、 condition满足缓存条件、 unless否决缓存条件、 allEntries是否移除所有数据 (设置为true时会移除所有缓存)

@CachePut

和 @Cacheable 类似,但会把方法的返回值放入缓存中, 主要用于数据新增和修改方法。

pom.xml配置文件:

org.springframework.boot

spring-boot-starter-cache

1.5.9.RELEASE

com.google.guava

guava

19.0

GuavaCacheConfig:

/**

* Copyright (c) 2020, All Rights Reserved.

*

*/

package com.demo.server.config;

import java.util.concurrent.TimeUnit;

import org.springframework.cache.CacheManager;

import org.springframework.cache.annotation.EnableCaching;

import org.springframework.cache.guava.GuavaCacheManager;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import com.google.common.cache.CacheBuilder;

@Configuration

@EnableCaching

public class GuavaCacheConfig {

@Bean

public CacheManager cacheManager() {

GuavaCacheManager cacheManager = new GuavaCacheManager();

cacheManager.setCacheBuilder(

CacheBuilder.newBuilder().

expireAfterWrite(10, TimeUnit.SECONDS). //存活时间10秒

maximumSize(1000)); //最大线程数

return cacheManager;

}

}

CacheController:

/**

* Copyright (c) 2020, All Rights Reserved.

*

*/

package com.demo.server.guava;

import org.springframework.beans.factory.annotation.Autowired;

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

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

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

@RestController

@RequestMapping(value = "/guava")

public class CacheController {

@Autowired

private CacheService cacheService;

/**

* 查询方法

*/

@RequestMapping(value = "/get", method = RequestMethod.GET)

public String getByCache() {

Long startTime = System.currentTimeMillis();

long timestamp = this.cacheService.getByCache();

Long endTime = System.currentTimeMillis();

System.out.println("耗时: " + (endTime - startTime));

return timestamp+"";

}

/**

* 保存方法

*/

@RequestMapping(value = "/save", method = RequestMethod.POST)

public void save() {

this.cacheService.save();

}

/**

* 删除方法

*/

@RequestMapping(value = "delete", method = RequestMethod.DELETE)

public void delete() {

this.cacheService.delete();

}

}

CacheService:

/**

* Copyright (c) 2020, All Rights Reserved.

*

*/

package com.demo.server.guava;

import java.sql.Timestamp;

import org.springframework.cache.annotation.CacheEvict;

import org.springframework.cache.annotation.CachePut;

import org.springframework.cache.annotation.Cacheable;

import org.springframework.stereotype.Service;

@Service

public class CacheService {

@CachePut(value = "guavacache")

public long save() {

long timestamp = new Timestamp(System.currentTimeMillis()).getTime();

System.out.println("进行缓存:" + timestamp);

return timestamp;

}

@CacheEvict(value = "guavacache")

public void delete() {

System.out.println("删除缓存");

}

@Cacheable(value = "guavacache")

public long getByCache() {

try {

Thread.sleep(3 * 1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

return new Timestamp(System.currentTimeMillis()).getTime();

}

}

Application:

package com.demo;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.boot.Banner;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

public class Application {

private static final Logger LOG = LoggerFactory.getLogger(Application.class);

public static void main(String[] args) {

SpringApplication app = new SpringApplication(Application.class);

app.setBannerMode(Banner.Mode.OFF);

app.setWebEnvironment(true);

app.run(args);

LOG.info("**************** Startup Success ****************");

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java Arrays.sort和Collections.sort排序实现原理解析
下一篇:Java线程Timer定时器用法详细总结
相关文章

 发表评论

暂时没有评论,来抢沙发吧~