记一次在Windows2008服务器下Memcached获取值问题

这是一次在Windows 2008/.NET环境下使用Memcache时碰到的问题,在不同项目之间获取缓存时,如果缓存为对象,则有可能会获取不到。本次解决方案是将对象转换为JSON字符串来存储。

很多朋友可能已经发现,本博客已经加上了QQ登录功能,但是现在还没有通过腾讯审核,估计不出意外的话,下周应该大家就能使用QQ登录本博客了,下周会一并开放评论功能和留言板功能,到时大家就可以一起交流了。

因为是二个不同的应用,所以我在写QQ登录功能时,使用Memcache用来保存登录信息,以实现共享Session功能。

服务器上的Memcache版本是1.2.6版,而c#客户端是.NET memcached client library - 1.1.5,这些网上都有现成的,也有很多说明文章和例子。

其中QQ登录域为:http://passport.postcha.com,相当于一个通行证中心吧,所有登录操作都在这里完成。关于在Windows 下使用Memcache可以参考这篇博文,在passport将登录信息保存在Memcache中,却在blog.postcha.com下获取不到缓存的用户信息。

平时在使用Memcache时,value保存的都是对象信息,因为这样取出来强转一下赋给实体即可。而在这次保存用户登录信息里也采用了保存对象的方法,却无论如何在blog.postcha.com页面获取不到数据。

各种百度/Google,博客园、CSDN、各大论坛咨询也毫无进展,同时自己也是各种排错,各种测试,忙活了一天。在cookie传输过程中,key没有变,二个应用程序的Instance都一样。最后,直接在本地新建了二个测试应用,只测试memcache功能,结果应用之间缓存可以互相获取。因为我用的是同样的memcache代码,在新建的应用中却可以,而在线上passport和blog中却不可以,仔细比较发现,我新建的测试应用里测试的时候value存的是字符串,而在Passport中value存储的是一个对象。果断将原先的对象转换为json字符串存入value,结果在blog中就顺利获得了数据。

因为在同一个应用内,mem存储的不管是对象还是字符串,都可以获取,所以一开始并没有想到是这个问题。

这也算是自己爬过的一个坑吧,故记录之。

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。

http://blog.postcha.com/read/33 记一次在Windows2008服务器下Memcached获取值问题

1 条评论

  轻风拂面
轻风拂面
njhh214314,正好我最近遇到这个问题,谢谢!

登录后才能发表评论!