SpringBoot集成EhCache

一、目录

  •  简介
  •  整合SpringBoot
  •  EhCacheUtils编写

二、简介

2.1 基本介绍

     EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认CacheProvider。Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。
     Spring 提供了对缓存功能的抽象:即允许绑定不同的缓存解决方案(如Ehcache),但本身不直接提供缓存功能的实现。它支持注解方式使用缓存,非常方便。
  2.2 主要的特性

  1.  快速
  2.   简单
  3. 多种缓存策略
  4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题
  5. 缓存数据会在虚拟机重启的过程中写入磁盘
  6. 可以通过RMI、可插入API等方式进行分布式缓存
  7. 具有缓存和缓存管理器的侦听接口
  8. 支持多缓存管理器实例,以及一个实例的多个缓存区域
  9. 提供Hibernate的缓存实现

2.3 集成

  可以单独使用,一般在第三方库中被用到的比较多(如mybatis、shiro等)ehcache 对分布式支持不够好,多个节点不能同步,通常和redis一块使用

2.4  ehcache 和 redis 比较

  ehcache直接在jvm虚拟机中缓存,速度快,效率高;但是缓存共享麻烦,集群分布式应用不方便。

  redis是通过socket访问到缓存服务,效率比Ehcache低,比数据库要快很多,处理集群和分布式缓存方便,有成熟的方案。如果是单个应用或者对缓存访问要求很高的应用,用ehcache。如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的,建议用redis。

        ehcache也有缓存共享方案,不过是通过RMI或者Jgroup多播方式进行广播缓存通知更新,缓存共享复杂,维护不方便;简单的共享可以,但是涉及到缓存恢复,大数据缓存,则不合适。

三、整合SpringBoot

3.1 导入maven

        
             org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-cache
        
        
            net.sf.ehcache
            ehcache
        

3.2 编写ehcache.xml文件




    
    

    

    
    

3.3  添加springboot 配置(application.yml)

spring:
  cache:
    type: ehcache
    ehcache:
      config: classpath:ehcache.xml

3.4 spring boot启动类开启缓存注解

@EnableCaching

四、编写EhCacheUtils

/*
 * Copyright © 2020-present hkt-star. All Rights Reserved.
 */

package com.wanwei.onevieweecf.utils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;
import org.springframework.stereotype.Component;

/**
 * ehcache缓存操作工具类
 *
 * @author hkt
 * @version 1.0
 * @title EhCacheUtils
 * @date 2021/3/1 11:56
 */
@Slf4j
public final class EhCacheUtils {
	/** CacheManager */
	private static final CacheManager CACHE_MANAGER = SpringUtils.getBean(CacheManager.class);

	/**
	 * 获取Cache
	 *
	 * @author hkt
	 * @date 2021/3/1 12:49
	 */
	public static Cache getCache() {
		return CACHE_MANAGER.getCache("myCache");
	}

	/**
	 * 添加缓存数据
	 *
	 * @param key   键
	 * @param value 值
	 * @author hkt
	 * @date 2021/3/1 12:50
	 */
	public static void put(String key, Object value) {
		try {
			Cache cache = getCache();
			cache.put(key, value);
		} catch (Exception e) {
			log.error("添加缓存失败:{}", e.getMessage());
		}
	}

	/**
	 * 获取缓存数据
	 *
	 * @param key 键
	 * @return 缓存数据
	 * @author hkt
	 * @date 2021/3/1 12:53
	 */
	public static  T get(String key) {
		try {
			Cache cache = getCache();
			return (T) cache.get(key).get();
		} catch (Exception e) {
			log.error("获取缓存数据失败:", e);
			return null;
		}
	}

	/**
	 * 删除缓存数据
	 *
	 * @param key 键
	 * @author hkt
	 * @date 2021/3/1 12:53
	 */
	public static void delete(String key) {
		try {
			Cache cache = getCache();
			cache.evict(key);
		} catch (Exception e) {
			log.error("删除缓存数据失败:", e);
		}
	}

	/**
	 * @author hkt
	 * @date 2021/3/1 12:02
	 */
	private EhCacheUtils() {
	}
}

你可能感兴趣的:(缓存,缓存,java,spring)