摘要:
1、zookeeper原理 zookeeper基于ZAB协议实现分布式数据一致性,ZAB协议包含两种模式: 1、崩溃恢复,即leader挂掉之后选举新的leader 2、原子广播,即leader和其他节点间的数据同步 zookeeper中有三类节点: leader:可以处理事务和非事务请求,负责向f 阅读全文
摘要:
1、数据模型 zk的存储结构和标准的文件系统非常类似,每一个节点称之为ZNode,是zk的最小单元。每个ZNode上都可以保存数据以及添加子节点,形成一个层次化的树形结构。节点类型有以下几种: (1)持久节点(PERSISTENT),创建后会一直在zk服务器上,直到主动删除。 (2)持久有序节点(P 阅读全文
摘要:
1、基于数据库实现分布式锁 1.2、基于数据库表 要实现分布式锁,最简单的方式可能就是直接创建一张锁表,然后通过操作该表中的数据来实现了。当我们要锁住某个方法或资源时,我们就在该表中增加一条记录,想要释放锁的时候就删除这条记录。创建一张像这样的表 CREATE TABLE `methodLock` 阅读全文
摘要:
1、缓存雪崩 缓存雪崩就是Redis 的大量热点数据同时过期(失效),因为设置了相同的过期时间,刚好这个时候Redis请求的并发量又很大,就会导致所有的请求落到数据库。 缓存雪崩的解决方案: (1)加互斥锁或者使用队列,针对同一个key只允许一个线程到数据库查询 (2)缓存定时预先更新,避免同时失效 阅读全文
摘要:
1、Redis集群 redis集群主要有以下优势: (1)提升性能:虽然redis本身的QPS已经很高,但是在并发量非常高的情况下,性能还是会受影响,通过集群可以进一步提升服务的性能。 (2)存储扩展:redis是内存数据库,数据量较大时,需要横向扩展来增加存储量。 (3)提高服务可用性和数据安全性 阅读全文
摘要:
1、redis为什么快? 根据官方数据,redis的QPS可以达到10万左右,速度快主要有以下几点: (1)KV结构的内存数据库,时间复杂度O(1) (2)单线程,好处在于: 没有创建线程、销毁线程带来的消耗; 避免了上下文切换导致的CPU开销; 避免了线程之间的竞争问题,如加锁释放锁等。 (3)多 阅读全文
摘要:
1、发布订阅模式 1.1、列表实现消息队列的局限性 通过list 的rpush 和 lpop(或 lpush和rpop)可以实现消息队列,但是会有很多局限性: 1)消费者需要不停地调用lpop ,通信的开销很大。 2)如果生产者生产消息的速度远大于消费者消费的速度,list会占用大量的内存。 3)不 阅读全文
摘要:
1、redis特点 redis是一个key-value内存数据库,key和value的最大长度限制是512M,有以下特点: (1)性能极高,读的速度是110000次/s,写的速度是81000次/s。 (2)支持数据的持久化。 (3)支持丰富的数据类型。 (4)支持数据备份(master-slave) 阅读全文
摘要:
1、优化思路 说到数据库性能优化,一般情况下是为了让查询速度更快。一个查询的动作由很多个环节组成,每个环节都会消耗时间,要提高查询效率,就要从每一个环节入手。 2、连接——配置优化 第一个环节是客户端连接到服务端,连接可能出现什么样的性能问题呢?有可能是服务端连接数不够导致应用程序获取不到连接,比如 阅读全文