redis数据落地

流程:

    1.设计并创建数据库;

    2.编写操作数据库接口;

    3.修改业务数据存储逻辑,按照先写入mysql再写reids的方式;拉取时如果在reids中找不到数据,就查找mysql;

    4.迁移数据;

    5.测试


注意事项:

    1.在按照每一个redis-key对应一个mysql-table的原则下,需要有一个能够将所有数据归入一个database的聚合根,即分库分表的key;

    2.关联表需要设置联合索引,确保数据唯一性;

    3.在编写数据迁移脚本的时候需要考虑到脏数据的情况,做容错处理;

    4.由于数据量过大,按照百库百表来计算,至少会包含10w张table,所以需要尽可能的精简插入语句,我的做法的是事先遍历redis-key,按照database=>table=>query的方式构造一个php数组,原则上每一张表就只有一条插入语句,然后遍历数组进行插入操作;

    5.在mysql配置中,一次性插入量最大为16M,批量插入时,会遇到一次性插入量大于16M,这时候需要修改mysql配置,修改方法如下:
        (1)连接mysql,执行set global max_allowed_packet = 500*1024*1024;(设置最大插入量为500M);
        (2)重启mysql,执行show VARIABLES like '%max_allowed_packet%';查看是否修改成功;

    6.在编写数据迁移脚本的时候需要进行对数据中转义符的处理;

    7.发布服务时,需要先发布服务,然后再导入数据,在导入数据时,可能会遇到同时在redis和mysql中写入数据,导致数据重复,因此在数据迁移脚本中,需要考虑使用replace而不是insert;

    8.将业务数据插入数据库时,需要考虑到转义符的问题,例如"query << "这是'一条插入语句" << endl;"插入数据库会报错,因为包含单引好,另外,插入语句中包含的"\"会被转义吞掉,所以需要在插入语句之前进行转义,mysqlpp中有一个mysqlpp::escape方法,例如:
            query << mysqlpp::escape << "这是'一条插入语句" << endl;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值