缓存“随机”数据的一般策略

时间:2011-04-20 16:10:01

标签: asp.net caching

我的网站需要在其主页上显示“随机”选项。这个列表生成起来有些昂贵,所以我想研究一些缓存,这些缓存仍然允许列表在未经训练的眼睛中显得有点随机。

我的想法是在给定范围内使用随机选择的数字(假设参数为10),作为缓存键的一部分。 Psuedo代码看起来像这样:

randomCacheVariation = (random number between 1 and 10)

cacheKey = "myRandomList_" + randomCacheVariation

If cache.contains(cacheKey) Then   
     return existing random list 
Else  
     generate new radom list   
     add to cache  
     return list 
End If

有没有人对如何实施这样的事情提出更好的建议?

更新

为了清楚起见,我不是在寻找缓存服务的实现,而是一种如何通过在缓存中存储我的列表的一些有限数量的变体来缓存伪随机数据的策略。

2 个答案:

答案 0 :(得分:1)

你可以在app启动时生成一个“随机”列表,可能包含100个项目吗?然后,如果您需要显示10个“随机”项目,请从100中随机选择。

支持文件: https://stackoverflow.com/questions/462219/xkcd-random-number

答案 1 :(得分:0)

这是在C#但是......

public static class Cache
{
    public void Add<T>(string key, T item)
    {
        HttpRuntime.Cache[key] = item;
    }

    public T Get<T>(string key, Func<T> valueFactory)
    {
        var obj = HttpRuntime.Cache[key];

        if (obj == null)
        {
            if (valueFactory != null)
            {
                T tObj = valueFactory();

                Add(key, tObj);

                return tObj;
            }

            return default(T);
        }

        return (T)obj;
    }
}

然后你可以像这样使用它......

var randomSet = Cache.Get<string>("RandomResultSet", () => {
    // pull down large random result-set
    var randomSet = do stuff;
    return randomSet;
});

// Now that we have a large result set cached, let's select a smaller one
var randomStuff = randomSet.GetSmallerRandomSet();