当前位置: 首页 > news >正文

[实操]MySQL8 读写分离后,配合redis的方法与步骤

之前的文章已经提供相关MySQL8的主从与读写分离操作,为了在高并发场景中有更多的实际用处,于是编写该文章说明MySQL8在实现读写分离后结合Redis的方法与步骤。

以下是文中提到的中间件及其版本:

以下是更新后的表格,包含了中间件的下载地址和适用的操作系统信息:

中间件名称版本下载地址适用的操作系统
MySQL Router8.0.28MySQL Router 下载Linux, Windows, macOS
MyCAT1.6-RELEASEMyCAT GitHubLinux

一、MySQL 8 读写分离方法

1. 使用 MySQL Router
  • 安装 MySQL Router:在应用服务器上安装 MySQL Router,它作为中间件在应用程序和 MySQL 服务器之间提供透明路由。
    # 下载并安装 MySQL Router
    wget https://dev.mysql.com/get/mysql-router-8.0.28-1.el7.x86_64.rpm
    sudo rpm -ivh mysql-router-8.0.28-1.el7.x86_64.rpm
    
  • 配置 MySQL Router:创建配置文件 mysqlrouter.conf,指定主从节点信息和读写分离策略。
    [DEFAULT]
    logging_folder = /var/log/mysqlrouter
    
    [routing:bootstrap_rw_split]
    bind_address = 0.0.0.0
    bind_port = 6446
    destinations = metadata_cache://myreplica/?role=PRIMARY_AND_SECONDARY
    routing_strategy = round-robin
    protocol = classic
    
  • 启动 MySQL Router:使用以下命令启动 MySQL Router,使其开始转发请求。
    mysqlrouter --config /etc/mysqlrouter/mysqlrouter.conf --user=mysql
    
  • 连接并测试:应用程序通过 MySQL Router 的监听端口(如 6446)连接,Router 会自动将读写请求分发到相应的节点。
2. 使用 MyCAT
  • 安装 MyCAT:在 Linux 系统上安装 JDK 和 MyCAT。
    # 安装 JDK
    tar xf jdk-8u91-linux-x64.tar.gz -C /usr/local/
    export JAVA_HOME=/usr/local/jdk1.8.0_91
    export PATH=$PATH:$JAVA_HOME/bin
    
    # 安装 MyCAT
    tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
    export MYCAT_HOME=/usr/local/mycat
    
  • 配置 MyCAT:编辑 schema.xml 文件,定义虚拟数据库和数据节点,指定主从节点的连接信息和读写分离策略。
    <schema name="game" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn01">
    </schema>
    <dataNode name="dn01" dataHost="dh01" database="game" />
    <dataHost name="dh01" maxCon="1000" minCon="10" balance="1"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="192.168.140.10:3306" user="mycatuser" password="WWW.1.com">
        </writeHost>
        <writeHost host="hostS1" url="192.168.140.11:3306" user="mycatuser" password="WWW.1.com" />
    </dataHost>
    
  • 启动 MyCAT 并测试:启动 MyCAT 服务,应用程序通过 MyCAT 的监听端口连接,MyCAT 会根据配置实现读写分离。

二、MySQL 8 读写分离配合 Redis 使用

1. 利用 Redis 缓存热点数据
  • 配置主从复制:确保 MySQL 主从复制正常工作,数据同步到从节点。
  • 在应用程序中实现读写分离:将写操作发送到主节点,读操作发送到从节点。
  • 配置 Redis 缓存:在应用程序中,对于频繁读取的热点数据,先查询 Redis。如果 Redis 中存在数据,则直接返回;如果不存在,则从 MySQL 从节点查询数据并缓存到 Redis 中。
    # 示例代码
    def get_data(key):
        # 从 Redis 获取数据
        data = redis.get(key)
        if data is not None:
            return data
        # 如果 Redis 中没有数据,从 MySQL 从节点查询
        data = mysql_slave.query(key)
        # 将数据缓存到 Redis
        redis.set(key, data)
        return data
    
  • 更新数据时同步更新 Redis:在写操作时,除了更新 MySQL 主节点数据,还需删除或更新 Redis 中对应的缓存数据,确保数据一致性。
2. 使用 Redis 作为读取层
  • 配置数据同步:使用 MySQL 的二进制日志或触发器,将数据变更同步到 Redis 中。可以利用消息队列(如 Kafka、RabbitMQ)来消费 MySQL 的 binlog,然后更新 Redis。
    # 示例代码,消费 MySQL binlog 并更新 Redis
    def consume_binlog():
        for binlog_event in binlog_stream:
            if isinstance(binlog_event, UpdateRowsEvent):
                for row in binlog_event.rows:
                    key = row['values']['key']
                    value = row['values']['value']
                    redis.set(key, value)
    
  • 在应用程序中读取 Redis:应用程序的读操作直接从 Redis 中获取数据,减少对 MySQL 从节点的读取压力,提高读取性能。

通过以上方法,可以有效地实现 MySQL8 的读写分离,并结合 Redis 提高系统的性能和可扩展性。在实际应用中,需要根据具体的业务需求和系统架构,合理选择和配置读写分离方案以及 Redis 缓存策略。
如有疏漏或者更好的补充,欢迎各位看官随时沟通或留言。
email:code_captain@163.com

相关文章:

  • 水星(MERCURY)监控初始化的恢复和转码方法
  • 【C语言】多进程/多线程
  • DeepSeek-R1 现已作为全托管无服务器模型在 Amazon Bedrock上线。
  • 反向 SSH 隧道技术实现内网穿透
  • 数据库误更新操作 如何回滚
  • VMware安装ubuntu22.04.5 server
  • Java并发编程面试汇总
  • Python学习第二十三天
  • 全面了解 Cookies、Session 和 Token
  • 【Java语言】学习笔记-08面向对象【中级】包、访问修饰符、封装、继承、多态、Super、Override(重写)、Object、断点调试等细节详解(上)
  • 6.1、认证技术基础与原理
  • [unity 点击事件] 区域响应点击事件,排除子节点区域,Raycast Target 应用
  • 埋点数据采集方案
  • 14、Python 枚举与类型注解进阶
  • 蓝桥云客 数字接龙
  • JAVA 单调栈习题解析
  • 入剖析 Android Compose 框架的关键帧动画(keyframes、Animatable)(二十三)
  • 蓝耘云平台免费 Token 获取攻略:让创作成本直线下降 - 极致优化版
  • Maven 构建配置文件
  • 工作效率upup
  • 新加坡国会选举投票抽样结果公布,执政党已获超半数议席
  • 南京大屠杀幸存者刘贵祥去世,享年95岁
  • 谢震业领衔挑战世界顶尖高手,这场长三角田径钻石赛值得期待
  • 摩天大楼天津117大厦复工背后:停工近十年,未知挑战和压力仍在
  • AI世界的年轻人,如何作答未来
  • 五部门:开展新就业形态劳动者劳动权益保障水平提升专项行动