目前大部分动态数据都是从数据库读取,虽然redis已经部署在各个环境,但并没有充分利用,可以把数据库中的部分数据同步到Redis中,使用的时候,直接从redis中获取,由于redis是内存数据库,读取速度会比从数据库读取高,同时也给数据库分压,让数据库专心做数据的存储需求。喜欢的朋友记得给关注~

序号

时间

备注

1

2021/12/21

1.0

2



一、目前现状

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

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

#yyds干货盘点#数据库与缓存同步方案设计_数据库

二、现状改进

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

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

#yyds干货盘点#数据库与缓存同步方案设计_redis_02

三、数据库与Redis数据同步

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

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

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

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

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

#yyds干货盘点#数据库与缓存同步方案设计_数据库_03

四、实施

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

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

* 主要操作步骤

* 打开binlog功能

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

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


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

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

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

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

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

喜欢的朋友记得给关注~