RedisTemplate设计理解

本文详细介绍了Spring集成Redis的RedisTemplate设计,包括资源管理、接口回调和思想总结。RedisTemplate采用ThreadLocal绑定线程与Redis连接,利用回调接口实现操作。文中还探讨了TransactionSynchronizationManager在资源管理中的作用,以及如何通过RedisCallback接口实现Redis操作。最后总结了RedisTemplate设计的两大理念:线程资源副本和回调接口的使用。
摘要由CSDN通过智能技术生成
  1. Spring对于redis的集成很大程度上方便了开发人员操作redis的各种数据。屏蔽了对于底层redis连接的获取,释放。Spring-data-redis主要集成了jedis第三方客户端的操作。
  2. redis中主要有5种数据类型,分别为String,List,Set,Map,sort set.每一种数据结构在spring中都封装成一个操作接口。类图如下:

    这里写图片描述

  3. 上述5个接口定义了redis操作行为,主要是面向上层应用操作,程序开发人员直接通过这些接口的实例进行操作redis。每一种数据接口都有一个默认的实现类,都是以Defalut开头,同时都继承了AbstractOperations抽象类。该父类中定义了RedisTemplate的应用,同时通过定义一个内部类来实现对回调接口RedisCall的引用。核心源码如下:

abstract class AbstractOperations<K, V> {
   

    // utility methods for the template internal methods
    // 内部类实现回调接口
    abstract class ValueDeserializingRedisCallback implements RedisCallback<V> {
   
        private Object key;

        public ValueDeserializingRedisCallback(Object key) {
            this.key = key;
        }
    // 采用模板方法设计,doInRedis中定义算法骨架,具体的子类实现inRedis功能
        public final V doInRedis(RedisConnection connection) {
            byte[] result = inRedis(rawKey(key), connection);
            return deserializeValue(result);
        }
  //   具体子类实现inRedis功能,作为模板方法的具体实现功能部分。
        protected abstract byte[] inRedis(byte[] rawKey, RedisConnection connection);
    }

    RedisTemplate<K, V> template;
}
  1. 抽象类AsbtractOperations中的抽象内部类ValueDeserializingRedisCallback 实现了回调接口RedisCall,该接口中定义了一个非常重要的方法就是doInRedis(RedisConnection connection)。这是spring-data-redis中非常核心的方法,后续会讲述。该抽象内部类ValueDeserializingRedisCallback 采用了模板方法思想,doInRedis方法为业务逻辑的主要执行入口,抽象方法inRedis,主要是具体的实现类去完成最终的redis操作。redis是一个Key-Value数据库,所以inRedis中方法参数都可以定义为key和RedisConnection两个参数。
  2. RedisConnection顾名思义,就是封装了redis连接,借鉴java.sql.connection思想,主要封装了底层操作redis的操作。
  3. 接口 RedisConnection继承了RedisCommand接口,而RedisCommand接口继承了一堆封装了redis操作命令的接口。RedisConnection是Redis操作的核心接口。
    这里写图片描述

  4. 通过UML类图可以发现RedisConnection接口具体实现主要有JedisConnection和JedisClusterConnection两个实现类。分别封装了redis操作,redis哨兵和RedisCluster操作。

  5. RedisTemplate中最核心的设计思想主要是两部分,第一是采用ThreadLocal将redis连接与线程请求绑定,即每个线程都会操作单独的redis连接。第二是采用回调的设计思想,将回调接口RedisCallback中具体的redis操作行为最终采用匿名内部类实现。即实现上述中ValueDeserializingRedisCallback 类中的抽象方法InRedis。这两个部分的设计完美的体现了Spring封装redis的操作核心理念。
  6. TransactionSynchronizationManager事物同步资源管理器,这个工具类是spring事物模块中的一个核心操作类。在spring-tx.jar中,可见这个工具类的重要性。这个工具类中有如下几个属性:
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值