BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #25182同步于 2014/4/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

有关php+mysql中采用memcached

youziboy
2014/4/23镜像同步11 回复
今日开始接触memcached,没有这方面的项目经验,有以下疑问。 1. 对于一个PHP+mysql架构的网站,如果开始没有使用memcached缓冲技术,如果要改为使用它,修改原始代码的基本逻辑是这样的: 原始code $sql = "select *...."; $ret = mysql_query($sql); //从mysql中得到数据 ... 支持memcached的code: $sql = "select * ...." ; if($objMem->get($sql)) $ret = $objMem->get($sql); else { $ret = mysql_query($sql); //先从DB中获取,然后写入cache中 $objMem = new Memcache; /*这个中间是不是添加代码来保证每个server上的负载均衡呢*/ $objMem->connect(serverIP,port); $objMem->set($sqlKey,$ret , false, 0);//写入cached } ... 2. Memcached中如何保持数据的一致性,比如如果有update/delete/insert操作了,cache中的数据可能不是最新的了 3. Memcached客户端是不是就是php的扩展.so/.dll啊, 一般只有一个吧,因为在Web Serverer上 4. 如果有多个memcached server的话,某一个server 挂了,是不是就是只能和mysql进行直接操作了,除了性能,不会影响正常业务处理吧? 5. 根据什么策略,来将key/value写到哪个server上,采用什么算法,是的每个server上负载是均衡的。 6. 如果新增或者减少一个memcached server的话,这个又是如何实现的呢?是不需要改写code的吧,?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
youziboy机器人#1 · 2014/4/25
自己顶一个。
idnull机器人#2 · 2014/4/25
mysql和memche操作封一层吧,这么裸着用舒服吗? 另外可以查一致性哈希
huzzar机器人#3 · 2014/4/25
用过python+memcached,第二个问题是,你操作数据库后要重新更新一下相关的memcached的内容,我记得memcached里面有一个函数是,只要某一个表有变化,自动更新;第4个问题我觉得如果你的memcached的server挂了,if语句会自动判否,执行else的内容,所以不会影响业务;其他问题不太清楚,同求大神回复~
youziboy机器人#4 · 2014/4/25
如果刚开始没有预测到网站访问量大,即没有想到使用memcahced,后来发现需要要使用了。再封装,这个change会比较大吧。 【 在 idnull 的大作中提到: 】 : mysql和memche操作封一层吧,这么裸着用舒服吗? : 另外可以查一致性哈希
idnull机器人#5 · 2014/4/25
【 在 youziboy 的大作中提到: 】 : 如果刚开始没有预测到网站访问量大,即没有想到使用memcahced,后来发现需要要使用了。再封装,这个change会比较大吧。 不大。封装的好的话,cache功能应该封装在mysql CURD接口中,这样不管用不用cache,用redis还是memcache,都好切换。
aa123456机器人#6 · 2014/4/25
2.应用程序去更新 3.y 4.要做高可用,可以查查http://sourceforge.jp/projects/sfnet_repcached/ 5.负载均衡可以通过一致性hash http://zh.wikipedia.org/zh-cn/%E4%B8%80%E8%87%B4%E5%93%88%E5%B8%8C,也可以使用集群代理magent https://code.google.com/p/memagent/ 6.5可以解决。
aa123456机器人#7 · 2014/4/25
【 在 huzzar 的大作中提到: 】 : 用过python+memcached,第二个问题是,你操作数据库后要重新更新一下相关的memcached的内容,我记得memcached里面有一个函数是,只要某一个表有变化,自动更新;第4个问题我觉得如果你的memcached的server挂了,if语句会自动判否,执行else的内容,所以不会影响业务;其他问题不太清楚,同求大神回复~ 确定有函数可以自动更新?
huzzar机器人#8 · 2014/4/25
php的我不清楚,在Django下,model里面配置: post_save.connect(cache_update, sender = 数据库的表) 在caching这个app里定义: def cache_update(sender, **kwargs): item = kwargs.get('instance') cache.set(item.cache_key, item, CACHE_TIMEOUT) 就可以自动更新了~ 【 在 aa123456 的大作中提到: 】 : : 确定有函数可以自动更新?
aa123456机器人#9 · 2014/4/25
赞 【 在 huzzar (我也加入【意涵团】) 的大作中提到: 】 : php的我不清楚,在Django下,model里面配置: : post_save.connect(cache_update, sender = 数据库的表) : 在caching这个app里定义: : ................... 通过『我邮2.0』发布