为了账号安全,请及时绑定邮箱和手机立即绑定

springboot2.0整合redis(自定义注解)

标签:
SpringBoot

写在前面:

最近在使用springboot2.0,想整合一下redis做缓存,但是使用原生的,不大好用,所以就想自己将redis进一步的封装,,想着使用自定义注解来对数据进行缓存,,,
当你添加缓存的时候不指定keyName,默认使用的是全类名加上方法名与参数,删除的时候需要使用全类名加方法名

演示

先看看怎么用
1.引入此jar包,在配置文件配置redis基本信息
2.新建一个配置类集成RedisCacheAspect,实现方法,定义切入点表达式


webp

image.png

3.在你需要缓存,删除缓存的地方,添加注解


webp

添加缓存

webp

根据key删除缓存

4.OK

简单不。。看看原理

1.准备

首先这是一个分模块的项目,缓存是一个模块,service是一个模块,dal是一个模块,web是一个springboot项目。
先将项目创建好


webp

项目结构

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.缓存模块的数据

webp

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


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消