概述 链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度 链表在Redis中的应用非常广泛,比如列表键的底层实现之一就是链表.当一个列表键包含了数量比较多的元素,又或者列表中包含的元素都是比较长的字符串时,Redis就会使用链表作为列表键的底层实现 ...
Redis数据结构-字符串
简单动态字符串(SDS) Redis自己构建了一种名为简单动态字符串(simple dynamic string, SDS)的抽象类型,并将SDS用作Redis的默认字符串表示. 在Redis中,C字符串只会作为字符串字面量用在一些无需对字符串值进行修改的地方,比如打印日志: redisLog(R ...
ReentrantLock源码阅读
参考kangjianwei大佬的LearningJDK 概述 类图 获得锁操作委托给继承了AQS的内部类Sync FairSync和NonfairSync继承自Sync,分别实现公平和非公平的tryAcquire方法 调用解释 当调用reentrantLock().lock()时,调用s ...
ReentrantLock
Lock接口 public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock ...
Java并发编程-基础构建模块
同步容器类 如Vector和HashTable.其实现方式是:将它们的状态封存起来,并对每个公有方法都进行同步,使得每次只能有一个线程能访问容器的状态 同步容器类的问题 容器上常见的符合操作: 迭代 , 跳转 和 条件运算.在同步容器中,这些复合操作在没有客户端加锁的情况下仍然是线程安全的,但当 ...
Dubbo笔记-10-Dubbo过滤器
概述 过滤器提供了服务提供者和消费者调用过程的拦截,即每次执行RPC调用的时候,对应的过滤器都会生效 过滤器的使用 Dubbo中已经有很多内置的过滤器,并且大多数都是默认启动的,如ContextFilter,对于自行扩展的过滤器,一种方式是使用@Active注解默认启动,另一种方式是在配置文件中 ...
Dubbo笔记-9-Dubbo高级特性
Dubbo高级特性概述 Dubbo解决了分布式场景RPC通信调用的问题,但是要满足各种业务场景还是不够的.场景: 支付业务需要自身迭代版本,比如1.0和2.0版本,在2.0版本做了大量性能改进,需要发布到性能测试环境与1.0版本做对比,这个时候需要框架提供服务隔离的能力. 客户端消费远程服务时不 ...
Dubbo笔记-8-Dubbo扩展点
概述 背景 扩展机制和扩展点作为Dubbo设计的核心机制,不仅是Dubbo能够适应不同公司的技术需要,流行至今的重要引出,也是Dubbo本身生态不断完善,功能越来越强大的核心原因之一 扩展点整体架构 按使用者和开发者来分,Dubbo可以分为API层和SPI层.API层让用户只关注业务的配置,直 ...
Dubbo笔记-7-负载均衡
负载均衡的封装 容错策略中的负载均衡都使用了抽象父类AbstractCluster中定义的Invoker select方法而并不是直接使用LoadBalance方法,因为抽象父类在LoadBalance的基础上又封装了一些新特性: 粘滞连接 粘滞连接用于有状态服务,尽可能让客户端总是向同一提供 ...
Dubbo笔记-6-Dubbo集群容错
Cluster层概述 Cluster的总体工作流程可以分为以下几种: 生成Invoker对象 不同的Cluster实现会生成不同类型的ClusterInvoker对象并返回.然后调用ClusterInvoker的Invoker方法,正式开始调用流程 获得可调用的服务列表 首先会做前置校验,检查远 ...
Dubbo笔记-5-Dubbo远程调用
Dubbo调用介绍 首先客户端启动时会从注册中心拉取和订阅对应的服务列表,Cluster会把拉取到的服务列表聚合成一个Invoker,每次RPC调用前会通过Directory#list获取provider地址,获取这些服务列表给后续路由和负载均衡使用 应图中①中主要是将多个服务提供者做聚合.在框 ...
Dubbo笔记-4-Dubbo起停原理
配置解析 目前Dubbo框架同时提供了3中配置方式:XML配置,注解,属性文件配置 基于schema设计解析 Dubbo框架直接集成了Spring的能力,利用了Spring配置文件扩展出自定义的结息方式.Dubbo配置约束文件在dubbo-config/dubbo-config-spring/s ...