第一步 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
第二步 创建缓存配置类
@Configuration
public class SpringCachingConfig {
/**
* 定义和配置缓存管理器
*
* @return 配置好的 CacheManager 实例
*/
@Bean
public CacheManager cacheManager() {
SimpleCacheManager cacheManager = new SimpleCacheManager();
Set<ConcurrentMapCache> mapCaches = new HashSet<ConcurrentMapCache>();
// 配置缓存名称和类型
mapCaches.add(new ConcurrentMapCache(CacheNameConst.Jw_Amdin_Menu)); // 这里就是将缓存器的名称添加进去
mapCaches.add(new ConcurrentMapCache(CacheNameConst.Jw_Amdin_Dict));
mapCaches.add(new ConcurrentMapCache(CacheNameConst.Jw_Amdin_Log));
mapCaches.add(new ConcurrentMapCache(CacheNameConst.Jw_Amdin_User));
mapCaches.add(new ConcurrentMapCache(CacheNameConst.OSS));
cacheManager.setCaches(mapCaches);
cacheManager.afterPropertiesSet();
return cacheManager;
}
}
第三步 可以创建一些静态的缓存器名称(创建CacheNameConst类)
public class CacheNameConst {
/**
* 菜单/权限
*/
public static String Jw_Amdin_Menu="Jw_amdin_menu";
/**
* 数据字典
*/
public static String Jw_Amdin_Dict="Jw_amdin_dict";
/**
* 系统日志
*/
public static String Jw_Amdin_Log="Jw_amdin_log";
/**
* 系统用户
*/
public static String Jw_Amdin_User="Jw_amdin_user";
public static String OSS="OSS";
}
第四步 编写缓存的工具类,以后用缓存的方法都可以从里面直接调用
/**
*
*/
package com.zhangru.rzy.admin.api.config.cache;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.Objects;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.Cache;
import org.springframework.cache.Cache.ValueWrapper;
import org.springframework.cache.CacheManager;
/**
* 本地缓存工具类
* @author 楠Zz
* @date: 2024/09/9 11:55
*
*/
@Component
public class CacheUtil {
private Logger logger = LoggerFactory.getLogger(CacheUtil.class);
@Autowired
private CacheManager cacheManager;
private static CacheManager cm;
@PostConstruct
public void init() {
cm = cacheManager;
}
/**
* 添加缓存
*
* @param cacheName 缓存名称
* @param key 缓存key
* @param value 缓存值
*/
public void put(String cacheName, String key, Object value) {
Cache cache = cm.getCache(cacheName);
cache.put(key, value);
}
/**
* 获取缓存
*
* @param cacheName 缓存名称
* @param key 缓存key
* @return
*/
public Object get(String cacheName, String key) {
try {
Cache cache = cm.getCache(cacheName);
if (cache == null) {
return null;
}
if(null != cache.get(key)){
ValueWrapper valueWrapper=cache.get(key);
if(null != valueWrapper){
return valueWrapper.get();
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
logger.error(e.getMessage(), e);
return null;
}
return null;
}
/**
* 获取缓存(字符串)
*
* @param cacheName 缓存名称
* @param key 缓存key
* @return
*/
public String getString(String cacheName, String key) {
Cache cache = cm.getCache(cacheName);
if (cache == null) {
return null;
}
Cache.ValueWrapper wrapper = cache.get(key);
if (wrapper == null) {
return null;
}
try {
if(null != wrapper.get()){
return Objects.requireNonNull(wrapper.get()).toString();
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
return null;
}
return null;
}
/**
* 获取缓存(泛型)
*
* @param cacheName 缓存名称
* @param key 缓存key
* @param clazz 缓存类
* @param <T> 返回值泛型
* @return
*/
@SuppressWarnings("unchecked")
public <T> T get(String cacheName, String key, Class<T> clazz) {
Cache cache = cm.getCache(cacheName);
if (cache == null) {
return null;
}
Cache.ValueWrapper wrapper = cache.get(key);
if (wrapper == null) {
return null;
}
return (T) wrapper.get();
}
/**
* 失效缓存
*
* @param cacheName 缓存名称
* @param key 缓存key
*/
public void evict(String cacheName, String key) {
Cache cache = cm.getCache(cacheName);
if (cache != null) {
cache.evict(key);
}
}
}
第五步 直接使用(使用案例)

查看控制台打印日志

1461

被折叠的 条评论
为什么被折叠?



