環境: win10 64位、memcached 1.4.4 64位、EnyimMemcached 2.16.0(ps:2.13.0也有此問題,別的版本就沒試了). EnyimMemcached git源碼地址:https://github.com/enyim/EnyimMemcached 事發原因: ...
環境: win10 64位、memcached 1.4.4 64位、EnyimMemcached 2.16.0(ps:2.13.0也有此問題,別的版本就沒試了).
EnyimMemcached git源碼地址:https://github.com/enyim/EnyimMemcached
事發原因:最近有時間就想著把redis和Memcached的緩存都想一個公共類,好方便隨身用,redis很快弄好了,Memcached在網上查貌似EnyimMemcached用的比較多(原來用過Memcached.ClientLibrary,抱著不走回頭路的心態直接過濾了,也因為這個許多年沒有更新過了.),立馬開工,在vs中NuGet搜索安裝,直接測試試用,
看裡面有三個方法,原來沒看那麼多,直接用的第二個DateTime,別的也沒試,Get獲取值時報錯,提示沒有實例化(實例化不就是沒值麽),於是看賦值那裡,結果提示返回的是true,賦值成功,但就是取值報錯,折騰了一上午,查說改配置什麼的都沒用,用命令行賦值卻又能成功,很無奈 ⊙﹏⊙.
後面無意中用了下TimeSpan,卻成功了.(原來根本沒想過會是參數原因!).於是就有了上面找源碼。
看代碼沒什麼不同,就MemcachedClient.GetExpiration這兩個重載不一樣,繼續看GetExpiration方法
看返回結果都是uint類型,結果DateTime參數中是這樣返回uint類型的:uint retval = (uint)(expiresAt.ToUniversalTime() - UnixEpoch).TotalSeconds;
這不是返回時間戳嘛,TimeSpan參數返回的就是分鐘數了,想不通了,同樣返回調用的一個是時間戳一個是分鐘數,這不是瞎搞嗎。
遂改為下麵得分鐘的:uint retval = (uint)(expiresAt - DateTime.Now).TotalSeconds;
ok,編譯下把dll載入到自己項目中,使用DateTime參數的運行賦值取值成功!