2009-09-04 4 views
5

Je voudrais savoir s'il y a des systèmes de cache distribué comme memcached, la vitesse ou SharedCache qui me permet de baliser le contenu avec plus que son nom, ou qui peut se rapporter articles à eachother, donc si j'invalident le cache pour une article, il invalide également les éléments connexes.Tout système de cache distribué permettant de baliser le contenu?

par ex. si j'ai deux pages qui font référence aux mêmes données et que les changements de données, je voudrais le cache pour les deux pages faisant référence à invalider.

  • ou est-ce un ajout à l'un de ces projets qui demandent à être développés? :)

edit: je suis sur asp.net

+0

Je serais également intéressé par ceci - bonne question. –

Répondre

0

Velocity a un support pour le marquage où chaque balise est une chaîne. Les objets peuvent être récupérés par une étiquette ou par plusieurs étiquettes, par ex. 'Condiment' ET 'Livraison gratuite'.

Cependant Velocity n'a pas de support pour les dépendances - IIRC l'équipe de vitesse ont dit les dépendances ne seront pas en v1.

+1

peut-être je vais étudier la vitesse alors, mais mes tripes me dire que memcache est la voie à suivre :) – possan

+0

je vais marquer ceci comme la solution. – possan

3

Je crois que la suppression des données dépendantes peut être fait en utilisant le fonctionnement de memcached de CAS (check-et-set). Chaque valeur a un identifiant unique (série). Pour chaque clé, stockez un autre key.dependents, qui a la série des données, et les clés de toutes les dépendantes.

Lorsque vous allez ajouter une personne à charge, faire

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 

Lorsque invalidant un élément, faire

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 

Même en présence d'écritures contradictoires, ces algorithmes finiront par mettre fin à, car un écrivain toujours "passer".

+0

intéressant, je vais regarder dans cela! mais je voudrais vraiment envelopper dans quelque chose comme ensemble («section # 1», «données de la section», «article # 1, article # 2, article # 3») puis juste être en mesure de supprimer ('Article 1'); et puis quand je tente d'obtenir Section1 la prochaine fois, il doit juste régénérer, mais qui pourrait possible de créer la race conditions et les blocages du cache, et les arent drôles soit:/ – possan

Questions connexes