数据库与缓存同步方案设计

举报
架构师聊技术 发表于 2021/12/20 09:51:18 2021/12/20
【摘要】 目前大部分动态数据都是从数据库读取,虽然redis已经部署在各个环境,但并没有充分利用,可以把数据库中的部分数据同步到Redis中,使用的时候,直接从redis中获取,由于redis是内存数据库,读取速度会比从数据库读取高,同时也给数据库分压,让数据库专心做数据的存储需求。喜欢的朋友记得给关注~

序号

时间

备注

1

2021/12/20

1.0

2



一、目前现状

* 目前的redis只用在了token令牌的场景

* 目前业务数据存储及读取流程图

数据库与缓存同步方案设计


二、现状改进

* 除目前token使用redis外,组织架构、字典数据、列表类型数据、枚举类型、及常用不常变、使用频率较高数据都可以考虑放在Redis中,提高redis的使用率

* 改进后数据存储及读取流程图

数据库与缓存同步方案设计

三、数据库与Redis数据同步

* 数据库与Redis的数据同步常见的方式

* 在变更数据的时候,修改数据库的同时修改redis数据,通过代码实现

* 通过事件机制,写入数据库的同时发送一个事件到mq,然后消费该消息把对应的数据更新到缓存,通过代码实现

* 通过监控binlog变更缓存,通过中间件实现

* 以上几种方式都可以实现mysql数据库与redis的数据同步,但实现方式不同,有的需要在业务中写代码,有的是通过中间件实现,这里建议采用中间件方式实现,业务主要负责使用就可以。

数据库与缓存同步方案设计

四、实施

* 通过实施经验,如果数据库没有做主从或者主备部署,哪只能通过监听主数据库的binlog,如果部署则直接监听备或者从数据库更佳

* 同步组件使用bifrost实现,已经在客户实施过,可以满足要求,目前没有发现问题

* 主要操作步骤

* 打开binlog功能

* 在mysql中创建用于同步的账号,并赋予复制权限

create user mysqltoredis@'%' identified by 'sge@123#';
grant replication slave,replication client on *.* to mysqltoredis@'%';


* 在中间件中设置同步账号及同步的redis账号、同步的数据源

* 开启全量同步(初始时使用)及增量同步

* 观察确认该功能是否正常,确认没有问题,则整个同步过程完成

* 业务代码中即可以通过redis获取数据及确认确认数据是否正常

* 以上步骤全部完成,则表明数据库与缓存数据同步全过程全部完整

喜欢的朋友记得给关注~

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。