缓存穿透、击穿、雪崩 缓存穿透123key对应的数据在数据源中并不存在,每次针对此key的请求从缓存中获取不到,请求都会压到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。 解决方案12341.对空值缓存2.设置白名单3.采用布隆过滤器4.进行实时监控 缓存击穿1key对应的数据存在,但在redis中过期,此时又有大量的并发请求 2022-01-24 Redis原理
分布式锁的实现 满足的条件互斥性1任意时刻,只有一个客户端持有锁 不会发生死锁1即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。 解铃还须系铃人1加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。 原子性1加锁和解锁必须具有原子性 步骤一、多个客户端申请获取锁1即执行多个setnx语句 二、获取成功1即执行setnx语句成功后的客户端,其他客户端等待重试 2022-01-24 Redis原理
持久化机制 持久化Redis是基于内存运行的,将redis数据写入到硬盘这一过程就叫持久化 RDB全称Redis Database 在指定的时间间隔内将某一时刻的内存快照(Snapshot),以二进制的方式写入磁盘 触发 持久化流程Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到 一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。 整个过程中,主进程是不进行 2022-01-24 Redis原理
布隆过滤器 位图位图中的每一个槽只占1 bit的内存,所以即便面对10亿数据也只占用119多M的内存 适用场景1在面临大数据的情况下,判断一个数是否存在 原理12将判断的值分多个hash函数进行计算,如果其中有一个hash函数的值不等于1,则可以判定这个数不存在;反之大概率存在 优点 占用内存小 增加和查询的时间复杂度为:O(K),K为哈希函数的个数 哈希函数相互之间没有关系,方便硬件并行运算 2022-01-24 Redis原理
MySQL原理 一、概论使用索引查找数据性能很快,避免了全表扫描时的多次磁盘IO。 但是,使用索引实际上也需要在索引中查找数据,而且数据量和表中的是一样的 那为什么索引就能快呢? 这就跟索引使用了哪些数据结构有关 而索引是帮助Mysql高效获取数据的 排好序 的 数据结构 二、索引分类主键索引主键自带索引效果,也就意味着通过主键来查询表中的记录,性能是非常好的 普通索引为普通的列创建索引 1234# 格式crea 2022-01-24 MySQL
RabbitMQ学习 MQ(Message Queue)是什么?作用实现系统间的解耦 原理通过利用高效的消息传递机制进行平台无关的数据交流,并基于数据通信进行分布式系统的集成 模型 生成者:不断向消息队列中生产消息 消费者:不断向队列中获取消息 消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,轻松地实现系统间解耦 1因此跨系统通讯时,首选消息队列 消息中间件如何实现,就用到了消息中间件 2022-01-24 RabbitMQ
线程的创建 12本文参考了码友 Nyima 的学习笔记https://nyimac.gitee.io/2020/06/08/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/ 2022-01-24 Java 并发编程
RabbitMQ死信队列、延时队列 死信队列DLX 全称Dead-Letter-Exchange,称之为死信交换器, 当消息变成一个死信之后,如果这个消息所在的队列存在x-dead-letter-exchange参数, 那么它会被发送到x-dead-letter-exchange对应值的交换器上,这个交换器就称之为死信交换器, 与这个死信交换器绑定的队列就是死信队列。 如下情况会被加入到死信队列中 消息被消费方拒绝,使用 chan 2022-01-24 RabbitMQ
RabbitMQ消息事务与确认机制 1参考文章:https://www.jianshu.com/p/63ed636c773d 事务机制基于 AMQP 实现了事务机制,类似于MySQL的事务 RabbitMQ提供了三个方法对消息发送进行事务管理: txSelect():用于将通道 Channel 开启事务模式,服务端会返回Tx.Select-OK txCommit():用于提交事务 txRollback():用于回滚事务 使用格 2022-01-24 RabbitMQ
并发与并行 概念并发是一个CPU在不同的时间去不同线程中执行指令。 并行是多个CPU同时处理不同的线程。 引用 Rob Pike 的一段描述: 并发(concurrent)是同一时间应对(dealing with)多件事情的能力 并行(parallel)是同一时间动手做(doing)多件事情的能力 应用异步调用以调用方角度来讲,如果 需要等待结果返回,才能继续运行就是同步 不需要等待结果返回,就能继续运 2022-01-24 操作系统