主从复制原理 全量复制 主节点通过bgsave命令fork子进程进行RDB持久化,该过程非常消耗CPU、内存(页表复制)、磁盘I/O 主节点通过网络将RDB文件发送给从节点,对主节点的带宽会带来很大的消耗 从节点清空老数据、载入新RDB文件,其过程是阻塞的,无法响应客户端命令;如果从节点执行bgrewriteaof,也会带来额外的消耗 增量复制 复制偏移量:执行复制的主从节点,分别会维护一个偏移量o 2022-03-24 数据库 > 非关系型数据库 #数据库 #非关系型数据库 #Redis
为什么Redis非常快 基于内存绝大部分请求都是纯粹的内存操作。 数据结构简单对数据操作非常简单 对数据操作非常简单避免了多线程上下文切换和竞争产生的消耗 避免了多线程上下文切换和竞争产生的消耗使用了多路I/O复用模型,非阻塞IO 底层模型使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求 2022-03-15 数据库 > 非关系型数据库 #数据库 #非关系型数据库 #Redis
九大数据结构 String 一个key对应一个value String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。 字符串value最多可以是512M 数据结构 简单动态字符串(Simple Dynamic String,缩写SDS),类似于Java的ArrayList 当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M 2022-02-03 数据库 > 非关系型数据库 #数据库 #非关系型数据库 #Redis
缓存淘汰算法和淘汰策略 常用淘汰算法FIFO First In First Out,先进先出 根据缓存被存储的时间,离当前最远的数据优先被淘汰 LRU Least Recently Used,最近最少使用。算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。 实现原理 新数据插到链表头部 每当缓存命中,则将数据移动到链表头部 当链表满时,将链表尾部的数据丢弃 2022-02-02 数据库 > 非关系型数据库 #数据库 #非关系型数据库 #Redis
缓存穿透、击穿、雪崩 缓存穿透key对应的数据在数据源中并不存在,每次针对此key的请求从缓存中获取不到,请求都会压到数据源,从而可能压垮数据源。 比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。 解决方案 对空值缓存 设置白名单 采用布隆过滤器 进行实时监控 缓存击穿key对应的数据存在,但在redis中过期,此时又有大量的并发请求,而这 2022-01-24 数据库 > 非关系型数据库 #数据库 #非关系型数据库 #Redis
分布式锁的实现 满足的条件互斥性任意时刻,只有一个客户端持有锁 不会发生死锁即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。 解铃还须系铃人加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。 原子性加锁和解锁必须具有原子性 步骤1.多个客户端申请获取锁 即执行多个setnx语句 2.获取成功 即执行setnx语句成功后的客户端,其他客户端等待重试 3.执行业务逻辑 2022-01-20 数据库 > 非关系型数据库 #数据库 #非关系型数据库 #Redis
持久化机制 持久化Redis是基于内存运行的,将redis数据写入到硬盘这一过程就叫持久化 RDB全称Redis Database 在指定的时间间隔内将某一时刻的内存快照(Snapshot),以二进制的方式写入磁盘 触发 持久化流程Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到 一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。 整个过程 2022-01-06 数据库 > 非关系型数据库 #数据库 #非关系型数据库 #Redis
布隆过滤器 位图位图中的每一个槽只占1 bit的内存,所以即便面对10亿数据也只占用119多M的内存 适用场景 在面临大数据的情况下,判断一个数是否存在 原理 将判断的值分多个hash函数进行计算,如果其中有一个hash函数的值不等于1,则可以判定这个数不存在; 反之大概率存在 优点 占用内存小 增加和查询的时间复杂度为:O(K),K为哈希函数的个数 哈希函数相互之间没有关系,方便硬件并行运算 布隆过滤器 2021-12-13 数据库 > 非关系型数据库 #数据库 #非关系型数据库 #Redis
MySQL原理 一、概论使用索引查找数据性能很快,避免了全表扫描时的多次磁盘IO。 但是,使用索引实际上也需要在索引中查找数据,而且数据量和表中的是一样的 那为什么索引就能快呢? 这就跟索引使用了哪些数据结构有关 而索引是帮助Mysql高效获取数据的 排好序 的 数据结构 二、索引分类主键索引主键自带索引效果,也就意味着通过主键来查询表中的记录,性能是非常好的 普通索引为普通的列创建索引 1234# 格式crea 2021-11-28 数据库 > 关系型数据库 #数据库 #关系型数据库 #MySQL