一、开发背景
在项目开发过程中中遇到了以下三个需求:
1. 多个用户同时上传数据;
2. 数据库需要支持同时读写;
3. 1分钟内存储上万条数据;
根据对Mysql的测试情况,遇到以下问题:
1. 最先遇到压力的是服务器,在写入2500-3000条数据时,服务器崩溃了;
2. 当数据库写入时,耗时太长,10000条数据,大概需要505.887s,相当于8分钟,如下:
a. 表结构:
b. 数据库Procedure:
DROP PROCEDURE IF EXISTS my_insert; CREATE PROCEDURE my_insert() BEGIN DECLARE n int DEFAULT 1; loopname:LOOP INSERT INTO car_pathinfo_driver_cpy(id, linkphone,cartype,carcolor,carnumber,drivername,pubtimes)VALUES(n+500,'18838325709','雪弗兰','白','豫A190XS','siker','3'); SET n=n+1; IF n=10000 THEN LEAVE loopname; END IF; END LOOP loopname; END; CALL my_insert();
c. 运行结果如下:
3. 不断的数据库写入导致数据库压力过大;
出现以上问题,是由于mysql是基于磁盘的IO,基于服务响应性能考虑,就需要给数据做缓存,所以决定使用Mysql+redis缓存的解决方案,将业务热数据写入Redis缓存,使得高频业务数据可以直接从内存读取,提高系统整体响应速度。
二、使用Redis+Mysql需要考虑的问题
使用redis缓存+mysql数据库存储能解决:
1. 数据读写的速度
2. 服务器的压力问题
同时,就需要考虑同步问题了,Redis和Mysql的同步问题
三、Redis+mysql同步解决方案
1.