SpringBoot2.3.4整合Ehcache3.8.1

概述

Ehcache是​​一个开源的进程内缓存框架,可以提高系统性能,减轻数据库负载并简化可伸缩性。广泛用于基于Java的缓存开发,拥有健壮,可靠,功能齐全和便于与其他流行的库和框架集成等优点。详见Ehcache官网
Ehcache2和Ehcache3之间的差异比较大,本文主要介绍SpringBoot2.3整合Ehcache3.8,Ehcache有编码方式和xml配置方式引入项目,本文使用xml配置方式

引入相关依赖

Ehcache核心的依赖如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>org.ehcache</groupId>
    <artifactId>ehcache</artifactId>
</dependency>

XML配置文件

<!--缓存模板-->
<cache-template name="defaultCache">
    <key-type>java.lang.String</key-type>
    <value-type>java.lang.String</value-type><!--默认Object-->
    <resources>
        <!--堆内20个条目(最多2000)-->
        <heap unit="entries">20</heap>
        <!--驱逐之前堆外内存10MB(最大500MB)-->
        <offheap unit="MB">10</offheap>
    </resources>
</cache-template>
<cache alias="userCache" uses-template="defaultCache">
    <!--过期时间10分钟-->
    <expiry>
        <ttl unit="minutes">10</ttl>
    </expiry>
</cache>

根据业务需要可以添加多个缓存,文件中的userCache是缓存名,下面的代码中会使用到

配置文件

该类主要是加载配置的缓存文件,创建CacheManager实例

@Configuration
public class EhcacheConfig {
    @Bean(name = "ehcacheManager")
    public CacheManager getEhcacheManager() {
        URL url = getClass().getResource("/ehcacheConfig.xml");
        org.ehcache.config.Configuration configuration = new XmlConfiguration(url);
        CacheManager cacheManager = CacheManagerBuilder.newCacheManager(configuration);
        cacheManager.init();
        return cacheManager;
    }
}

业务层核心代码

@Resource(name = "ehcacheManager")
private CacheManager cacheManager;
@Override
public void putCache(String cacheName, String key, String value) {
    Cache<String, String> cache = cacheManager.getCache(cacheName, String.class, String.class);
    cache.put(key, value);
}
@Override
public String getCache(String cacheName, String key) {
    Cache<String, String> cache = cacheManager.getCache(cacheName, String.class, String.class);
    String cacheValue = cache.get(key);
    return cacheValue;
}

控制层核心代码

@GetMapping("getUserByLoginName/{loginName}")
@ApiOperation(value = "根据登录名查询用户信息")
public AjaxResult getUserByLoginName(@PathVariable String loginName) {
    String cacheValue = cacheService.getCache("userCache", loginName);
    if (null != cacheValue && !"".equals(cacheValue)) {
        logger.info("缓存中有查询的数据", cacheValue);
        return AjaxResult.ok().data("loginName", cacheValue);
    } else {
        QueryWrapper<SysUser> wrapper = new QueryWrapper<SysUser>();
        wrapper.eq("login_name", loginName);
        SysUser user = userService.getOne(wrapper);
        logger.info("缓存中没有数据,从数据库查询", user.toString());
        cacheService.putCache("userCache", loginName, user.getLoginName());
        return AjaxResult.ok().data("loginName", user.getLoginName());
    }
}

完整代码参考码云地址

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值