数据库与缓存同步方案设计
【摘要】 目前大部分动态数据都是从数据库读取,虽然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)