admin 管理员组文章数量: 887021
2024年2月20日发(作者:虚拟机linux改中文)
SpringBoot项目中EhCache缓存技术的实现
作者:王萍
来源:《电脑知识与技术》2021年第29期
摘要:从本质上看,EhCache是一个缓存管理器,不仅可以和Hibernate配合实现缓存,也可以和其他框架比如spring boot结合,作为一个缓存管理器,该文这里举一个例子,来论述SpringBoot项目中EhCache缓存技术的实现过程,以“spring boot + mybatis + EhCache”实现本地缓存为例,探讨了SpringBoot项目中EhCache缓存技术的实现。
关键词:SpringBoot项目;EhCache;缓存技术
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2021)29-0079-03
1概述
1.1 SpringBoot
SpringBoot是由Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,SpringBoot在蓬勃发展的快速应用开发领域(rapid application
development)成为领导者。
简而言之,SpringBoot是当前 web 开发主流,其简化了 Spring 的配置让开发者能够更容易上手Web项目的开发。由于Spring 的发展、微服务的发展使得SpringBoot越来越流行,已经成为JavaWeb开发的主流框架。
1.2 Spring Boot的缓存机制
SpringBoot高速缓存抽象不提供实际存储,且依赖于由org. 和⁃ Manager接口实现的抽象。 Spring Boot根据自动配置实现合适的CacheManager,只要缓存支持通过@EnableCaching 注释启用即可。
1.3 EhCache
EhCache是一个开源的基于标准的缓存,是一个纯Java 的在进程中的缓存,可提高性能,减轻数据库负载并简化可伸缩性。它是使用最广泛的基于Java 的高速缓存,功能全面,并且与其他流行的库和框架集成在一起。EhCache从进程内缓存扩展到混合进程内/进程外部署与TB级缓存。EhCache是一个快速的、轻量级的、易于使用的、进程内的缓存。它支持read-on⁃ly和 read/write 缓存,内存和磁盘缓存。是一个非常轻量级的缓存实现,并支持集群。
现在的EhCache已经更新到了3.9版本,版本3加入一些新的功能,包括:1)改进了API,可以利用Java泛型并简化缓存交互;2)与 API(JSR-107)完全兼容;3)Offheap存储功能,包括仅堆外高速缓存;4)Spring Caching 和Hibernate集成得益于支持。
1.4 Springboot整合EhCache的步骤
主要是:添加 pom 文件 maven 依賴——配置 ——开启缓存支持——在项目中使用。
2方法
下面这个例子是一个springboot工程项目,集成了mybatis来进行数据库的访问,只是一个简单的数据库表操作,在具体的方法上添加了相应的注解,从而实现了本地缓存。没有用到EhCache集群和分布式,只是将信息缓存到内存中,从而降低数据库之间的访问,提高数据的访问速度。
核心的代码主要如下:
1)SpringCacheApplication启动类
package e;
import Scan; import
Application;
import org. springframework. boot. autoconfigure. EnableAuto⁃ Configuration;
import BootAp⁃ plication;
import org. springframework. boot. autoconfigure. jdbc. Data⁃SourceAutoConfiguration;
import Caching;
import Dis⁃coveryClient;
import Config⁃ Server;
/**
*数据库集成Mybatis、EhCache框架采用 Mapper 访问数据库。
*/
@EnableDiscoveryClient
@SpringBootApplication
@EnableCaching
public class SpringCacheApplication {
public static void main(String[] args){
SpringApplication. run(SpringCacheApplication. class,
args);
n("MysqlMybatisMapperEhCache数据库微服务已启动.");
}
}
如果想用EhCache缓存,在启动类上一定要加上@Enable⁃ Caching注解,否则缓存会不起作用。
2)UserServiceImpl实现类
package ; import Util;
import ; import ;
import o; import
rvice; import Utils;
import ;
import ;
import Factory;
import onfig; import
vict; import
ut; import
ble; import e;
import org. springframework. transaction. annotation. Transac⁃tional;
import ;
@CacheConfig(cacheNames ="UserCache")
@Service
public class UserServiceImpl implements UserService {
private Logger logger = LoggerFactory. getLogger(this. get?Class());
private static final String CACHE_KEY ="'user'";
private static final String CACHE_NAME_B ="user- cache";
@Autowired
private UserDaouserDao;
@CachePut(value = CACHE_NAME_B, key =
CACHE_KEY)
@Override
public int insert(User user){
return (user);
}
@CacheEvict(value = CACHE_NAME_B, key ="'user_'+ #id")
@Override
public int deleteByPrimaryKey(String id){
Result result = new Result();
return ByPrimaryKey(id);
}
@CachePut(value = CACHE_NAME_B, key ="'user_'+#us⁃ ")
@Traditional
@Override
public User updateByPrimaryKey(User user){
if(ByPrimaryKey(user)>0){
user=ByPrimaryKey(());
return user;
}else{
return null;
}
}
@Cacheable(value = CACHE_NAME_B, key ="'user_'+
#id")
@Override
public User selectByPrimaryKey(String id){
return ByPrimaryKey(id);
}
@Cacheable
@Override
public List
args);
n("MysqlMybatisMapperEhCache数据库微服务已启动.");
}
}
如果想用EhCache缓存,在启动类上一定要加上@Enable⁃ Caching注解,否则缓存会不起作用。
2)UserServiceImpl实现类
package ; import Util;
import ; import ;
import o; import
rvice; import Utils;
import ;
import ;
import Factory;
import onfig; import
vict; import
ut; import
ble; import e;
import org. springframework. transaction. annotation. Transac?tional;
import ;
@CacheConfig(cacheNames ="UserCache")
@Service
public class UserServiceImpl implements UserService {
private Logger logger = LoggerFactory. getLogger(this. get⁃Class());
private static final String CACHE_KEY ="'user'";
private static final String CACHE_NAME_B ="user- cache";
@Autowired
private UserDaouserDao;
@CachePut(value = CACHE_NAME_B, key =
CACHE_KEY)
@Override
public int insert(User user){
return (user);
}
@CacheEvict(value = CACHE_NAME_B, key ="'user_'+ #id")
@Override
public int deleteByPrimaryKey(String id){
Result result = new Result();
return ByPrimaryKey(id);
}
@CachePut(value = CACHE_NAME_B, key ="'user_'+#us⁃ ")
@Traditional
@Override
public User updateByPrimaryKey(User user){
if(ByPrimaryKey(user)>0){
user=ByPrimaryKey(());
return user;
}else{
return null;
}
}
@Cacheable(value = CACHE_NAME_B, key ="'user_'+
#id")
@Override
public User selectByPrimaryKey(String id){
return ByPrimaryKey(id);
}
@Cacheable
@Override
public List
版权声明:本文标题:SpringBoot项目中EhCache缓存技术的实现 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1708361104h521400.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论