分布式缓存redis使用及说明

 更新时间:2025年07月22日 08:51:14   作者:躲在没风的地方  
Redis单机存在数据丢失、并发低、故障恢复差和存储容量有限问题,集群部署通过主从、哨兵和分片解决,结合RDB/AOF持久化提升数据安全与恢复能力,实现高可用和扩展性

1 redis单机(单节点)部署缺点

(1)数据丢失问题:redis是内存存储,服务重启可能会丢失数据

(2)并发能力问题:redis单节点(单机)部署在并发量不大的话,也是可以满足要求的,并发量最多几万,无法承受更高的并发。

(3)故障恢复问题:如果redis单节点故障中断,那么会影响应用的使用。

(4)存储能力问题:内存存储无法和磁盘存储做比较,不能满足海量数据的要求。

2 redis(是单线程的)集群(分布式缓存redis)

2.1 解决redis单机部署的缺点

(1)解决数据丢失问题:redis的持久化RDB和AOF

(2)解决并发能力问题:搭建redis主从集群,实现读写分离

(3)解决故障恢复问题:搭建redis哨兵,实现健康监测和自动恢复

(4)存储能力问题:搭建redis分片集群

2.2 redis的RDB和AOF持久化

1 RDB(redis database backup)

将内存中的数据都记录到磁盘中,重启后,可读RDB(快照)文件进行数据恢复。快照文件位置:默认保存在redis运行命令执行的目录下。

redis客户端命令:

redis-cli

>save命令:

执行一次RDB操作,主进程来执行RDB,会阻塞进程。

>bgsave命令:

后台启动,(fork主进程得到子进程)子进程执行RDB,避免主进程受影响。

特殊:如果redis是自己手动停止的,redis停机时会执行一次RDB

2 RDB的fork原理

Bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据,完成fork后读取内存数据并写入RDB文件。主进程执行fork时,也是阻塞的,只能用来执行fork。

fork就是复制页表(linux的进程和物理内存(内存条)之间映射的虚拟内存),Linux中进程不能直接操作物理内存(内存条) 需要在中间借助一个虚拟内存来映射操作物理内存。

fork操作的范围

不包括:子进程写新的RDB文件(替换旧的RDB文件)的过程,fork操作只会复制页表(就是进程和物理内存的映射关系表) 生成1个子进程。

思考:

  • 如果在fork完一个子进程后,子进程生成RDB文件过程中,有请求来修改(写)操作,那么会操作哪一部分?
  • 当主进程执行读操作时,访问共享内存。
  • 当主进程执行写操作时,则会拷贝一份数据,执行写操作,(只能写这个拷贝的副本数据)。后续的读请求就会访问这个副本数据。

RDB的缺点

RDB执行时间(间隔)长,2次RDB之间写入数据有丢失风险。 如果执行间隔短的话(2-3秒一次),那么太耗性能。

AOF持久化

append only file 追加文件

1 介绍

为了弥补RDB的缺点,redis处理的每一个写命令都会记录在AOF文件中(RDB是每次都重新读全部内存数据),可以看过是命令日志文件。

2 AOF文件体积大的处理方法(将AOF文件中的命令进行重写,相当于将重复命令合成一个(多个set同一个key 可合为1个最后的key操作命令))

(1)手动

redis-cli连接redis客户端,执行bgrewirterof命令,用最少的命令达到相同的效果。

(2)自动(在配置文件中添加)

redis也会在触发阈值时自动重写AOF文件,可在redis.conf文件中配置

RDB和AOF持久化的比较

对数据安全性比较高并且数据完整的话:推荐AOF持久化

宕机回复速度要求高的话:推荐RDB持久化

2.3 redis主从集群,实现读写分离(解决并发能力问题)

由于redis大多都是读多写少,所以不做成传统的集群。单节点的redis的并发能力是有上限的,要进一步提高redis的并发能力,需要搭建主从集群,实现读写分离。至少需要3个节点,一主两从,读操作找从节点进行读取,写操作找主节点进行写操作。

