实习笔记13-EhCache缓存

实习笔记13-EhCache缓存(本地缓存)

最近有把数据从一个函数传递到另一个函数的需求,如果这些数据使用频率很高的话,就可以写进缓存里。所以浅浅了解常用的缓存以及使用场景,使用方法还是很有帮助的。

 EhCache是一个开源的、设计用于提高数据从关系型数据库中取出时高花费、高延时的缓存解决方案。EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点。EhCache缓存存储和读取非常快,并且支持多种缓存策略:堆缓存、磁盘缓存、集群缓存。

EhCache适合两种业务:

  1. QPS多。
  2. 缓存数据量小。

TIPS:

  1. 敏感数据不适应EhCache,更新快。
  2. 建议将过期时间设置的非常小,1-10s。

本地缓存是内存访问,没有远程交互开销,性能最好,但是受限于单机容量,一般缓存较小且无法扩展

一、单独使用EhCache配置:

  1. 引入依赖
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.8.1</version>
</dependency>
  1. 快速入门代码
public static void main(String[] args) {        
//1. 构建核心组件,CacheManager        
    CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()                
// 设置缓存别名                
  .withCache("cache1",CacheConfigurationBuilder.newCacheConfigurationBuilder(String.class,Object.class, ResourcePoolsBuilder.heap(1)))  
// 同时指定缓存的key-value类型,以及缓存容纳的个数                
    .build();        
//2. 初始化        
    cacheManager.init();
//3. 获取Cache方式一。从缓存管理器拿到设置好的Cache        
    Cache<String, Object> cache1 = cacheManager.getCache("cache1", String.class, Object.class);
//4. 获取Cache方式二。 基于缓存管理器构建一个Cache        
    Cache<String, Object> cache2 = cacheManager.createCache("cache2", CacheConfigurationBuilder.newCacheConfigurationBuilder(String.class,    Object.class, ResourcePoolsBuilder.heap(5)));
//5. 操作        
    cache1.put("cache0","阿巴阿巴");        
    Object value1 = cache1.get("cache0");        
    System.out.println(value1);    
}

二、SpringBoot整合EhCache配置:

  1. 引入依赖
        <dependency>
            <groupId>org.ehcache</groupId>
            <artifactId>ehcache</artifactId>
        </dependency>
  1. 准备EhCache配置项
    需要告诉Spring Boot去哪里找缓存配置文件,这需要在Spring Boot配置文件中进行设置:
spring.cache.jcache.config=classpath:ehcache.xml

3.使用@EnableCaching注解开启Spring Boot应用程序缓存功能,你可以在应用主类中进行操作:

package com.ramostear.cache;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;

@SpringBootApplication
@EnableCaching
public class CacheApplication {

    public static void main(String[] args) {
        SpringApplication.run(CacheApplication.class, args);
    }
}

4.需要创建一个 ehcache 的配置文件,该文件放置在类路径下,如resources目录下:

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.ehcache.org/v3"
        xmlns:jsr107="http://www.ehcache.org/v3/jsr107"
        xsi:schemaLocation="
            http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.0.xsd
            http://www.ehcache.org/v3/jsr107 http://www.ehcache.org/schema/ehcache-107-ext-3.0.xsd">
    <service>
        <jsr107:defaults enable-statistics="true"/>
    </service>

    <cache alias="person">
        <key-type>java.lang.Long</key-type>
        <value-type>com.ramostear.cache.entity.Person</value-type>
        <expiry>
            <ttl unit="minutes">1</ttl>
        </expiry>
        <listeners>
            <listener>
                <class>com.ramostear.cache.config.PersonCacheEventLogger</class>
                <event-firing-mode>ASYNCHRONOUS</event-firing-mode>
                <event-ordering-mode>UNORDERED</event-ordering-mode>
                <events-to-fire-on>CREATED</events-to-fire-on>
                <events-to-fire-on>UPDATED</events-to-fire-on>
                <events-to-fire-on>EXPIRED</events-to-fire-on>
                <events-to-fire-on>REMOVED</events-to-fire-on>
                <events-to-fire-on>EVICTED</events-to-fire-on>
            </listener>
        </listeners>
        <resources>
                <heap unit="entries">2000</heap>
                <offheap unit="MB">100</offheap>
        </resources>
    </cache>
</config>

5.还需要定义个缓存事件监听器,用于记录系统操作缓存数据的情况,最快的方法是实现CacheEventListener接口:

package com.ramostear.cache.config;

import org.ehcache.event.CacheEvent;
import org.ehcache.event.CacheEventListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class PersonCacheEventLogger implements CacheEventListener<Object,Object>{

    private static final Logger logger = LoggerFactory.getLogger(PersonCacheEventLogger.class);

    @Override
    public void onEvent(CacheEvent cacheEvent) {
        logger.info("person caching event {} {} {} {}",
                cacheEvent.getType(),
                cacheEvent.getKey(),
                cacheEvent.getOldValue(),
                cacheEvent.getNewValue());
    }
}

6.使用@Cacheable注解

@Cacheable(cacheNames = "person",key = "#id")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值