我有一张存放歌曲和玩牌的桌子 这是代码:
//Increse plays counter
string ip = Request.UserHostAddress;
if (!string.IsNullOrEmpty(ip))
{
if (Cache["plays:" + trackID + ":" + ip] == null)
{
tracks.IncreasePlaysCounter(trackID);
Cache["plays:" + trackID + ":" + ip] = true;
}
}
我想知道什么是更好的做法,存储许多缓存项(如此)或存储一个项目,如ArrayList,其中包含已经听过该歌曲的用户。有什么不同吗?
答案 0 :(得分:2)
都不是。如果你的系统以任何方式取得成功,那么就会有太多的单独条目被写入以便能够扩展以应对,特别是当你添加锁定代码来处理同时写入和读取的数量时,这将不得不应对用。
将此信息存储在数据库中。或者根本不存储它,但是通过解析webserver日志来获取它(如果trackID是一个查询参数,那么这些信息已经存在于那些没有任何工作的日志中)。
答案 1 :(得分:0)
我将从纯粹的缓存角度而不是戏剧和曲目的背景来处理这个问题。
在决定缓存数据时,重要的是要考虑依赖关系是什么以及缓存如何过期。
如果每个用户的缓存可以单独过期,那么就可以了。如果结果是一条记录过期应该使整个记录集无效,那么将它放入ArrayList并转储整个对象。