用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。
memcached java && python client api 共享
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.