SpringBoot2.3.4整合Ehcache3.8.1

导读:本篇文章讲解 SpringBoot2.3.4整合Ehcache3.8.1,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

概述

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());
    }
}

完整代码参考码云地址

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/76839.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!