memcache遍历策略
mysql的内存引擎其实很好用,但是我担心并发大还是不行。用memcache,不好遍历。我想了一个办法。
键分三种,
第1种,只有一个就是news_index_index,值的模样是逗号分隔的字符串或数组。
第2种,news_index_XXX,XXX是数字,长度不限,如果xxx=1200,则news_index_1200只能存120000-120099的新闻id,值的模样同上。
第3 种,news_XXX,XXX长度不限,就是新闻id,值就是点击量,int型
分3步,存,取,遍历(倍数为100)。
存
假设有一个item,key为news_index_index,值为如同1,2,4,44,这样的数据。
当一篇新闻的id例如12004,则除以100取整,得到120,
查询key=news_index_index
if (没有120) {
在key=news_index_index的item 的值中添加120;
添加news_index_120的item ,值为空。
}
查询key=news_index_120,查有无12004
if (有12004) {
key为news_12004 的item 的值加1;
}else {
key=news_index_120,的item的值加上一个12004;
添加一个item,key=news_12004,value=1
}
取
如果要id为333367的点击量,
则直接取key为 news_333367的item的值即可
遍历
当我要遍历所有在 memcache中的新闻id时,则有了上述机制后,太简单了,就不说了。
备注
另外,为防止数据过多,可以在半夜把点击量保存到数据库中,然后清除第2、3种键,并把第一个键的值清空。
2、为防止查询某键得到结果0,此时不知道是item存在值为0,还是item不存在,应避免使用值为0的item。
页:
[1]