写在前面:
最近在使用springboot2.0,想整合一下redis做缓存,但是使用原生的,不大好用,所以就想自己将redis进一步的封装,,想着使用自定义注解来对数据进行缓存,,,
当你添加缓存的时候不指定keyName,默认使用的是全类名加上方法名与参数,删除的时候需要使用全类名加方法名
先看看怎么用
1.引入此jar包,在配置文件配置redis基本信息
2.新建一个配置类集成RedisCacheAspect,实现方法,定义切入点表达式
image.png
3.在你需要缓存,删除缓存的地方,添加注解
添加缓存
根据key删除缓存
4.OK
简单不。。看看原理
1.准备首先这是一个分模块的项目,缓存是一个模块,service是一个模块,dal是一个模块,web是一个springboot项目。
先将项目创建好
项目结构
2.缓存模块1.缓存模块的pom文件2.缓存模块的数据org.springframework.boot spring-boot-starter-redis1.4.7.RELEASE org.springframework.boot spring-boot-starter-aopcom.alibaba fastjson
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";
}
}JedisClientjedis客户端的接口
public interface JedisClient {
String set(String key, String value);
String set(String key, String value, int time);
String get(String key);
Long del(String key);
Set keys(String key);
Boolean exists(String key);
Long expire(String key, int seconds);
Long ttl(String key);
Long incr(String key);
Long hset(String key, String field, String value);
String hget(String key, String field);
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 keys(String key) {
Jedis jedis = jedisPool.getResource();
Set 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



