摘要:
引言 缓存与数据库的一致性即更新数据库中的记录后,缓存的数据也可要同步更新,不然会读到脏数据。事实上我们是无法保证缓存与数据库中的强一致性的,一定会有延迟,我们只能保证其最终一致性。 首先要明确的是,我们不更新缓存的数据,而是删除缓存,然后由下个请求去去缓存,发现不存在后再读取数据库,写入缓存。因为 阅读全文
摘要:
引言 ACID是事务的特点也是必须的要求,只有保证ACID事务的执行才不会出错,分别是原子性、一致性、隔离性和持久性。我们知道典型的MySQL事务是这样执行的: start transaction 开启事务 commit 提交事务 rollback 回滚事务 注意两个默认机制: 如果没有显示开启事务 阅读全文
摘要:
InnoDB存储引擎的最小储存单元是 页(Page) ,一个页的大小是默认是 16K 。磁盘存储数据最小单元是 扇区 ,一个扇区的大小是 512字节 , 而文件系统(例如XFS/EXT4)它的最小单元是 块 ,一个块的大小是 4k 。 因此InnoDB的所有数据文件(后缀为 .ibd 的文件),它的 阅读全文
摘要:
引言 我们之前操作 Redis 都是单机版,但是实际应用中没人使用单机版,都是搭建集群的方式。这篇文章要介绍的主从复制,是指将一台 Redis 服务器的数据,复制到其他 Redis 服务器,我们将前者称为主节点 master,将后者称为从节点 slave(replica)。在这个过程中,数据的复制是 阅读全文
摘要:
本文章主要讨论和回答一下几个问题: equals()的四大特性 equals()和hashcode()之间的关系,为什么我们经常说这两个方法要么都重写,要么都不重写? HashMap、HashSet等容器为什么要求一定要重写equals()以及hashcode() equals() equals和h 阅读全文
摘要:
死信队列 引言 死信队列,英文缩写:DLX 。Dead Letter Exchange(死信交换机),其实应该叫做死信交换机才更恰当。 当消息成为Dead message后,可以被重新发送到另一个交换机,这个交换机就是DLX。 总结:其实死信队列就是一个普通的交换机,有些队列的消息成为死信后,(比如 阅读全文
摘要:
消费端限流 在并发量高的情况下,如秒杀、抢票等场景,如果不对 RabbitMQ 推送信息给消费者的速度进行限流的话,很容易打崩系统 RabbitMQ 的限流机制: 必要条件:消费端 ack 机制为手动签到 如果限流数为1,表示消费端每次只能从mq拉去一条消息来消费,直到手动确认消费完毕后,才会继续拉 阅读全文
摘要:
引言 RabbitMQ的模型是生产者发送信息到 Broker (代理),消费者从 Broker 中取出信息。但是生产者怎么知道消息是否真的发送到 Broker 中了呢?Broker 又怎么知道消息到底有没有被消费者消费? 如果由于网络原因出现故障,生产者生产的消息未到达 Broker 或者 Brok 阅读全文
摘要:
前言 RabbitMQ是基于AMQP协议的,要想深入理解RabbitMQ,就必须先了解AMQP是个什么东东? AMQP协议 AMQP即Advanced Message Queuing Protocol,高级消息队列协议,是面向消息中间件设计的应用层协议的一个开放标准。 AMQP是一个应用层协议,可以 阅读全文
摘要:
Redis 是一个内存数据库,为了保证数据不丢失,必须把数据保存到磁盘,这就叫做持久化。 Redis 有两种持久化方法: RDB 方式以及 AOF 方式 RDB 持久化 前言 RDB持久化把内存中的数据持久化到硬盘,生成RDB文件,也就是“快照”。通过RDB文件可以重新恢复内存中的数据。RDB文件是 阅读全文