因为项目开启了读写分离,在写数据的时候写入了主库,写完都需要刷新redis缓存,我刷缓存代码都封装在一个函数中会从数据库中读取数据然后写入缓存。
现在写完数据立即调用刷缓存函数会从从库中读取数据,同步时间的问题,经常导致数据不准确。
于是刷缓存的时候就想指定从主库中读取数据
现在框架好像只能是通过execute方法去执行才能走主库
而且execute方法返回的是mysql_affected_rows,不是一个result
于是就想问,有没有更简单的方法指定主库读取?
比如:在查询的时候像调用where、distinct一样去调用一个函数控制query的时候链接主库?
==========================================
暂时没想到其他办法,自己改了下框架代码,不知道将来会有什么坑,有好的方法,求指教
改动主要是增加一个master的option让这个query去连接主库
具体改动如下:
1、修改Model.class.php

这里增加了一个mater,方便Model->master()这样调用
2、修改Db.class.php
/**
* 查找记录
* @access public
* @param array $options 表达式
* @return mixed
*/
public function select($options=array()) {
$this->model = $options['model'];
$sql = $this->buildSelectSql($options);
$result = $this->query($sql,$this->parseBind(!empty($options['bind'])?$options['bind']:array()),$options['master']);
return $result;
}
query的时候把master参数传进去3、修改Mysql.class.php

只用到MySQL,其他的扩展就先不改了
最后测试调用是没问题的:
M('User')->master(true)->find(1);
先这样解决了,肯定有坑,至少升级是个问题,大家有什么好的建议,欢迎赐教
最佳答案
