返回信息流今日开始接触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的吧,?
这是一条镜像帖。来源:北邮人论坛 / www-technology / #25182同步于 2014/4/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖
有关php+mysql中采用memcached
youziboy
2014/4/23镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
用过python+memcached,第二个问题是,你操作数据库后要重新更新一下相关的memcached的内容,我记得memcached里面有一个函数是,只要某一个表有变化,自动更新;第4个问题我觉得如果你的memcached的server挂了,if语句会自动判否,执行else的内容,所以不会影响业务;其他问题不太清楚,同求大神回复~
如果刚开始没有预测到网站访问量大,即没有想到使用memcahced,后来发现需要要使用了。再封装,这个change会比较大吧。
【 在 idnull 的大作中提到: 】
: mysql和memche操作封一层吧,这么裸着用舒服吗?
: 另外可以查一致性哈希
【 在 youziboy 的大作中提到: 】
: 如果刚开始没有预测到网站访问量大,即没有想到使用memcahced,后来发现需要要使用了。再封装,这个change会比较大吧。
不大。封装的好的话,cache功能应该封装在mysql CURD接口中,这样不管用不用cache,用redis还是memcache,都好切换。
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可以解决。
【 在 huzzar 的大作中提到: 】
: 用过python+memcached,第二个问题是,你操作数据库后要重新更新一下相关的memcached的内容,我记得memcached里面有一个函数是,只要某一个表有变化,自动更新;第4个问题我觉得如果你的memcached的server挂了,if语句会自动判否,执行else的内容,所以不会影响业务;其他问题不太清楚,同求大神回复~
确定有函数可以自动更新?
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 的大作中提到: 】
:
: 确定有函数可以自动更新?
赞
【 在 huzzar (我也加入【意涵团】) 的大作中提到: 】
: php的我不清楚,在Django下,model里面配置:
: post_save.connect(cache_update, sender = 数据库的表)
: 在caching这个app里定义:
: ...................
通过『我邮2.0』发布