我寫信給memcached的很多鍵/值 - > PREFIX_KEY1,PREFIX_KEY2,PREFIX_KEY3是否可以通過前綴獲取/搜索Memcached密鑰?
我需要得到所有以PREFIX_開始
是否有可能的鑰匙?
我寫信給memcached的很多鍵/值 - > PREFIX_KEY1,PREFIX_KEY2,PREFIX_KEY3是否可以通過前綴獲取/搜索Memcached密鑰?
我需要得到所有以PREFIX_開始
是否有可能的鑰匙?
對不起,但沒有。 Memcached使用散列算法,將密鑰分佈在明顯隨機的地方,因此這些密鑰分散在各處。你必須掃描一切才能找到它們。
另外,您應該意識到,按設計,memcached可以隨時因任何原因刪除任何任何密鑰。如果你把東西放進去,你應該意識到你不能依靠它回來。這對於它的原始用例來說是絕對正確的,一個緩存可以減少數據庫中的命中。但如果你想要做一些更復雜的事情,這可能是一個嚴重的問題。
如果這些限制是一個問題,我建議您使用Redis代替。它的行爲與memcached非常相似,只不過它會保留數據,並允許存儲複雜的數據結構。因此,對於您的用例,您可以在Redis中存儲散列,然後再將整個散列拖出。
您可以使用命名空間並執行您所需的操作。這是一個執行相同的PHP庫。您可以爲多個應用程序使用相同的Memcached。
雖然@btilly是說memcached的正確並沒有這樣做本身,您可以通過維護分享您的前綴鍵的索引,讓您再取所有條目效仿(相當有效)匹配某個前綴。
很明顯,這隻適用於您事先選擇的特定密鑰,而不是任意數據,但如果您可以忍受這種限制,則這是非常可行的。其中一位memcache開發人員有a good article on this subject。
快速命令來搜索如果一個特定的鍵存在時(鍵名稱可以是「grep的正則表達式」)
for i in {1..40}; do (echo "stats cachedump $i 0"; sleep 1; echo "quit";) | telnet localhost 11211 | grep 'APREFIX*\|ANOTHERPREFIX*'; done