Общая стратегия кеширования «случайных» данных - PullRequest
1 голос
/ 20 апреля 2011

У меня есть веб-сайт, который должен отображать «случайный» выбор элементов на своей домашней странице. Этот список довольно дорогой для генерации, поэтому я хотел бы взглянуть на выполнение некоторого кэширования, которое все еще позволяет списку все еще казаться несколько случайным для неопытного глаза.

Моя идея состояла в том, чтобы использовать случайным образом выбранное число в заданном диапазоне (скажем, 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 ]

1 голос
/ 20 апреля 2011

Можете ли вы создать «случайный» список при запуске приложения, возможно, из 100 элементов?Затем, если вам нужно отобразить 10 «случайных» элементов, случайным образом выберите из 100.

Вспомогательная документация: https://stackoverflow.com/questions/462219/xkcd-random-number

0 голосов
/ 20 апреля 2011

Это в 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...