搜索
系统检测到您的用户名不符合规范:

读写分离后如何方便地从主库读取数据

浏览:3476 发布日期:2015年04月28日 分类:求助交流 关键字: 主从分离 主库读取
为什么会有这个问题?

因为项目开启了读写分离,在写数据的时候写入了主库,写完都需要刷新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);

先这样解决了,肯定有坑,至少升级是个问题,大家有什么好的建议,欢迎赐教
最佳答案
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
ryanho
积分:554 等级:LV2
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /