memcached java && python client api 共享

用Python寫了一個計劃任務,定時更新Memcached中一個key值,寫的很happy,幾分鐘搞定。

然後在Java Servlet測試,代碼寫的也很happy,編譯 - 刷新,一氣呵成。

然後發現值一直是null,再tail日誌看看,異常不斷:

com.danga.MemCached.MemCachedClient Mon Jul 20 09:37:04 CST 2009 - ++++ exception thrown while trying to get object from cache for key: test_num
com.danga.MemCached.MemCachedClient Mon Jul 20 09:37:04 CST 2009 - 3
com.danga.MemCached.NestedIOException: 3
        at com.danga.MemCached.MemCachedClient.get(MemCachedClient.java:1408)
        at com.danga.MemCached.MemCachedClient.get(MemCachedClient.java:1270)

暈倒,記得以前爲了讓兩個語言實現API讀寫共享,手動去修改了兩個的API包,實現了中文互讀寫。難不成今兒個還要手動去搞一把?

然後手動試了下:
shell> telnet xxxxxx 11211
get test_num
VALUE test_num 4 2
23

經查證VALUE協議返回的是 key flags len /r/n value 這樣的格式,大悟:原來flags不一樣啊,Java裏面對int型賦值以後flags是0,而Python裏則不一樣,兩者序列化的東西不同啊。懶得去 折騰兩者序列化有啥不同。來點直接的把。

然後打開Python Memcached API,大概578行_val_to_store_info方法裏,可以看到flags部分,是根據變量類型進行定義的,isinstance(val, str) 如果是str則pass。

到這裏就簡單了,直接在py代碼裏:mc.set('test_num', str(num))

Java讀取OK。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章