Какие-нибудь распределенные кеш-системы, позволяющие помечать контент
Я хотел бы знать, есть ли какие-либо системы распределенного кэша, такие как 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/) будут соответствовать вашим потребностям в кэшировании.
С уважением, Рони