写在前面:
最近在使用springboot2.0,想整合一下redis做缓存,但是使用原生的,不大好用,所以就想自己将redis进一步的封装,,想着使用自定义注解来对数据进行缓存,,,
当你添加缓存的时候不指定keyName,默认使用的是全类名加上方法名与参数,删除的时候需要使用全类名加方法名
演示
先看看怎么用
1.引入此jar包,在配置文件配置redis基本信息
2.新建一个配置类集成RedisCacheAspect,实现方法,定义切入点表达式
image.png
3.在你需要缓存,删除缓存的地方,添加注解
添加缓存
根据key删除缓存
4.OK
简单不。。看看原理
1.准备
首先这是一个分模块的项目,缓存是一个模块,service是一个模块,dal是一个模块,web是一个springboot项目。
先将项目创建好
项目结构
2.缓存模块
1.缓存模块的pom文件
<!-- Redis的依赖库 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>1.4.7.RELEASE</version> </dependency> <!-- aop依赖库--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> </dependency>
2.缓存模块的数据
image.png
RedisProperties
读取配置文件中的redis的配置,进行封装
@Configuration@ConfigurationProperties(prefix = "spring.redis")public class RedisProperties { private String host; private String port; public String getHost() { return host; } public void setHost(String host) { this.host = host; } public String getPort() { return port; } public void setPort(String port) { this.port = port; } }
RedisConfig
将配置文件中的数据,转换成程序可用的jedis客户端
@Configurationpublic class RedisConfig { @Autowired private RedisProperties redisProperties; @Bean public JedisPool jedisPool(){ String host = redisProperties.getHost(); Integer port = Integer.parseInt(redisProperties.getPort()); return new JedisPool(host,port); } public static String getPackages(){ return "niaho"; } }
JedisClient
jedis客户端的接口
public interface JedisClient { /** * 设置key,value */ String set(String key, String value); /** * 设置key,value并设置过期时间 */ String set(String key, String value, int time); /** * 根据key得到值 */ String get(String key); /** * 根据key删除值 */ Long del(String key); /** * 根据前缀得到所有的key */ Set<String> keys(String key); /** * 判断key是否存在 */ Boolean exists(String key); /** * 为key设置过期时间 */ Long expire(String key, int seconds); /** * 得到key的存活时间 , key不存在-2, key永久存活-1 key存活时间(秒) */ Long ttl(String key); /** * 将key的值,加一 */ Long incr(String key); /** * 设置map的值 */ Long hset(String key, String field, String value); /** * 得到map的值 */ String hget(String key, String field); /** * 删除map */ Long hdel(String key, String... field); }
JedisClientPool
单机版jedis实现,
@Servicepublic class JedisClientPool implements JedisClient { @Autowired private JedisPool jedisPool; @Override public String set(String key, String value) { Jedis jedis = jedisPool.getResource(); String result = jedis.set(key, value); jedis.close(); return result; } @Override public String set(String key, String value, int time){ Jedis jedis = jedisPool.getResource(); String set = jedis.set(key, value); Long expire = expire(key, time); return set; } @Override public Long del(String key) { Jedis jedis = jedisPool.getResource(); Long del = jedis.del(key); jedis.close(); return del; } @Override public Set<String> keys(String key) { Jedis jedis = jedisPool.getResource(); Set<String> keys = jedis.keys(key); return keys; } @Override public String get(String key) { Jedis jedis = jedisPool.getResource(); String result = jedis.get(key); jedis.close(); return result; } @Override public Boolean exists(String key) { Jedis jedis = jedisPool.getResource(); Boolean result = jedis.exists(key); jedis.close(); return result; } @Override public Long expire(String key, int seconds) { Jedis jedis = jedisPool.getResource(); Long result = jedis.expire(key, seconds); jedis.close(); return result; } @Override public Long ttl(String key) { Jedis jedis = jedisPool.getResource(); Long result = jedis.ttl(key); jedis.close(); return result; } @Override public Long incr(String key) { Jedis jedis = jedisPool.getResource(); Long result = jedis.incr(key); jedis.close(); return result; } @Override public Long hset(String key, String field, String value) { Jedis jedis = jedisPool.getResource(); Long result = jedis.hset(key, field, value); jedis.close(); return result; } @Override public String hget(String key, String field) { Jedis jedis = jedisPool.getResource(); String result = jedis.hget(key, field); jedis.close(); return result; } @Override public Long hdel(String key, String... field) { Jedis jedis = jedisPool.getResource(); Long result = jedis.hdel(key, field); jedis.close(); return result; } }
作者:z七夜
链接:https://www.jianshu.com/p/841f87cdb818