下面是关于“springboot整合单机缓存ehcache的实现”的完整攻略。
Ehcache是一个开源的、基于Java的、容易使用的缓存管理系统。它可以用于加速应用程序的性能和管理大量数据。
Ehcache提供了多种缓存的策略,包括最近最少使用(LRU)、最少使用(LFU)、FIFO等。Ehcache旨在为Java应用程序提供高速、灵活、可伸缩的缓存,从而帮助开发者构建快速、可靠的应用程序。
可以直接在pom.xml文件中添加依赖:
<!-- ehcache 依赖-->
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.9.0</version>
</dependency>
在SpringBoot的启动类上,使用@EnableCaching注解开启缓存支持,同时在其内部的配置类里面添加相关配置。
@SpringBootApplication
@EnableCaching
public class DemoApplication {
@Bean
public EhCacheManagerFactoryBean ehCacheManagerFactoryBean() {
EhCacheManagerFactoryBean ehCacheManagerFactoryBean =
new EhCacheManagerFactoryBean();
ehCacheManagerFactoryBean.setConfigLocation(new ClassPathResource("ehcache.xml"));
ehCacheManagerFactoryBean.setShared(true);
return ehCacheManagerFactoryBean;
}
//启用 Java源码 控制Ehcache缓存
@Bean
public KeyGenerator customKeyGenerator()
{
return new CustomKeyGenerator();
}
}
其中,EhCacheManagerFactoryBean的setConfigLocation()方法是用来指定Ehcache的配置文件所在位置的,可以在该文件中对缓存进行详细的配置。
在resources目录下创建ehcache.xml文件,我们可以在这里进行缓存的详细配置。例如:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<!--缓存名称 是区分不同缓存的-->
<cache name="cache_demo"
maxElementsInMemory="20"
eternal="false"
timeToIdleSeconds="300"
timeToLiveSeconds="3600"
overflowToDisk="false">
</cache>
</ehcache>
这里配置了一个名为cache_demo的缓存,其中maxElementsInMemory表示最多缓存20个元素,timeToIdleSeconds表示在没有使用的情况下,该缓存可以保持300秒,timeToLiveSeconds表示该缓存的生存周期为3600秒,overflowToDisk表示当内存缓存已满时,是否允许缓存溢出到磁盘。
在后面使用的时候,只需要在方法上加上@Cacheable注解即可:
@Service
public class UserServiceImpl implements UserService {
@Resource
private UserMapper userMapper;
@Override
@Cacheable(value = "cache_demo", keyGenerator = "customKeyGenerator")
public User getUserById(Integer id) {
System.out.println("query from db");
return userMapper.selectByPrimaryKey(id);
}
}
这个例子中,使用了@Cacheable注解,用来启用缓存,其中value表示缓存的名称为cache_demo,keyGenerator表示缓存的key值生成策略为自定义的CustomKeyGenerator类,代码如下:
public class CustomKeyGenerator implements KeyGenerator {
@Override
public Object generate(Object o, Method method, Object... objects) {
StringBuilder sb = new StringBuilder();
sb.append(o.getClass().getName());
sb.append(method.getName());
for (Object obj : objects) {
sb.append(obj.toString());
}
return sb.toString();
}
}
这里我们使用了自定义的key值生成策略,按照方法所在类、方法名称和参数值对生成缓存的key值。这样就可以根据不同的参数生成不同的缓存,从而提高了缓存的效率。
附上第二个示例:
@Cacheable(value = "cache_demo", key = "#userId", condition = "#userId lt 10 and #userName.length() lt 20")
public User getUserByIdAndName(Integer userId, String userName) {
System.out.println("query from db");
return userMapper.selectByPrimaryKey(userId);
}
这个例子中,我们使用了@Cacheable注解的key属性和condition属性。其中,key表示缓存的key值为userId,condition表示只有当userId小于10且userName的长度小于20的时候才启用缓存。这样就能够根据具体的业务需求灵活地使用Ehcache缓存了。
本文链接:http://task.lmcjl.com/news/17241.html