2009-09-04 31 views
5

Tôi muốn biết nếu có bất kỳ hệ thống cache được phân phối nào như memcached, velocity hoặc sharedcache cho phép tôi gắn thẻ nội dung với nhiều hơn chỉ là tên của nó hoặc có thể liên kết các mục với nhau. mục nó cũng làm mất hiệu lực các mục liên quan.Bất kỳ hệ thống bộ nhớ cache được phân phối nào cho phép gắn thẻ nội dung?

ví dụ: nếu tôi có hai trang tham chiếu cùng một dữ liệu và dữ liệu đó thay đổi, tôi muốn bộ nhớ cache cho hai trang tham chiếu bị vô hiệu.

  • hoặc đây có phải là sự bổ sung cho một trong những dự án đó đang được phát triển không? :)

chỉnh sửa: i đang trên asp.net

+0

Tôi cũng sẽ quan tâm đến câu hỏi này - hay. –

Trả lời

0

Vận tốc có hỗ trợ gắn thẻ trong đó mỗi thẻ là một chuỗi. Các đối tượng có thể được truy lục bằng thẻ hoặc bằng nhiều thẻ, ví dụ: 'Gia vị' và 'Giao hàng miễn phí'.

Tuy nhiên Velocity không hỗ trợ phụ thuộc - IIRC nhóm Vận tốc đã cho biết các phụ thuộc sẽ không ở dạng v1.

+1

có lẽ tôi sẽ nhìn vào vận tốc rồi, nhưng ruột của tôi nói với tôi rằng memcache là con đường để đi :) – possan

+0

Tôi sẽ gắn cờ đây là giải pháp. – possan

3

Tôi tin rằng xóa dữ liệu phụ thuộc có thể được thực hiện bằng cas memcached của (check-và-set) hoạt động. Mỗi giá trị có một ID duy nhất (nối tiếp). Đối với mỗi khóa, lưu trữ một khóa khác. Phụ thuộc, trong đó có nối tiếp của dữ liệu, và các khóa của tất cả người phụ thuộc.

Khi sẽ thêm một phụ thuộc, làm

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 

Khi hủy bỏ hiệu lực một mục, làm

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 

Ngay cả trong sự hiện diện của ghi mâu thuẫn, các thuật toán cuối cùng sẽ chấm dứt, vì một nhà văn sẽ luôn luôn "vượt qua".

+0

thú vị, tôi sẽ xem xét điều đó! nhưng tôi thực sự muốn bọc nó vào một thứ gì đó như đặt ('phần # 1', 'dữ liệu phần', 'bài viết # 1, bài viết # 2, bài viết # 3') rồi chỉ ong có thể xóa ('bài viết số 1'); và sau đó khi tôi cố gắng lấy section1 vào lần sau nó chỉ cần tạo lại nó, nhưng điều đó có thể tạo ra điều kiện chủng tộc và deadlocks cache, và những thứ đó vui nhộn:/ – possan

Các vấn đề liên quan