Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

针对C::t方法可能有缓存,common_member_count表数据变化了却还是老数据的解决办法

[复制链接]
还是这个味 发表于 2012-10-22 14:09:27 | 显示全部楼层 |阅读模式
武进论坛 http://bbs.wj001.com/ DZx2.5版本。
我们自定义了一种积分,叫勿忘豆。安装了一套积分兑换的插件。叫勿忘豆商城。有个问题是用户兑换商品后,官方程序都显示的还是老的勿忘豆积分。毫无变化!但是查数据库发现common_member_count表中记录是扣除了积分的,是正确的。于是查到官方显示勿忘豆积分的地方。找到类似于:$membercount = C::t('common_member_count'.$tableext)->fetch($member['uid']);的代码。发现C::t方法查出的是记录始终是旧的数据,不敢去改这个方法。于是我把类似的查询地方代码换成了DB::fetch_first这种方法。则能实时查出common_member_count表数据,修复成功。下面是修改方法:
/source/function/function_core.php
1373行:
//if(($_G[$var] = C::t('common_member_'.$tablename.$ext)->fetch($uid)) !== false) {
改成:
if(($_G[$var] = DB::fetch_first('select * from '.DB::table('common_member_'.$tablename.$ext).' where uid='.$uid)) !== false) {//awen edit

/source/admincp/admincp_members.php
1186行:
//$membercount = C::t('common_member_count'.$tableext)->fetch($member['uid']);
改成:
$membercount = DB::fetch_first('select * from '.DB::table('common_member_count'.$tableext).' where uid='.$member['uid']); //awen edit

---------------------
以上只是C::t这个方法出了问题以后的临时解决办法。根本问题希望官方优化C::t方法。怀疑是里面缓存机制有误。但是我在后台更新全站缓存以后,还是没用。碰到类似问题的朋友,可以采用我这种方法针对性的解决一下。谢谢
欢迎各位php爱好者和我做朋友,我的新浪微博@还是这个味  
http://weibo.com/awen8180 {:soso_e183:}
mark35 发表于 2012-10-23 17:05:03 | 显示全部楼层
从程序开发上说扣了豆子在更新完数据库member表之后需要同时实时更新缓存的,不然缓存的自然是旧数据
回复

使用道具 举报

m.king 发表于 2012-10-24 17:28:32 | 显示全部楼层
你使用之后后台有更新缓存吗》?
回复

使用道具 举报

 楼主| 还是这个味 发表于 2012-10-29 23:04:06 | 显示全部楼层
后台更新所有缓存都没用。所以我才那样子改的。{:soso_e182:}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-25 15:52 , Processed in 0.021042 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表