03 2023 档案
摘要:ACID 是一种数据库事务的基本属性: 原子性(Atomicity):所有的操作要么全部完成,要么全部不完成,不会出现中间状态。 一致性(Consistency):在事务执行之前和之后,数据库系统中的所有数据必须保持一致状态。 隔离性(Isolation):对于系统中的任何两个事务,其执行顺序不会影
阅读全文
摘要:计数器算法(Fixed Window) 首先维护一个计数器,将单位时间段当做一个窗口,计数器记录这个窗口接收请求的次数。 当次数少于限流阀值,就允许访问,并且计数器+1 当次数大于限流阀值,就拒绝访问。 当前的时间窗口过去之后,计数器清零。 假设单位时间是1秒,限流阀值为3。在单位时间1秒内,每来一
阅读全文
摘要:静态代理和动态代理 AOP 代理则可分为静态代理和动态代理两大类,其中静态代理是指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强;而动态代理则在运行时借助于 JDK 动态代理、CGLIB 等在内存中“临时”生成 AOP 动态代理类,因此也被称为运行
阅读全文
摘要:一、静态代理代理模式可以在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强。代理类和被代理类应该共同实现一个接口,或者是共同继承某个类。优点:可以在不修改目标对象的前提下扩展目标对象的功能。缺点: 冗余:由于代理对象要实现与目标对象一致的接口,会产生过多的代理类。 不易维护:一旦接
阅读全文
摘要:死锁产生的原因: 两个进程都拿着对方需要的资源(锁/表/行数据)不放,而形成相互等待。 如果不同程序会并发存取多个表/资源,尽量约定以相同的顺序访问表/资源,可以大大降低发生死锁的可能性; 注:不影响并发性能,是最经济的办法 在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率; 对
阅读全文
摘要:https://www.cnblogs.com/crazymakercircle/p/13917517.html
阅读全文
摘要:说mycat的事务支持之前,先说说XA协议,即分布式事务。指的是TM(事务管理器)和RM(资源管理器)之间的接口。整个XA协议主要基于二阶段提交的概念。这个概念很好理解,当TM接到一个全局事务请求的时候,TM会把请求告知注册在它身上的所有RM,当所有RM准备就绪后,再执行commit操作。在这个过程
阅读全文
摘要:mycat 介绍及原理 mycat是基于java语言的数据库中间件,它遵守Mysql原生协议,是一个Mysql中间代理。mycat工作原理:拦截用户发送的SQL语句,对SQL语句做一些特定的分析:分片分析,路由分析,读写分离分析,缓存分析等。然后将sql发往后端真实的数据库。 分库分表带来的一些问题
阅读全文
摘要:多线程对同一资源的竞争,需要用到锁,例如Java自带的Synchronized、ReentrantLock。但只能用于单机系统中,如果涉及到分布式环境(多机器)的资源竞争,则需要分布式锁。分布式锁的主要作用: 保证数据的正确性: 比如:秒杀的时候防止商品超卖,表单重复提交,接口幂等性。 避免重复处理
阅读全文
摘要:1. 主备模式:也就是主节点提供读写,备用节点不提供任何读写的,只用来实现当主节点宕机的情况下能顶上去。 2. 远程模式:就是我们可以把消息进行不同数据中心的复制工作,可以跨地域的让两个mq集群互联远距离通信和复制。 3. 镜像模式(Mirror),就是集群里面的每个节点都会存储Queue的数据副本
阅读全文
摘要:1.生产者消息确认 RabbitMQ提供了publisher confirm机制来避免消息发送到MQ过程中丢失。这种机制必须给每个消息指定一个唯一ID。消息发送到MQ以后,会返回一个结果给发送者,表示消息是否处理成功。 2.消息持久化 生产者确认可以确保消息投递到RabbitMQ的队列中,但是消息发
阅读全文
摘要:一、什么是幂等性 幂等性就是同一个操作执行多次,产生的效果一样。多次执行不会造成程序逻辑异常。 常见的请求有如下几种,他们的幂等性如下: select查询天然幂等; delete删除也是幂等,删除同一个数据多次其效果一样; update直接更新某个值时,幂等; update更新累加操作的的结果,非幂
阅读全文
摘要:一、消息队列的投递confirm确认机制 一些消息中间件会有消息投递确认机制,比如当RabbitMQ成功接收到消息之后会自动异步的回调生产者的一个接口返回成功与否的消息,但是我们不能依靠他们自身的机制,因为还是不能100%保证。 二、 消息落库,对消息进行状态打标 这种方式在高并发场景下是有性能瓶颈
阅读全文
摘要:1)Erlang进程间上下文切换效率远高于C语言和Java,进一步提高了RabbitMQ并发性能; 2)Erlang的网络性能有着和原生Socket一样的延迟,是的RabbitMQ的网络IO性能极高;
阅读全文
摘要:1、页缓存技术page cache Kafka 是基于操作系统 的页缓存(page cache)来实现文件写入的,我们也可以称之为 os cache,意思就是操作系统自己管理的缓存。 Kafka 在写入磁盘文件的时候,可以直接写入这个 os cache 里,也就是仅仅写入内存中,接下来由操作系统自己
阅读全文
摘要:ActiveMQ单机吞吐量:万级topic数量跟吞吐量的影响:时效性:ms级可用性:高,基于主从架构实现高可用性消息可靠性:有较低的概率丢失数据功能支持:MQ领域的功能极其完备总结:非常成熟,功能强大,在早些年业内大量的公司以及项目中都有应用偶尔会有较低概率丢失消息现在社区以及国内应用都越来越少,官
阅读全文
摘要:服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型。 (2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非J
阅读全文
摘要:常见的加密算法 目前常见的加密算法分类如下: 1,单向散列加密算法 常见算法包括:MD5、sha1、sha256等 2,对称加密算法 常见的算法有:DES、3DES、AES 3,非对称加密算法 常见算法包括:RSA、ECC 文章来源:https://blog.csdn.net/xiatiancc/a
阅读全文
摘要:1、Redis 是一款纯内存结构,避免了磁盘 I/O 等耗时操作。 2、Redis 命令处理的核心模块为单线程,减少了锁竞争,以及频繁创建线程和销毁线程的代价,减少了线程上下文切换的消耗。 3、采用了 I/O 多路复用机制,大大提升了并发效率。 文章来源: https://www.cnblogs.c
阅读全文
摘要:缓存穿透是指查询一个一定不存在的数据,由于缓存不命中,接着查询数据库也无法查询出结果,因此也不会写入到缓存中,这将会导致每个查询都会去请求数据库,造成缓存穿透; 用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的
阅读全文
摘要:什么是 BloomFilter 布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。主要用于判断一个元素是否在一个集合中。 通常我们会遇到很多要判断一个元素是否在某个集合中的业务场景,一般想到的是将集合中所有元素保存起来,然后
阅读全文
摘要:redis群集有三种模式,分别是主从同步复制、哨兵模式、Cluster① 主从复制主从复制是高可用Redis的基础,哨兵和cluster都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。 缺陷:故障恢复无法自动化,写操作无法负载均衡,存储能
阅读全文
摘要:首先,我们要明白缓存过期的目的是为了在 Key 超过 expire_time 后,从内存中删除,减少内存空间的占用。其次,要分析不同策略的定义、优点和缺点。Redis 的过期策略主要有三种实现方式: (1)定时删除: 定义:对于每一个有过期时间的 Key,创建一个定时器,到过期时间立即删除; 优点:
阅读全文
摘要:1、Redis内存不足的缓存淘汰策略提供了8种。 noeviction:当内存使用超过配置的时候会返回错误,不会驱逐任何键。 allkeys-lru:加入键的时候,如果过限,首先通过LRU算法驱逐最久没有使用的键。 volatile-lru:加入键的时候如果过限,首先从设置了过期时间的键集合中驱逐最
阅读全文
摘要:Redis 持久化: 提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。 AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AO
阅读全文
摘要:缓存基本上分为三类:本地缓存、分布式缓存、多级缓存。根据缓存和应用程序是否属于同一个进程,将缓存分为本地缓存和分布式缓存。基于本地缓存和分布式缓存都有各自的优点和缺点,后面又出现了多级缓存的概念。 1、本地缓存 本地缓存的概念: 本地缓存是指和应用程序在同一个进程内的内存空间去存储数据,数据的读写都
阅读全文