写在前面:
最近在使用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
随时随地看视频