Какие-нибудь распределенные кеш-системы, позволяющие помечать контент

Я хотел бы знать, есть ли какие-либо системы распределенного кэша, такие как memcached, speed или sharedcache, которые позволяют мне помечать контент не только его именем, либо могут связывать элементы друг с другом, поэтому, если я аннулирую кэш для одного элемента, это также делает недействительными связанные элементы.

например. если у меня есть две страницы, которые ссылаются на одни и те же данные и эти данные изменяются, я бы хотел, чтобы кэш для двух ссылающихся страниц аннулировался.

  • или это дополнение к одному из этих проектов, требующих разработки?:)

редактировать: я нахожусь на asp.net

3 ответа

Решение

В Velocity есть поддержка тегов, где каждый тег является строкой. Объекты могут быть получены с помощью тега или нескольких тегов, например, "Приправа" И "Бесплатная доставка".

Однако Velocity не поддерживает зависимости - IIRC, команда Velocity, говорит, что зависимости не будут в v1.

Я считаю, что удаление зависимых данных может быть сделано с помощью операции mem (кэширование и установка) memcached. Каждое значение имеет уникальный идентификатор (серийный номер). Для каждого ключа сохраните еще один key.dependents, в котором есть серийный номер данных и ключи всех иждивенцев.

Когда собираетесь добавить зависимого, сделайте

dependents, dep_serial = fetch(key+".dependents")
data, serial = fetch(key)
if serial != dependents[0]:
    # somebody changed the actual data
    start_over
generate_and_cache_dependent(dep_key, data)
dependents.append(dep_key)
if not cas(dependents, dep_serial):
   # somebody changed dependents
   start_over # can avoid regenerating the data if they are still at serial

При аннулировании элемента сделайте

dependents, dep_serial = fetch(key + ".dependents")
serial = update(key, new_data)
for dkey in dependents[1:]:
    delete(dkey)
dependents = [serial]
if not cas(dependents, dep_serial):
    start_over

Даже при наличии конфликтующих записей эти алгоритмы в конечном итоге завершатся, так как один писатель всегда будет "проходить".

Реализовать зависимость довольно сложно, но, возможно, все другие функции Shared Cache ( http://www.sharedcache.com/ || http://sharedcache.codeplex.com/) будут соответствовать вашим потребностям в кэшировании.

С уважением, Рони

Другие вопросы по тегам