您现在的位置是:首页 > 正文

springboot ehcache缓存配置

2023-12-31 11:49:15阅读 187

maven配置

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

ehcache.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<config
        xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
        xmlns='http://www.ehcache.org/v3'
        xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core.xsd">

    <!-- 缓存模版,此处为了显示其用法,也可以不用模版直接在cache中配置与模版参数相同 -->
    <cache-template name="cache_template">
        <!-- 设置缓存对象中key、value 的类型为String,如果没有指定则默认为java.lang.Object -->
        <key-type>java.lang.String</key-type>
        <value-type>java.lang.String</value-type>
        <expiry>
            <!-- 单位默认为秒当用秒作单位时,可以不填-->
            <ttl unit="hours">1</ttl>
        </expiry>
        <resources>
            <!--设置该缓存在堆上可持有2000个实体(键值对) -->
            <heap unit="entries">500</heap>
            <!--最大可持有500MB的堆外内存 -->
            <offheap unit="MB">50</offheap>
        </resources>
    </cache-template>
    <cache alias="web_code_cache" uses-template="cache_template">
        <expiry>
            <!--此处会覆盖模版中的(TTL)配置 -->
            <tti>300</tti>
        </expiry>
    </cache>
    <cache alias="recommend_articles" uses-template="cache_template">
        <value-type>java.util.ArrayList</value-type>
        <expiry>
            <!--此处会覆盖模版中的(TTL)配置 -->
            <tti unit="hours">12</tti>
        </expiry>
    </cache>
    <cache alias="hot_articles" uses-template="cache_template">
        <value-type>java.util.ArrayList</value-type>
        <expiry>
            <!--此处会覆盖模版中的(TTL)配置 -->
            <tti unit="hours">12</tti>
        </expiry>
    </cache>
    <cache alias="recently_articles" uses-template="cache_template">
        <value-type>java.util.ArrayList</value-type>
        <expiry>
            <!--此处会覆盖模版中的(TTL)配置 -->
            <tti unit="minutes">3</tti>
        </expiry>
        <resources>
            <offheap unit="MB">30</offheap>
        </resources>
    </cache>
    <cache alias="hot_tags" uses-template="cache_template">
        <value-type>java.util.ArrayList</value-type>
        <expiry>
            <!--此处会覆盖模版中的(TTL)配置 -->
            <tti unit="hours">12</tti>
        </expiry>
        <resources>
            <offheap unit="MB">10</offheap>
        </resources>
    </cache>
</config>

cache类配置

/**
 * 缓存配置
 */
@Configuration
@EnableCaching
public class CacheConfig {
}

资源配置

spring:
  cache:
    type: jcache
    jcache:
      provider: org.ehcache.jsr107.EhcacheCachingProvider
      config: classpath:ehcache.xml

缓存使用

@Cacheable(value = "hot_tags", key = "#siteId.toString().concat('-').concat(#count.toString())")
    @Override
    public List<ArticleTag> listTags(Long siteId, Integer count) {
    }

在代码中使用

public class CaptchaService {

	@Autowired
	private CacheManager cacheManager;

	public boolean checkCaptcha(String code) {
		final String codeKey = RequestUtils.getClientId(RequestUtils.getRequest());
		Cache.ValueWrapper valueWrapper = cacheManager.getCache(WEB_CODE_CACHE_NAME).get(codeKey);
		String codeInMemory = StrUtils.isBlank (codeKey) ? "" : (valueWrapper == null) ? "" : (String) valueWrapper.get();
		if(StrUtils.isNotBlank(codeKey)) {
			cacheManager.getCache(WEB_CODE_CACHE_NAME).evict(codeKey);
		}
		return StrUtils.isNotBlank(code) && code.equalsIgnoreCase(codeInMemory);
	}

	public FastcmsCaptcha getCaptcha() {
		HttpServletRequest request = RequestUtils.getRequest();
		SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 4);
		final String verCode = specCaptcha.text().toLowerCase();
		final String key = StrUtils.isEmpty(RequestUtils.getClientId(request)) ? StrUtils.uuid() : RequestUtils.getClientId(request);
		cacheManager.getCache(WEB_CODE_CACHE_NAME).put(key, verCode);
		return new FastcmsCaptcha(key, specCaptcha.toBase64());
	}

}

网站文章

  • k8s集成KubeSphere的第一个应用程序wordpress

    示例wordpress部署 这里使用project-regular权限账号进行登录,可以通过admin用户添加指定账号,然后创建空间demo-wordspace,并且创建demo-project项目 ...

    2023-12-31 11:00:44
  • k8s二进制快速集成KubeSphere

    一、KubeSphere 介绍 KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的分布式操作系统,完全开源,支持多云与多集群管理,提供全栈的 IT 自动化运维能力,简化企业的...

    2023-12-31 10:48:21
  • 二进制部署kubernetes集群的推荐方式

    软件版本: 软件 版本 containerd v1.6.5 etcd v3.5.0 kubernetes v1.24.0 一、系统环境 1.1 环境准备 角色 IP 服务 k8s-master01 1...

    2023-12-31 00:43:12
  • 如何在一台服务器上安装etcd集群

    一、环境 角色 IP etcd-1 192.168.10.10 (12379、12380) etcd-2 192.168.10.10 (22379、22380) etcd-3 192.168.10.1...

    2023-12-31 00:21:23
  • containerd镜像构建

    实用buildkit构建 wget https://github.com/moby/buildkit/releases/download/v0.10.5/buildkit-v0.10.5.linux-...

    2023-12-30 23:55:46
  • containerd 二进制安装

    一、环境 系统:Centos7 二、进制安装 Release containerd 1.6.5 · containerd/containerd · GitHub github上面提供了带cri、cni...

    2023-12-30 23:48:54
  • crictl命令的基本使用

    [root@k8s-node02 k8s-install]# crictl --help NAME: crictl - client for CRI USAGE: crictl [glo...

    2023-12-29 17:51:00
  • ctr命令的基本使用与技巧

    k8s早1.24后放弃docker,并把containerd作为运行时组件,containerd 调用链更短,组件更少,更稳定,占用节点资源更少 ctr是containerd的一个客户端工具 cric...

    2023-12-29 17:32:48
  • Java线上问题排查攻略 - cpu使用、内存占用、网络、数据库连接等问题排查

    线上的问题在通常有一些预警,比如CPU被打满,网络达到顶峰等等问题。或者用户的反馈,比如某某页面打不开,系统加载很慢,一直提示报错等等。 应急操作: 1 记录问题发生的情况 包括服务器的情况,Java...

    2023-12-29 15:19:32
  • containerd 如何配置 Proxy?

    Docker Hub: docker.io Quay: quay.io GCR: gcr.io GitHub 镜像库:ghcr.io 访问上面的镜像可能出现需要科学上网才能访问 通过配置代理/etc/...

    2023-12-29 13:59:12