Thêm vs Đặt trong Memcached


17

Tôi không hiểu sự khác biệt giữa ADD và SET Bất kỳ manh mối nào? Có vẻ như ADD bao gồm SET hoặc ADD trả về false nếu có gì đó và SET chỉ ghi đè. Cảm ơn!

EDIT: Câu hỏi cụ thể của tôi là "Khi nào bạn sử dụng add thay vì set hay set thay vì add?"

Câu trả lời:


22

Bạn đã có khá nhiều câu trả lời cho câu hỏi đầu tiên của bạn: mục đích của ADDnó là chỉ hoạt động khi một khóa chưa tồn tại, trong khi đó SETlà để cập nhật giá trị, bất kể nó đã tồn tại chưa. Nếu bạn quen thuộc với SQL, thì nó (đại khái) giống như sự khác biệt giữa INSERTcác truy vấn ( ADD) và UPDATE( SET).

Liên quan đến câu hỏi phụ lục của bạn, bạn sẽ sử dụng bất kỳ câu hỏi nào phù hợp với mục đích của bạn. Tôi sẽ nói rằng đó SETsẽ là hoạt động phổ biến hơn, bởi vì nó phổ biến hơn mà bạn chỉ muốn nói "Tôi muốn chìa khóa foocó giá trị bar, và tôi không quan tâm liệu nó đã có trong đó hay chưa". Tuy nhiên, sẽ có những dịp (ít thường xuyên hơn) khi cần phải biết rằng một khóa chưa có trong bộ đệm.

Một ví dụ xuất hiện trong đầu khi ADDthích hợp là lưu trữ các phiên trong memcache (nhân tiện, tôi không khuyến nghị) - nếu bạn tạo ngẫu nhiên ID phiên của mình (hoặc thông qua băm), bạn sẽ không muốn để tạo một phiên mới có cùng khóa với phiên hiện có, vì điều này sẽ cấp cho một người dùng quyền truy cập vào dữ liệu của người dùng khác. Trong trường hợp này, khi bạn tạo phiên bạn sẽ sử dụng ADDvà nếu nó trả về trạng thái lỗi, bạn sẽ cần tạo ID phiên mới và thử lại. Tất nhiên, cập nhật phiên sẽ sử dụng SETkhi người dùng làm việc theo cách của họ thông qua ứng dụng của bạn.


1
Tôi có thể là một chút nitpicking ở đây, nhưng trong so sánh của bạn với SQL, nếu "thêm" so sánh với INSERT, "set" sẽ so sánh với REPLACE thay vì CẬP NHẬT.
matteo

2
Do đó việc sử dụng từ "đại khái". Nếu bạn muốn nhận được sự thực tế , REPLACEthậm chí không phải là SQL ... đó là "ngôn ngữ được lấy cảm hứng từ SQL mà MySQL hiểu" (cười)
womble

3

Ngoài câu trả lời ở trên bởi id người dùng 'womble', vui lòng xem xét các điểm sau:

  1. Khả năng của một điều kiện cuộc đua với 'bộ' trái ngược với 'thêm'. Xem bên dưới liên kết đến một câu trả lời của Nick Johnson: /programming/13234556/USE-memcache-add-instead-of-set

  2. Nếu bạn biết 'thêm' sẽ làm, thì đừng sử dụng 'set'. Điều này là để tránh gửi dữ liệu qua mạng vì đây là các cuộc gọi RPC . Và thực tế gần như toàn bộ thời gian được sử dụng bởi lưu lượng truy cập mạng thay vì tìm kiếm cặp khóa-giá trị trong memcache. Vì vậy, nếu bạn có thể tránh lưu lượng mạng tốt nhất vì trong trường hợp đó, thời gian phản hồi của bạn sẽ nhanh hơn.


Xem Appstats ( https://developers.google.com/appengine/docs/python/tools/appstats (của Google)) và để hiểu thêm về điểm số 2 ở trên, vui lòng xem http://www.youtube.com/watch ? v = bvp7CuBWVgA của Guido Van Rossum (@Google)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.