随笔分类 - redis
摘要:一、是否使用过Redis集群,集群的原理是什么 ? Redis Sentinal着眼于高可用,在master宕机时会自动将slave提升为master,继续提供服务 哨兵解决了高可用的问题,而 Redis Cluster集群就是终极方案,一举解决高可用和分布式问题 数据分区: 是集群最核心的功能。集
阅读全文
摘要:一、原子性在并发编程中,和在数据库中两种不同的概念 在数据库中,事务的 ACID中原子性指的是 "要么都执行要么都回滚" 在并发编程中,原子性指的是 "操作不可拆分、不被中断" Redis既是一个数据库,又是一个支持并发编程的系统,所以,他的原子性有两种。所以,我们需要明确清楚,在问 "Lua脚本保
阅读全文
摘要:一、基础概念 Redis中,事务和 Lua 都是保证原子性的手段, 当我们有多个命令要执行,希望他们以原子性方式执行的时候,就会考虑使用事务 或 者Lua脚本,那么他们之间有哪些区别呢 ? 二、原子性保证 事务 和 Lua都是可以保证原子性操作的,但是,这里说的原子性我们提过很多次,指的是不可拆分,
阅读全文
摘要:一、基础概念 Redis中是支持事务的,它的事务主要目的是保证多个命令执行的原子性,使其在一个原子操作中执行,不会被打断 需要注意的是,Redis的事务是不支持回滚的。从 Redis 2.6.5 开始,服务器将会在累积命令的过程中检测到错误。然后,在执行 exec期间 会拒绝执行事务,并返回一个错误
阅读全文
摘要:一、定义 Redis 的 Pipeline 机制是一种用于优化网络延迟的技术,主要用于在单个请求/响应周期内执行多个命令。在没有 Pipeline 的情况下,每执行一个 Redis 命令,客户端都需要等待服务器响应之后才能发送下一个命令。 这种往返通信尤其在网络延迟较高的环境中会显著影响性能 在 P
阅读全文
摘要:一、Redis集群的脑裂定义 Redis集群的脑裂问题,是指在集群的主从节点中,同时存在 2 个主节点能够同时对客户端提供读写服务,而导致数据丢失 或者 不一致的问题 二、Redis的脑裂分类 哨兵(sentinel)模式下的脑裂 集群(cluster)模式下的脑裂 三、哨兵(sentinel)模式
阅读全文
摘要:一、基础概念 主从复制存在一个问题,没法完成自动故障转移。所以我们需要一个方案来完成自动故障转移,它就是Redis Sentinel(哨兵) Redis Sentinel ,它由两部分组成,哨兵节点 和 数据节点 : 哨兵节点: 哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的 Redis 节点,
阅读全文
摘要:一、Redis主从复制的工作流程大概可以分为如下几步: 1、保存主节点(master)信息: 这一步只是保存主节点信息,保存主节点的 ip 和 port 2、主从建立连接: 从节点(slave)发现新的主节点后,会尝试和主节点建立网络连接 3、发送ping命令: 连接建立成功后从节点发送ping请求
阅读全文
摘要:一、基础概念 RDB和AOF都有各自的缺点: 1、RDB是每隔一段时间持久化一次, 故障时就会丢失宕机时刻与上一次持久化之间的数据,无法保证数据完整性 2、AOF存储的是指令序列, 恢复重放时要花费很长时间并且文件更大 Redis 4.0 提供了更好的混合持久化选项: 创建出一个同时包含 RDB 数
阅读全文
摘要:一、基础概念 当Redis发生了故障,可以从RDB或者AOF中恢复数据 恢复的过程也很简单,把RDB或者AOF文件拷贝到Redis的数据目录下,如果使用AOF恢复,配置文件开启AOF,然后启动redis-server即可 Redis的数据恢复优先级 1、如果只配置 AOF ,重启时加载 AOF 文件
阅读全文
摘要:一、基础概念 AOF(append only file)持久化:以独立日志的方式记录每次写命令, 重启时再重新执行AOF文件中的命令达到恢 复数据的目的。AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式。 AOF的工作流程操作:命令写入 (append)、文件同步(s
阅读全文
摘要:一、RDB持久化功能 RDB持久化功能可以将Redis中所有数据生成快照并以二进行文件的形式保存到硬盘里,文件名为.RDB文件 在Redis启动时载入RDB文件,Redis读取RDB文件内容,还原服务器原有的数据库数据 过程如下图所示: Redis服务端创建RDB文件,有三种方式 使用save命令手
阅读全文
摘要:Redis 的高性能网络模型核心依赖于 文件描述符(fd) 和 epoll 的协同工作。下面我将从底层机制到实际应用,详细解析它们的配合方式: 一、核心组件关系图 二、fd 在 Redis 中的具体应用 1、fd 的三种关键类型 2、fd 的创建与管理代码 三、epoll 的工作机制 1、epoll
阅读全文
摘要:LRU算法 package com.redis; import java.util.HashMap; import java.util.Map; /** * LRU缓存实现 * 使用哈希表+双向链表实现O(1)时间复杂度的get和put操作 */ public class LRUCache { //
阅读全文
摘要:简介、我们先来看如下几个问题: ①、如何设置Redis键的过期时间 ? ②、设置完一个键的过期时间后,到了这个时间,这个键还能获取到么?假如获取不到那这个键还占据着内存吗 ? ③、如何设置Redis的内存大小?当内存满了之后,Redis有哪些内存淘汰策略?我们又该如何选择 ? 一、设置Redis键过
阅读全文
摘要:一、CAP理论 CAP理论是分布式系统设计中的一个重要原则,它指出对于一个分布式系统,不可能同时满足以下三个特性: 一致性(Consistency):所有节点在同一时刻看到的数据是一致的。 可用性(Availability):每一个请求必须得到响应,哪怕返回的是旧数据 分区容忍性(Partition
阅读全文
摘要:一、缓存击穿 定义:大量的请求同时查询一个热点key时,此时这个key正好失效,就会导致大量的请求打到数据库上 特征: 针对单个热点key 缓存刚好过期时发生 并发请求量大 方案一、互斥锁 加锁更新,比如请求查询A,发现缓存中没有,对A这个key加锁,同时去数据库查询数据,写入缓存,再返回给用户,这
阅读全文
摘要:一、epoll多路复用 这里重点要说的就是redis的IO编程模型,首先了解下 为什么要有多路复用呢 ? 案例 引用知乎上一个高赞的回答来解释什么是I/O多路复用。假设你是一个老师,让30个学生解答一道题目,然后检查学生做的是否正确,你有下面几个选择: 第一种选择:按顺序逐个检查,先检查A,然后是B
阅读全文
摘要:1、Redis 持久化——混合持久化 RDB 和 AOF 持久化各有利弊,RDB 可能会导致一定时间内的数据丢失,而 AOF 由于文件较大则会影响 Redis 的启动速度,为了能同时使用 RDB 和 AOF 各种的 优点,Redis 4.0 之后新增了混合持久化的方式 在开启混合持久化的情况下,AO
阅读全文
摘要:一、quicklist 在 Redis 3.0 之前,List 对象的底层数据结构是双向链表或者压缩列表。然后在 Redis 3.2 的时候,List 对象的底层改由 quicklist 数据结构实现。 其实 quicklist 就是「双向链表 + 压缩列表」组合,因为一个 quicklist 就是
阅读全文