首页 新闻 会员 周边 捐助

关于Memcached缓存的问题,希望使用过的童鞋都帮忙提供一下你们的解决方案

1
悬赏园豆:30 [已解决问题] 解决于 2012-08-24 10:17

刚才想到一个问题,就是使用Memcached的时候,我们都是键值存储,我们存储的数据量较大,我们该怎样去确保存储值的  键  是唯一的。有没有什么好的制订规则,希望各位使用过的大虾们赐教!

 

Memcached 数据同步的问题:

(1) 在修改数据库的时候就同步

(2) 直接修改数据库,然后由程序自动去更新

 

请问还有没有其他的解决方案,这两个解决方案哪一个更好??

贺臣的主页 贺臣 | 菜鸟二级 | 园豆:307
提问于:2012-02-22 15:02
< >
分享
最佳答案
1

1. 保证键值唯一的方法

a) 命名方法:应用名_类名_方法名_部分方法参数

b) 用一个专门的CacheKeyManager类管理键值

2. 数据同步的问题

“有则用之,无则缓存之,修改则清除之”

a) 获取数据时,从缓存中查找,没有就从数据库读取并加载至缓存中。

b) 更新数据库时,删除对应的缓存。

收获园豆:15
dudu | 高人七级 |园豆:30783 | 2012-02-22 15:28

我等的就是dudu来回答啊,你终于出来了! 还有一个问题,我Memcached缓存一个数据库表中的数据,我是将所有数据作为一个集合缓存 还是每行数据都对应一个键值缓存好。

一直想这个问题,感觉这两种方式都有一定的弊端,感觉不是太灵活!非常的纠结

贺臣 | 园豆:307 (菜鸟二级) | 2012-02-22 15:47

有则用之,无则缓存之,修改则清除之! 这是我一直用的方式,还有一种方式就是使用程序服务定期更新缓存,当然这种数据及时性要求不是很高。假如我对这种数据及时性高,使用这种方式及时出发缓存更新有没有好的办法,就是数据库更新缓存句更新这种

贺臣 | 园豆:307 (菜鸟二级) | 2012-02-22 15:51

@贺臣: 缓存的不是数据库表中的数据,而是对象的状态。

dudu | 园豆:30783 (高人七级) | 2012-02-22 15:53

@贺臣: 那就在添加数据时,提前添加到缓存中;修改数据时,更新对应的缓存。

dudu | 园豆:30783 (高人七级) | 2012-02-22 15:55

@dudu:  谢谢

贺臣 | 园豆:307 (菜鸟二级) | 2012-02-22 16:01

list.Add(entity1);

list.Add(entity2);

list.Add(entity3);

一种方式缓存的是list这个对象,对应只有一个键值

 

还有一种方式缓存

entity1   

entity2

entity3

这里缓存这三个对象,对应三个键值。  

我想问的是那种方式比较好一点

贺臣 | 园豆:307 (菜鸟二级) | 2012-02-22 16:36

@贺臣: 第一种好一些,查找缓存是需要成本的,尽量减少查找次数

dudu | 园豆:30783 (高人七级) | 2012-02-22 16:42
其他回答(2)
0

小弟同求 

flysky1001 | 园豆:205 (菜鸟二级) | 2012-02-22 15:06
0

你的两种方案都是正确的,不过第一种要及时点但是开发成本要高点,第二种简单点,但是及时性就没那么好,而且数据库的压力也要增大点。

建议使用Redis,你在后面的问题能解决大部分。

收获园豆:15
az235 | 园豆:8483 (大侠五级) | 2012-02-22 16:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册