首页 新闻 会员 周边

关于memcached的一点问题。

0
悬赏园豆:10 [已解决问题] 解决于 2013-09-05 10:11

最近研究了一下memcache。打算在项目中进行应用,是一个B/s项目,有些问题不知道理解的对不对。大家给看看。

项目是个B/s项目,缓存服务器有多台,是不是直接在Global.asax中设置好服务器连接,然后再其他页面里面直接使用set和get方法就可以了?然后由memcache服务来自动判断需要在哪个服务器来缓存或者读取数据,这样理解对不对。

 

如果其中一台服务器挂掉了,如果再次set的时候,是不是会自动再找一个服务器进行缓存和读取呢?如果挂掉的服务器恢复了。再次set的时候,会找到新的还是也会更新旧的那个缓存信息?

问题补充:

追问一下,有没有办法批量删除KEy。我在网上查了一下,好像没有办法模糊查询key然后进行删除的。

我的设计是按照编码将产品页面存入缓存。然后更新的时候按照编号将旧的产品信息删除。

但是有的时候我是批量更新一个分类下面的产品。产品是可以按照编号查出来的。例如30代表酒水,更新的时候将30开头的所有编号key都删除。这样应该怎么操作?

迷路中的路人甲的主页 迷路中的路人甲 | 初学一级 | 园豆:93
提问于:2013-08-28 12:50
< >
分享
最佳答案
0

是这样子的,memcached把服务器是按照一个圆的样子部署的(这好像是内部实现),再次跟新的时候与原来down的那个机器没有关系。

----不好意思,上面我说错了--updated如下。

memcached是不会在一个down了之后寻找新机器的。当down的机器恢复之后会重新Set到原来的机器。

具体参考Memcached, 1 server down but not using other one

 

我晚上测试一下。

 

Memcached的Cycle原理是为了保证在缓存集群加入新的机器后原来的key不失效。Consistent Hashing

收获园豆:6
小AI | 菜鸟二级 |园豆:354 | 2013-08-28 12:58

没太明白,比如我有一个key A001,正常应该是写在A服务器的,但是当A服务器down了的以后,在进行set操作。这个时候是会把A001写入到B上吗?

 

如果等待A恢复以后,再次进行Set的时候,会把B上的A001删除,在A上重新建立缓存,是这样吗?

迷路中的路人甲 | 园豆:93 (初学一级) | 2013-08-28 14:22

@迷路中的路人甲: 按照stackoverflow上面的说法(Memcached, 1 server down but not using other one)Adown了之后A上面的缓存全部没有了,你set的时候还是往A上set,当然是set不上的,我实在不想开另外一台电脑,你自己测试一下啊。Consistent Hashing是一个paper出来的算法,主要目的是解决新增加了server进去之后之前的key不失效的问题。这是内部机制。

小AI | 园豆:354 (菜鸟二级) | 2013-08-28 20:35

@小AI: 嗯。看了那几个文章,那个圆的概念很有意思。

迷路中的路人甲 | 园豆:93 (初学一级) | 2013-08-29 11:14
其他回答(2)
0

1、对;

2、对;

3、旧得丢了;

收获园豆:2
Launcher | 园豆:45045 (高人七级) | 2013-08-28 13:00
0

memcached是分布式缓存,你只需关心key/value

收获园豆:2
dudu | 园豆:31007 (高人七级) | 2013-08-28 15:52

恢复测试

支持(0) 反对(0) 小AI | 园豆:354 (菜鸟二级) | 2013-08-28 20:45

@小AI: 收到,我这里可以看到

支持(0) 反对(0) dudu | 园豆:31007 (高人七级) | 2013-08-28 20:46

@dudu: 从我的用户名开始查吧,今天到公司电脑一样,8-22

支持(0) 反对(0) 小AI | 园豆:354 (菜鸟二级) | 2013-08-29 12:19

@小AI: 好了,不过中间有一星期的数据还是没有。新回复的有显示,你们专门排查过?

支持(0) 反对(0) 小AI | 园豆:354 (菜鸟二级) | 2013-09-01 18:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册