目前大部分动态数据都是从数据库读取,虽然redis已经部署在各个环境,但并没有充分利用,可以把数据库中的部分数据同步到Redis中,使用的时候,直接从redis中获取,由于redis是内存数据库,读取速度会比从数据库读取高,同时也给数据库分压,让数据库专心做数据的存储需求。喜欢的朋友记得给关注~
序号 | 时间 | 备注 |
1 | 2021/12/21 | 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获取数据及确认确认数据是否正常
* 以上步骤全部完成,则表明数据库与缓存数据同步全过程全部完整
喜欢的朋友记得给关注~