我想知道是否有像Memcached,velocity或sharedcache這樣的分佈式緩存系統,它允許我用比它更多的名稱來標記內容,或者可以將項目與eachother關聯起來,所以如果我使緩存一個無效項目也會使相關項目無效。允許標記內容的任何分佈式緩存系統?
例如。如果我有兩個引用相同數據和數據更改的頁面,我希望兩個引用頁面的緩存無效。
- 或者是這是一個乞求開發的項目之一? :)
編輯:我在asp.net
我想知道是否有像Memcached,velocity或sharedcache這樣的分佈式緩存系統,它允許我用比它更多的名稱來標記內容,或者可以將項目與eachother關聯起來,所以如果我使緩存一個無效項目也會使相關項目無效。允許標記內容的任何分佈式緩存系統?
例如。如果我有兩個引用相同數據和數據更改的頁面,我希望兩個引用頁面的緩存無效。
編輯:我在asp.net
我相信相關的數據的刪除可以使用的memcached的CAS(檢查和設置)操作來完成。每個值都有一個唯一的ID(串行)。對於每個密鑰,存儲另一個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
即使在衝突的寫入的情況下,這些算法最終會終止,因爲一個作家會總是「通過」。
有趣,我會研究一下! 但我真的想把它包裝成類似 集('節#1','節數據','文章#1,文章#2,文章#3') 然後只是beeing能夠刪除('第1條');然後當我嘗試獲取section1時,它只需要重新生成它,但這可能會造成競爭條件和緩存死鎖,而這些也不是很有趣:/ – possan 2009-09-04 11:59:21
實現依賴是相當困難的,但也許共享緩存的所有其他功能(http://www.sharedcache.com || http://sharedcache.codeplex.com)將適合您的緩存需求。
問候,roni
我也會對此感興趣 - 好問題。 – 2009-09-04 10:44:11