2011-02-03 23 views

Trả lời

18

Rất tiếc, nhưng không. Memcached sử dụng một thuật toán băm phân phối các khóa tại các địa điểm ngẫu nhiên, và vì vậy các phím đó nằm rải rác khắp nơi. Bạn sẽ phải quét mọi thứ để tìm chúng.

Ngoài ra, bạn nên lưu ý rằng, theo thiết kế, memcached có thể thả bất kỳ phím bất kỳ lúc nào vì bất kỳ lý do gì. Nếu bạn đang đưa công cụ vào, bạn nên lưu ý rằng bạn không thể phụ thuộc vào nó trở lại. Điều này là hoàn toàn tốt cho trường hợp sử dụng ban đầu của nó, một bộ nhớ cache để giảm số lần truy cập trên cơ sở dữ liệu. Nhưng nó có thể là một vấn đề nghiêm trọng nếu bạn muốn làm một cái gì đó phức tạp hơn với nó.

Nếu những giới hạn này là một vấn đề, tôi khuyên bạn nên sử dụng Redis để thay thế. Nó hoạt động rất giống memcached, ngoại trừ việc nó sẽ lưu giữ dữ liệu và nó cho phép bạn lưu trữ các cấu trúc dữ liệu phức tạp. Vì vậy, đối với trường hợp sử dụng của bạn, bạn có thể lưu trữ một băm trong Redis, sau đó kéo toàn bộ băm ra sau.

3

Bạn có thể sử dụng Không gian tên và thực hiện những gì bạn cần. Đây là một thư viện PHP thực hiện tương tự. Bạn có thể sử dụng cùng một Memcached cho nhiều ứng dụng.

https://github.com/vijayabose/n_memcached

4

Trong khi @btilly là đúng khi nói memcached mà không làm được điều này natively, bạn có thể bắt chước nó (khá hiệu quả) bằng cách duy trì một chỉ số của phím đó chia sẻ tiền tố của bạn, cho phép bạn để sau đó lấy tất cả các mục khớp với một tiền tố nhất định.

Rõ ràng điều này sẽ chỉ hoạt động cho các khóa cụ thể mà bạn chọn trước và không tùy ý dữ liệu, nhưng nó hoàn toàn khả thi nếu bạn có thể sống với giới hạn đó. Có a good article on this subject bởi một trong những nhà phát triển memcache.

3

Một lệnh nhanh chóng để tìm kiếm nếu một phím cụ thể tồn tại (tên chủ chốt có thể là một "grep regex")

for i in {1..40}; do (echo "stats cachedump $i 0"; sleep 1; echo "quit";) | telnet localhost 11211 | grep 'APREFIX*\|ANOTHERPREFIX*'; done 
Các vấn đề liên quan