memcached客户端和连接池
2016-01-21 17:34
330 查看
链接:
http://my.oschina.net/u/1475616/blog/330232#
前阵子在网上找了个demo学了一下memcached的简单使用.
今天回顾了一下,我想:连接池不是应该算是服务端管理的东西么,Client应该是客户端管理的东西,怎么能放在同一个class里边呢?于是把demo改了改,代码如下:
服务端:
?
客户端:
?
先运行服务端,发现马上程序就结束了;感觉有点儿不对劲;
然后运行客户端,果然什么也没存进去,什么也没取到;
日志里出现这样的提示:Attempting to get SockIO from uninitialized pool!
想了想,可能是连接池初始化以后又马上被销毁了;
于是把服务端改成如下这样:
?
让服务端卡在那里等待输入,然后运行客户端,这样会不会就可以从连接池获取到连接了呢?
...
...
果然还是不行;
依然提示:Attempting to get SockIO from uninitialized pool!
难道这两部分代码一定要放在同一个类文件中么?这是什么鬼逻辑;
回头查看公司项目里memcached部分的代码,也是把连接池和创建Client实例的逻辑分开在两个类文件里的,没有任何问题;
想来想去,做了个伪分开,把Client作为服务端的一个静态变量,和线程池一起初始化,然后在另一个类里调用这个Client进行存取,这个自然是可以的;
后来又想到,公司的项目是web项目,是部署在web容器里的,会不会因为Client和线程池对象都在同一个classloader或context里,所以才可以互相找到呢?
但是这个没法验证啊,还得写一个web版的demo,太费劲了,,,
于是,写了这样一样东西:Together类,有两个field,一个Client,一个Server分别是持有缓存Client和连接池对象的独立的类;在初始化Together对象的时候,分别将client和Pool在各自的构造方法中初始化,然后在Together对象中调用Client里的缓存Client进行存取;
代码如下:
Together:
?
Server端:
?
Client端:
?
这样一来,MemCachedClient和SockIOPool就分开了,只是在实例化的时候两个实例处在同一个classloader里;
这样调用,发现可以进行数据的存取了;
看来互相找不到是一种类似不在同一个会话环境的问题;
我在网上百度了一天,也没发现有人吧Client和Pool的初始化分开写的demo,能找到的demo总共就俩,都是写在一起的;
可能这个pool不算是服务端吧,或者Client不算是客户端;
公司的项目里是把Client作为一个单例,用的时候getInstance来取得后进行数据的保存和查找的;
http://my.oschina.net/u/1475616/blog/330232#
前阵子在网上找了个demo学了一下memcached的简单使用.
今天回顾了一下,我想:连接池不是应该算是服务端管理的东西么,Client应该是客户端管理的东西,怎么能放在同一个class里边呢?于是把demo改了改,代码如下:
服务端:
?
?
然后运行客户端,果然什么也没存进去,什么也没取到;
日志里出现这样的提示:Attempting to get SockIO from uninitialized pool!
想了想,可能是连接池初始化以后又马上被销毁了;
于是把服务端改成如下这样:
?
...
...
果然还是不行;
依然提示:Attempting to get SockIO from uninitialized pool!
难道这两部分代码一定要放在同一个类文件中么?这是什么鬼逻辑;
回头查看公司项目里memcached部分的代码,也是把连接池和创建Client实例的逻辑分开在两个类文件里的,没有任何问题;
想来想去,做了个伪分开,把Client作为服务端的一个静态变量,和线程池一起初始化,然后在另一个类里调用这个Client进行存取,这个自然是可以的;
后来又想到,公司的项目是web项目,是部署在web容器里的,会不会因为Client和线程池对象都在同一个classloader或context里,所以才可以互相找到呢?
但是这个没法验证啊,还得写一个web版的demo,太费劲了,,,
于是,写了这样一样东西:Together类,有两个field,一个Client,一个Server分别是持有缓存Client和连接池对象的独立的类;在初始化Together对象的时候,分别将client和Pool在各自的构造方法中初始化,然后在Together对象中调用Client里的缓存Client进行存取;
代码如下:
Together:
?
?
?
这样调用,发现可以进行数据的存取了;
看来互相找不到是一种类似不在同一个会话环境的问题;
我在网上百度了一天,也没发现有人吧Client和Pool的初始化分开写的demo,能找到的demo总共就俩,都是写在一起的;
可能这个pool不算是服务端吧,或者Client不算是客户端;
公司的项目里是把Client作为一个单例,用的时候getInstance来取得后进行数据的保存和查找的;
相关文章推荐
- 使用百度地图时出现com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache
- 如何设置memcached来共享php的session
- php整合memcached
- Linux 缓存之memcached详解
- memcached
- php5-memcached比php5-memcache速度略快一点
- ITOO4.1之缓存—分布式缓存Memcached学习(理论篇)
- 网站缓存技术(Redis、Memcached、Ehcache)
- memcached&redis等分布式缓存的实现原理
- Memcache1.4.25服务器端安装和启动
- Installing the PHP "memcached" Extension on OS X 10.9 Mavericks / 10.10 Yosemite / 10.11 El Capitan
- php无法加载Memcache缓存模块问题及Memcache的安装
- PHP内存缓存功能memcached
- Key/Value之王Memcached初探:一、掀起Memcached的盖头来
- Memcached Java Client API详解
- 安装memcache
- Memcache存储大数据的问题
- Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
- memcached源码分析-----item过期失效处理以及LRU爬虫
- Redis与Memcached对比