另外,主节点master会向两台slave/replica从节点中同步数据。可以解决高并发读(因为有多个slave节点)和高可用性(主从集群的哨兵模式)的问题,但是redis主从集群解决不了高并发写(因为只有一个master)和存储海量数据(整体的存储数据量取决于一个redis节点的master的容量,每个节点数据保持和master节点数据一致)的问题。

搭建主从集群

1 在3台机器上分别安装3个redis

编辑每个redis的redis.conf文件

# redis实例的声明ip
redis-announce-ip 所在主机的ip

2 配置主从关系

前提:3个redis实例还没有关系

(1)临时模式(使用命令配置主从,但重启redis后失效)

redis5.0之前可使用slaveof命令,redis5.0之后新增replicaof命令(和slaveof命令效果一致)

使用redis-cli 客户端连接到redis服务,执行slaveof命令

slaveof 主节点的ip  主节点的端口号

效果:在哪台redis客户端命令/配置文件中 添加上slaveof,那么这台redis就会成为指定的主节点的从节点。

(2)永久模式–修改配置文件

在redis.conf文件中添加一行配置:

slaveof 主节点的ip  主节点的端口号

在某一台redis中查看节点信息:

info replication

主从数据同步原理

建立连接时的第一次同步 是全量同步

(1)2个重要概念

  • Replication id:简称replid,是数据集的标记,id一致则说明是同一数据集。每一个master都有唯一的replid,slave会继承master节点的replid。
  • offset:偏移量,随着记录在repl_baklog中的数据增多而逐渐增大。

master节点判断某个从节点是否第一次同步:

每个redis节点都有自己replication id,每个redis从节点都有自己的replication id和相对于主节点的偏移量offset。

连接redis

bin/redis-cli
# 在bin目录下 连接
redis-cli

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • windows下使用redis requirepass认证不起作用的解决方法

    windows下使用redis requirepass认证不起作用的解决方法

    今天小编就为大家分享一篇windows下使用redis requirepass认证不起作用的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

    Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

    在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能会遇到各种连接问题,其中“客户端IP不在白名单中”是一个常见的错误,本文将从错误分析、原因排查、解决方案等详细探讨如何解决这一问题
    2025-01-01
  • Redis实现布隆过滤器的方法及原理

    Redis实现布隆过滤器的方法及原理

    布隆过滤器优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。本文将介绍布隆过滤器的原理以及Redis如何实现布隆过滤器,感兴趣的朋友跟随小编一起看看吧
    2019-12-12
  • Redis分析慢查询操作的实例教程

    Redis分析慢查询操作的实例教程

    这篇文章主要给大家介绍了关于Redis如何分析慢查询操作的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • Redis读写分离搭建的完整步骤

    Redis读写分离搭建的完整步骤

    为满足读多写少的业务场景.最大化节约用户成本.云数据库Redis版推出了读写分离规格,为用户提供透明、高可用、高性能、高灵活的读写分离服务,这篇文章主要给大家介绍了关于Redis读写分离搭建的相关资料,需要的朋友可以参考下
    2021-09-09
  • Redis的4种缓存模式分享

    Redis的4种缓存模式分享

    这篇文章主要介绍了Redis的4种缓存模式分享,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-07-07
  • redis实现分布式session的解决方案

    redis实现分布式session的解决方案

    session存放在服务器,关闭浏览器不会失效,本文主要介绍了redis实现分布式session的解决方案,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Redis内部数据结构Dict的实现方法

    Redis内部数据结构Dict的实现方法

    这篇文章主要介绍了Redis内部数据结构Dict的实现方法,本篇文章所述的dict在Redis中最主要的作用就是用于维护Redis数据库中所有Key、value映射的数据结构,需要的朋友可以参考下
    2022-05-05
  • Redis如何解决热key问题

    Redis如何解决热key问题

    这篇文章主要介绍了Redis如何解决热key问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • Redis的持久化方案详解

    Redis的持久化方案详解

    在本篇文章里小编给大家整理的是关于Redis的持久化方案详解,有兴趣的朋友们可以参考下。
    2020-03-03

最新评论