学习memcached的安装和java通讯
memcache需要libevent进行网络的通讯才能正常工作,所以安装memcache之前需要首先安装libevent. libevent可以从这儿下载,memcache需要从google code下载。
现在万事具备,开始安装的基本过程,如下所示:
#yum install gcc //确认gcc已经安装,可以gcc -v确认 #wget http://monkey.org/~provos/libevent-1.4.5-stable.tar.gz //下载最新的稳定版本 #tar xvzf libevent-1.4.4-stable.tar.gz //解压缩 #cd libevent-1.4.4-stable #./configure -prefix=/usr/local/libevent //开始编译 #make #make install
接着安装memcache.
#cd /home/mysoft/ #tar -zxvf memcached-1.4.5.tar.gz #cd memcached-1.5.0 #./configure --prefix=/usr/local/memcached --with-libevent=/usr/ #make #make install #ls -al /usr/local/memcached/bin //验证安装
如果没有问题,现在就可以正常启动memcached了,命令如下:
/usr/local/memcached/bin/memcached -d -m 100 -u root -l 192.168.1.101 -p 11211 -c 256 -P /tmp/memcached.pid
-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,我这里是100MB,
-u是运行Memcache的用户,我这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.1.100,
-p是设置Memcache监听的端口,我这里设置了11211,最好是1024以上的端口,我们这里统一使用11211-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照自己服务器的负载量来设定。
-P是设置保存Memcache的pid文件,我这里是保存在/tmp/memcached.pid
常见的启动失败信息有:
AA.启动时找不到libevent库
memcached: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory
解决办法1:将libevent库所在路径加入LIBRARY_PATH,在/etc/profile中加入
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/libevent/lib
解决办法2:
ln -s /libevent安装路径/libevent/lib/libevent-1.3b.so.1 /usr/lib/libevent-1.3c.so.1
详细的处理过程如下:
>locate libevent-1.4.so.2
libevent-1.4.so: /usr/local/lib/libevent-1.4.so.2
> ldd /usr/local/bin/memcached
linux-gate.so.1 => (0xb7fa4000)
libevent-1.4.so.2 => not found
libpthread.so.0 => /lib/libpthread.so.0 (0x0086e000)
libc.so.6 => /lib/libc.so.6 (0x006f7000)
/lib/ld-linux.so.2 (0x006d9000)
> LD_DEBUG=libs ./memcached -v
找到默认路径 /usr/lib/
>ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib/libevent-1.4.so.2
>ldd /usr/local/bin/memcached
linux-gate.so.1 => (0xb7ffd000)
libevent-1.4.so.2 => /usr/lib/libevent-1.4.so.2 (0xb7fdc000)
libpthread.so.0 => /lib/libpthread.so.0 (0x0086e000)
libc.so.6 => /lib/libc.so.6 (0x006f7000)
libnsl.so.1 => /lib/libnsl.so.1 (0x009f8000)
librt.so.1 => /lib/librt.so.1 (0×00887000)
libresolv.so.2 => /lib/libresolv.so.2 (0x00b29000)
/lib/ld-linux.so.2 (0x006d9000)
收工
AB.第二个可能的问题是编译memcache期间出现的,解决方案可以参考这儿
或者 在./configure 时加入参数–build=i686-pc-linux-gnu
AC.如果客户端连接不上,可能是服务器防火墙的原因,选择关闭或者增加相应的iptables文件如下:
#永久性生效,重启后不会复原
开启: chkconfig iptables on
关闭: chkconfig iptables off
#即时生效,重启后复原
开启: service iptables start
关闭: service iptables stop
#修改/etc/sysconfig/iptables文件,
添加-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 11211 -j ACCEPT
使用的方式可以有很多种,常见的语言api通过官方网站都能找到,比如php的参考这儿,需要memcached插件
Java的可以选择这个spymemcached或者java memcached,其他语言的可以从这个列表中查找。