easy-cache

匿名 (未验证) 提交于 2019-12-02 23:43:01

Easy-cache

介绍

一个极度便捷的缓存框架,你可以根据需要把缓存功能扩展到任意带存储功能的数据库或组件。最重要的是操作简单,操作简单,操作简单,重要的事情一定要说三遍。不像以往你接触到的其他产品,你想要的缓存功能都不支持。但是再烂的产品也总会有合适的适用场景,没错,就是这么自信。github地址:https://github.com/xiaoyudeguang/easy-cache

https://gitee.com/xiaoyudeguang/easy-version

 <dependency>     <groupId>io.github.xiaoyudeguang</groupId>     <artifactId>easy-cache</artifactId>     <version>3.1.8-RELEASE</version> </dependency>

使用说明

添加缓存:直接在方法上声明@EasyCache注解

 @EasyCache(key = "name", todo = "") public int doService(String name) {     return this.hascode(); }

请注意,你的方法参数中一定得有一个参数的参数名和@EasyCache注解的key值一样,不然缓存是不会生效的。那个参数可以直接存在于方法参数中(位置无所谓),也可以存在于某个map(Map实现类)中,或者,某个实例化的EasyMap(HashMap的增强版,本质上还是Map)对象中。

删除缓存

本来,我的业务室不需要删除缓存的。想了想,加上吧,万一有人需要呢。

  1. 在需要删除缓存对的方法上加上下面的注解(你可能已经猜到@EasyCache注解的value参数有默认值了。。。)
 @EasyCache(value = Operation.SAVE, key = "name", todo = "") public int delete(String name) {     return this.hascode(); }
  1. 比如很奇葩的业务哈,直接调用定义在抽象层或者三方包的方法,没有修改类方法的实现,咋办?不管你用哪个缓存,都会遇到这个问题是吧?请看:
 CacheUtils.dele(key);

高级功能(将缓存功能扩展到任意数据库/带存储功能的组件)

以下是CacheUtils类的源码

 @EasyBean(todo = { "缓存工具类" }) public class CacheUtils implements IHandlerOnChanged{  	private static ICache operation;  	@Autowired(required = false) 	public CacheUtils(ICache operation) { 		CacheUtils.operation = operation; 	} 	 	public CacheUtils() {}  	/** 	 * 默认将DefaultCache作为缓存(请根据需要自己实现) 	 * @return 	 */ 	public static ICache getCache() { 		if (operation == null) { 			operation = new DefaultCache(); 		} 		return operation;  	}  	/** 	 * 新增(已存在则无操作,不存在则新增) 	 */ 	public static void add(Object key, Object value) { 		getCache().add(key, value); 	}  	/** 	 * 设置(已存在则替换,不存在则新增) 	 */ 	public static void set(Object key, Object value) { 		getCache().set(key, value); 	}  	/** 	 * 删除 	 *  	 * @return 	 */ 	@SuppressWarnings("unchecked") 	public static <T> T del(Object key) { 		return (T) getCache().del(key); 	} 	 	/** 	 * 删除 	 *  	 * @return 	 */ 	public static boolean have(Object key) { 		return getCache().get(key) != null ; 	}  	/** 	 * 查询 	 *  	 * @return 	 */ 	@SuppressWarnings("unchecked") 	public static <T> T get(Object key) { 		return (T) getCache().get(key); 	} 	 	/** 	 * 清空 	 *  	 * @return 	 */ 	public static void clear() { 	   getCache().clear(); 	} 	 	@Override 	public void doOnChanged(ApplicationContext context) throws Exception { 		getCache().clear(); 	}  	/** 	 *  	 * @Auth 赵光 	 * @Describle 默认cache实现(采用ConcurrentHashMap) 	 * @2019年6月15日 上午10:12:05 	 */ 	private static class DefaultCache implements ICache {  		private Map<Object, Object> cache = new ConcurrentHashMap<Object, Object>();  		@Override 		public void add(Object key, Object value) { 			if (!cache.containsKey(key)) { 				cache.put(key, value); 			} 		}  		@Override 		public void set(Object key, Object value) { 			cache.put(key, value); 		}  		@Override 		public Object del(Object key) { 			return cache.remove(key); 		}  		@Override 		public Object get(Object key) { 			return cache.get(key); 		}  		@Override 		public void clear() { 		    cache.clear(); 		} 	} }

如果你都看不懂上面的代码,那就没得玩了。假设你的代码能力没问题哈,定义一个类,实现ICache接口,逐个实现方法,将数据存储到你期望的数据库里,就OK了。以下用redis作为示例:

 @EasyBean(todo = { "Redis缓存" }) public class RedisCache implements ICache{ 	 	private static RedisTemplate<Object, Object> redisTemplate; 	 	private final static String cacheKey = "redis.cache"; 	  	@Autowired(required = false) 	public RedisCache(RedisTemplate<Object, Object> redisTemplate) { 		RedisCache.redisTemplate = redisTemplate; 	}  	@Override 	public void set(Object key, Object value) { 		redisTemplate.opsForHash().put(cacheKey, key, value); 	}  	@Override 	public Object del(Object key) { 		return redisTemplate.opsForHash().delete(cacheKey, key); 	}  	@Override 	public Object get(Object key) { 		return redisTemplate.opsForHash().get(cacheKey, key); 	}  	@Override 	public void clear() { 		redisTemplate.delete(cacheKey); 	}  	@Override 	public boolean have(Object key) { 		return redisTemplate.opsForHash().hasKey(cacheKey, key); 	} }

文章来源: https://blog.csdn.net/qq_28802119/article/details/92110763
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!