03 2021 档案
摘要:在Java5.0中加入的ConcurrentHashMap,属于并发容器的一种,旨在提供并发环境下高效的安全性和性能。相比于HashTable的全局锁,ConcurrentHashMap使用分段锁减少竞争。经过几个大版本的更新,实现细节发生了很大变化,下面主要说说JDK1.7和JDK1.8中的实现。
阅读全文
摘要:3.1 可见性 一个线程修改了变量保证对其他线程可见 3.1.1 失效数据 读取的数据的旧值。 3.1.2 非原子的64位操作 非volatile类型的long和double变量,将64位的操作分成两个32位,此种情况是线程不安全的。 3.1.3 加锁与可见性 通过加锁,线程对变量的修改,对下个获取
阅读全文
摘要:2.1 什么是线程安全性 当多个线程访问某个类,这个类始终表现出正确的行为,称这个类是线程安全的。 线程安全类:无状态类 完全由线程安全类组成的程序不一定是线程安全的,线程安全类中也可以包含非线程安全的类。 2.2 原子性 一系列操作不可分。 2.2.1 竞态条件 不恰当的执行顺序出现不正确的结果,
阅读全文
摘要:1. NameServer 启动:NamesrvStartup#main0()。内部注意初始化了两个线程池,一个每10秒扫描所有的broker,如果一个broker断开120秒,则关闭链接并移除broker。另一个线程池一个打印KV信息。 路由实现类:RouteInfoManager package
阅读全文
摘要:一、Broker主从同步模式:异步复制、同步双写 二、刷盘策略:同步刷盘、异步刷盘 三、消息存储 1. 生产者发送消息,Broker收到后,将消息持久化,返回ACK。 2. 虽然消费方式有push和pull,但在RocketMQ中实际上都是由消费者主动去获取的,因为当消费者非常多时,服务端的压力会非
阅读全文
摘要:Broker集群: 接收生产者发送的消息和消费者消费的请求。Master可读可写,Slave只读。 每个Broker节点,启动时遍历NameServer列表,与每个NameServer建立长连接,注册自己的信息,定时上报 Producer集群: 通过NameServer集群获得Topic的路由信息,
阅读全文
摘要:一、MQ的应用场景 1.1 异步解偶 在订单系统中同步调用支付系统,库存系统,物流系统。当其中任意一个系统异常,则影响整个业务流程。引入MQ后,订单系统将消息发往MQ,由MQ将消息推送到下游系统。订单系统不需要关心后续的执行情况,整个下单流程已完成。倘下游系统异常,则由MQ负责重试。 1.2 削峰填
阅读全文
摘要:1. 串行加的是行级锁不是表锁 数据和隔离级别 mysql> select * from t2; + + | a | + + | 1 | | 2 | | 5 | | 6 | | 7 | | 9 | + + 6 rows in set (5.09 sec) mysql> show variables
阅读全文
摘要:一、分布式相关概念 1.1 分布式CAP定理 1. 一致性(Consistency):分布式系统不同节点的数据在同一时刻完全一致 2. 可用性(Availability):分布式系统随时对外提供正常服务,不是异常或超时(访问某个节点) 3. 分区容错性(Partition Tolerance):分布
阅读全文
摘要:一、切分方式 1. 垂直切分 1. 垂直分库:将不同业务数据存放到不同的库。如订单库,商品库 2. 垂直分表:将一个表的大字段且不常访问字段,划分出来放到其他的表。内存中的数据页可以存放更多的热点数据。增加查询效率,减少I/O 优点:业务解偶,不同业务数据独立维护;一定程度缓解库的压力 缺点:多表/
阅读全文
摘要:一、主从复制 1. 复制原理 binlog:二进制日志,记录数据的更改。可用于本机数据恢复和主从同步。刷入磁盘的方式:每秒刷入磁盘|事务提交刷入磁盘|每秒+每次事务提交刷入磁盘。刷盘线程dump thread relay(中继)log:1. 从节点定时请求主节点的binlog获取修改内容 2. 将b
阅读全文
摘要:一、优化思路 开启慢查询日志,找出问题SQL 查看SQL的执行计划 优化SQL 使用show profile[s] 查看问题SQL的性能使用情况 调整操作系统参数 升级服务器硬件 二、慢查询日志 mysql> show variables like 'slow%'; + + + | Variable
阅读全文
摘要:一、一条update语句 https://zhuanlan.zhihu.com/p/146968292 二、MySQL锁介绍 锁粒度分类:全局锁、表锁和行锁。MySQL Server支持全局锁和表锁,行锁是存储引擎实现的。 锁功能分类:共享锁、排他锁。加了共享锁的记录,其他事务可以继续加共享锁,但不
阅读全文
摘要:先mark一下,后续更新。 参考: https://blog.csdn.net/zknxx/article/details/77917290 https://blog.csdn.net/qq_41907991/article/details/105123387
阅读全文
摘要:一、索引特点 优势:1. 提高数据检索效率,减少查找数据的磁盘I/O操作 缺点:1. 占用磁盘空间 2. 增加维护成本,增删改需要维护索引 二、索引分类 1. 聚集索引:一张表只能有一个,叶子节点会包含该行的完整数据。 2. 非聚集索引:叶子节点不存完整的数据。 #创建聚集索引 ALTER TABL
阅读全文
摘要:一、Insert语句的执行流程 undo log:数据的旧版本 记录undo_log的redo log:将undo log记录到redo log,防止需要回滚但服务器宕机导致的回滚失败。 二、事务 2.1 事务的ACID特性 - 原子性:事物被视为不可分割的最小执行单位,要么都成功,要么都失败回滚。
阅读全文
摘要:一、逻辑架构 Connectors:Mysql的客户端, Management Serveices & Utilities:系统管理和控制工具 Connection Pool:连接池 SQL Interface:DDL、DML语句对应的处理接口 Parser:解析器,对SQL语句进行词法和语法分析,
阅读全文
摘要:一、设计优化 1. 估算Redis内存使用量 以非数字的字符串键值对为例,假设key和value的长度均为12个字节,则内部使用的编码方式为embstr。共计90000个键值对占用的空间 Redis中存储键值对使用字典,字典内部使用哈希表数组,数组的每个元素dictEntry中共有三个指针(指向键的
阅读全文
摘要:1. 分布式锁的特点 互斥性:同一时刻只有一个客户端可以持有锁 容错性:只要锁服务集群中大部分节点正常运行,客户端就可以进行锁操作 避免死锁:保证锁一定能释放,正常释放或超时释放 加锁和解锁是同一个客户端 2. 分布式锁的实现方式 基于数据库实现分布式锁(乐观锁、悲观锁) 基于zookeeper时节
阅读全文
摘要:Redis 5.0版本之后提供的新的数据类型,类似于MQ,是发布订阅模式的改进 1. Streams数据结构 每一个Streams有唯一的名称,对应了Redis的键。将所有加入的消息(xadd指令)串联起来,每个消息有一个ID Consumer Group:消费组,同一个消息可以被组内成员消费,但只
阅读全文
摘要:1. BitMap(Redis2.2版本之后) 内部编码为二进制字符串 1. 命令:setbit key offset value offset 必须是数字代表坐标,从0开始计数;value只能为0或1 底层初始化一个全为0的字符串(默认32位),根据offset的将对应位置的值更改为value,用
阅读全文
摘要:Redis的事务是指将多个命令请求打包,一次性地,按顺序执行的机制。通过MULTI、EXEC、WATCH等命令实现事务功能。 19.1 事务的实现 19.1.1 事务的开始 MULTI命令的执行代表了一个事务的开始,会将执行该命令的客户端由非事务状态切换成事务状态(在客户端状态的flags属性中打开
阅读全文
摘要:通过SUBSCRIBE命令,客户端可以订阅一个或多个频道,每当有其他客户端向被订阅的频道发送消息,频道的订阅者都会收到消息 通过PSUBSCRIBE命令,客户端可以订阅一个或多个模式,每当有其他客户端向被订阅的频道发送消息,与该频道相匹配的模式订阅者也会收到 18.1 频道的订阅和退订 redisS
阅读全文
摘要:Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能 17.1 节点 一个Redis集群通常由多个节点(node,一个Redis服务器)组成。刚开始每个节点都是一个集群,需要手动指定将其他节点添加到当前集群。 CLUSTER ME
阅读全文
摘要:由一个或多个Sentinel实例组成的Sentinel系统,监测任意多主从服务器,一旦某个主服务器下线并超过等待时间,会将其下的某个从服务器上升为主服务器,对其余从服务器发送复制命令,将它们归属到新的主服务器下的从服务器,并且会继续监视下线的服务器,等其重新上线后,将其设置为新主服务器下的从服务器。
阅读全文

浙公网安备 33010602011771号