【Redisson】源码预读准备工作

1  前言

微服务常见的就是服务和服务之间的协同了,那么 Redisson 就是我们常用的一种协同工具了,所以想看看它的源码,只有了解它的原理,才能更好的正确使用它。

2  准备工作

既然要看是不是得先知道的它的源码地址呢?地址:Redisson 源码

有了源码,是不是还需要一份文档呢?没文档的话怎么知道它的组成成分呢?每个组件和组件之间的关系呢?是不是:官方中文文档奉上,打开慢? gitee地址奉上

我找了找关于 Redisson 的书籍,因为我喜欢边看源码边看书,因为书讲的很全很细,能从头给我们讲它的由来,它的发展过程,但是没找到一本专门讲 Redisson 的书籍(大多都是官网文档的东西),有小伙伴知道的话,还望告下我。

3  概览

从整个目录结构看下来,大概分这些内容:

从配置到使用,以及夹杂着各种数据结构和对象,以及服务和服务之间的协同,再到框架的整合。

配置、框架整合:告诉我们要使用 Redisson 应该怎么引入,并且怎么配置

调用方式:主要分同步和异步以及异步流式调用(响应式框架使用比如阿里的gateway网关里使用)

序列化:讲究的就是我们存取数据时,肯定是要先序列化和反序列化对象的哈,默认的也是 spring里的默认的 jackson (这里延申一下,我们平时常用的json方式有哪些呢?是不是就是 jackson、fastjson、gson三个,至于哪个好,唉,没细细研究过,我做过的项目那家伙五花八门的啥也用)

数据分片:主要就是大对象的拆分,降低单节点的负载

分布式对象:主要包含了一些高级对象,布隆过滤器呀、基数统计呀、原子型对象、限流器对象等

分布式集合:队列、Set、Zset、映射等

分布式服务:这个有点牛皮了,可以通过它进行服务的注册和调用,以及一些高级用法

分布式锁:提供各种锁,来协同各个服务(可以是某个服务下的多个实例、也可以是不同服务之间的协同,在我们 Java 里本质就是协同多个JVM进程)

命令对象关系:主要是串联 Redis中的操作,在 Redisson中对应的操作关系

其他:就剩 Redisson 给我们的一些其他高级功能、以及工具哈。

4  简单尝试

那看了一下整体的大概,我们动手尝试尝试:

首先引入依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>3.15.0</version>
</dependency>

创建 Redisson 的 Bean:

/**
 * @author kuku
 */
@Configuration
@EnableConfigurationProperties({RedisProperties.class})
public class RedissonConfig {

    @Autowired
    private RedisProperties redisProperties;

    @Bean
    public RedissonClient redissonClient(){
        Config config = new Config();
        SingleServerConfig singleServerConfig = config.useSingleServer();
        singleServerConfig.setAddress("redis://"+redisProperties.getHost()+":"+redisProperties.getPort());
        singleServerConfig.setDatabase(redisProperties.getDatabase());
        if(StringUtils.isNotBlank(redisProperties.getPassword())) {
            singleServerConfig.setPassword(redisProperties.getPassword());
        }
        return Redisson.create(config);
    }
}

共享变量的安全递增:

/**
 * @author kuku
 */
@RestController
@RequestMapping("/user/")
public class UserController {
private int num = 0;

    @Autowired
    private RedissonClient redissonClient;
    @GetMapping("/testRedisson")
    public String testRedisson() {
        RLock lock = redissonClient.getLock("numFlag");
        lock.lock();
        try {
            num++;
        } finally {
            lock.unlock();
        }
        return String.valueOf(num);
    }

}

5  小结

好啦,本节就看到这里,剩下的要开始一点点详细的去扣细节了,有理解不对的地方欢迎指正哈。

posted @ 2024-04-02 09:15  酷酷-  阅读(12)  评论(0编辑  收藏  举报