使用MemCached做爲緩存系統時,常遇到Key Value的大小長度超出限制的問題。Key要求小於250個字符,Value要求小於1MB。按照MemCached官方的說法,出於緩存的效率性能考慮,若是超過了限制通常須要考慮是否系統的設計出了問題。算法
Key長度超過250字符時,首先應該想到的是可以儘可能縮短key的長度,好比將子Key字符串組合改成位運算整合後的32位整數。最後實在沒辦法能夠嘗試Hash函數縮短key。但因爲Hash函數是多對一的映射,免不了會出現碰撞的問題。無論是採用CRC32算法仍是MD5甚至SHA算法,只是碰撞機率大小的問題。緩存
爲解決Hash函數的碰撞問題,能夠將原始Key加Value包裝爲新的Value存入MemCached。app
class CacheWrapper {函數
String originalKey = null;性能
String value;設計
}對象
該方法使用了附加的originalkey字段存入緩存,取緩存時使用double check檢查是否存在Hash碰撞。能夠看因爲Hash碰撞,會出現取到無效的緩存數據的可能,但考慮到通常的Hash函數的碰撞機率仍是比較低的,因此該狀況的仍是比較難出現。字符串