【踩过的坑】1.生产与灰度数据缓存;2.Mysql主从不同步;
来源:互联网 发布:知美整形是正规医院吗? 编辑:程序博客网 时间:2024/06/05 10:55
背景:php做web开发,MVC,phalcon
1.生产与灰度数据缓存
- 原因:
1. service层获取数据,有新增数据字段;
2. controller层是通过redisCache调用service接口;
3. redisCache采用redis-file双缓存结构,可能存在情况:redis-cache有效;file-cache有效;直接本地调用service,再写进redis和file-cache中;
4. 线上有个脚本会每隔1秒通过redisCache调用一次此service接口,并且强制刷新缓存(redis-file);
5. 灰度环境和生产环境用的是同一套redis,而且必须这样;
所以,这就造成线上的脚本不断的从线上的service中取得数据,并刷新的redis-file缓存中,从而造成灰度环境直接读了线上缓存,导致灰度代码的service变更没有生效 - 尝试解决:
1. 灰度代码:问题controller调用redisCache接口,有强制刷新参数,将其置为false;
存在问题:这样是恨不正确的做法,会把灰度的service数据强制刷新到redis-file缓存中,从而导致线上缓存出现脏数据,这样后果很严重!!
2. 灰度代码:问题controller中,直接调用本地的service,不走缓存;
存在问题:导致灰度环境的所有(此controller)请求直接打在mysql上,从而增加了mysql本身的风险。
(方法1、2,如图)
总结:因为灰度环境在公司内网,访问量较小,相比方法1,方法2可以暂时解决灰度测试时的缓存问题。但是仍然存在风险。
(各位看官,有木有更好的解决方案?)
2.Mysql主从不同步
- 原因:
1. 环境:php+mysql+phalcon,生产环境,mysql存在主从;
2. 通过接口传入A、B两组数据并在一个事务中分别插入到A-table、B-table中,提交事务,再更新A刚插入的一个字段;
3. 更新通过phalcon的findFrist找到数据 刚才插入的数据,更新字段,调用save;
// 示例代码 ATable,BTable都是继承phalcon的model $a = array('id' => 1, 'testa' => 'data'); $b = array('id' => 1, 'testb' => 'data'); // 插入数据 $db->startTrascation(); $a_obj = new ATable(); $a_obj->id = $a['id']; $a_obj->testa = $a['testa']; $a_obj->save(); $b_obj = new BTable(); $b_obj->id = $b['id']; $b_obj->testb = $b['testb']; $b_obj->save(); $db->commit(); // 更新数据,findFirst $update_a_obj = ATable::findFirst(array('id=:a_id:', 'bind' => array('id' => $a['id']))); $update_a_obj->testa = 'new_data'; $update_a_obj->save(); // 这里就会出错,因为这里findFirst走了从库 // -----------------说明---------------------- // findFirst走从库是项目本身在model层做的初始化 public function initialize() { parent::initialize(); $this->setReadConnectionService('db_r'); $this->setWriteConnectionService('db'); } // setReadConnectionService由phalcon底层提供
可参考phalcon-model源码
总结:1. 永远不要认为主从同步;2.同一个mysql连接,不要出现既用主库、又用从库;
另外,这个更新其实是没必要的,因为代码后边有这样的更新;这次问题再次说明,一定要多沟通,多看代码!!
1 0
- 【踩过的坑】1.生产与灰度数据缓存;2.Mysql主从不同步;
- mysql主从数据不同步
- mysql主从不同步、数据不一致解决办法
- mysql主从库不同步的解决方法
- 解决mysql主从不同步
- MySql主从不同步,解决方法
- MySql主从不同步,解决方法
- Mysql主从不同步问题解决
- Mysql互为主从问题--日志同步数据不同步
- MySql主从配置文件问题详解(数据不同步解决方案)
- mysql主从同步配置与不同步问题整理
- 解决Mysql主从不同步问题
- mysql主从复制不同步问题
- 解决Mysql主从不同步问题
- MYSQL主从不同步延迟原理
- Mysql主从节点不同步解决方法
- mysql主从数据库不同步的2种解决方法
- mysql主从数据库不同步的2种解决方法
- C#读写txt文件的两种方法介绍
- 第2周项目1-C/C++语言中函数参数传递的三种方式
- Android根据文字长度自动调整字号的TextView
- git使用
- 学习笔记-《零基础学习HTML5—html+css基础 》4.CSS基础样式(上)
- 【踩过的坑】1.生产与灰度数据缓存;2.Mysql主从不同步;
- 《拼图游戏》技术总结“六”
- GIT 学习
- 程序设计入门—Java语言 . 翁恺-第四周编程作业-1.素数和
- git提交到github
- MYSQL的索引类型有什么区别?各适用于什么场合?——摘自baidu
- linux开启FTP和SFTP服务
- CSS之BFC详解
- 虚拟内存 地址空间