2011-10-26 53 views
11

我怎麼能確定爲什麼Enyim從以下調用返回false:如何確定爲什麼Enyim memcache在存儲項目時返回false?

cache.Store(Enyim.Caching.Memcached.StoreMode.Set, key, value); 

其他項目獲得存儲罰款,所以似乎並沒有與服務器連接的問題。該對象看起來不大於1 MB。

那麼我怎樣才能確定是什麼造成了錯誤?

+2

您應該可以配置日誌記錄以記錄客戶端創建的所有通信。這應該允許您查看報告的錯誤。有關日誌記錄的信息,請訪問:https://github.com/enyim/EnyimMemcached/wiki/Configure-Logging – mikewied

回答

0

一種可能性是您的密鑰可能包含非法字符。通常,非常低端的ASCII字符會導致這種情況 - 我相信0x30及以上肯定是安全的,並且可能還有0x20以及更高。退出ASCII character chart你可以看到0x00到0x1F主要是特殊字符。 0x20到0x2F是「普通」字符,但在某些參考資料中,我已經提到它們也可以用作控制字符。

這個問題引起了我一些問題;我已經通過構建一個非常獨特的密鑰來解決這個問題,而不考慮長度,然後生成密鑰的MD5校驗和。 MD5總和保證了最小的鍵碰撞風險,安全的字符和比實際鍵更短的長度。

+0

嗯,好主意,但不是,導致問題的鍵不包含任何奇怪的字符。 – Dugan

0

Memcached將對象的大小默認限制在1MB以下。檢查你的memcached服務器上的配置。限制是可配置的,但不建議進行更改,因爲它會影響服務器本身的整體性能。

+1

正如我在帖子中提到的,它們都低於1MB。 – Dugan

0

我們完全包裝了Enyim客戶端來製作正確連接池的靜態方法。我們也確實在我們的包裝代碼兩件事情:

1)檢查,關鍵是< = 250個字符,幷包含有效的字符 2)檢查長度爲< 1MB。我們檢查字符串和byte []上的長度。

我們還要求提供改進請求。 它是:http://www.couchbase.org/issues/browse/NCBC-10