2011-10-09 32 views
7

Tôi sẽ lưu trữ số lần truy cập cho một số URL trong Redis. Tôi đang lập kế hoạch sử dụng hash vì điều đó có vẻ hợp lý. Nó cũng có chức năng tăng nguyên tử rất quan trọng đối với trường hợp sử dụng của tôi.Truy cập nguyên tử trên một băm trong Redis

Mỗi lần như vậy, tôi sẽ tổng hợp số lần truy cập trên mỗi URL vào một cửa hàng dữ liệu khác. Với mục đích này, tôi muốn nhận được số lần truy cập và đặt lại số không. Tôi không thể tìm thấy một hoạt động như GETSET hoạt động trên băm. Nếu tôi ghi lại một cú đánh giữa số lần truy cập và đặt lại thành 0, nó sẽ bị mất mà không có một loại hoạt động nguyên tử nào.

Tôi có thiếu gì đó không? Một thay thế xảy ra với tôi sẽ là băm URL trong mã khách hàng (python) của tôi và sử dụng string commands, nhưng điều đó có vẻ như một chút của một hack khi Redis cung cấp một băm chính nó.

Trả lời

6

Cố gắng nhìn vào redis transactions tài liệu, cụ thể là sự kết hợp của WATCHMULTI lệnh:

xem phím được theo dõi để phát hiện những thay đổi đối với họ. Nếu ít nhất một khóa đã xem được sửa đổi trước lệnh EXEC, thì hủy bỏ toàn bộ giao dịch và EXEC trả về trả lời nhiều hàng loạt Null đến thông báo rằng giao dịch không thành công.

...

Vậy WATCH thật sự là gì? Đó là một lệnh sẽ làm cho EXEC có điều kiện: chúng tôi đang yêu cầu Thực hiện lại giao dịch chỉ khi không có khách hàng nào khác sửa đổi bất kỳ của các phím được xem. Nếu không, giao dịch sẽ không được nhập vào.

+1

Bạn có thể cung cấp ví dụ về mã với phản hồi này không? – Eric

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