---->

二、MemCached缓存技术
1、基本原理和体系结构
MemCached通过一个路由算法(由客户端决定),来决定数据保存到哪一个节点上

2、安装和配置
前提2:安装libevent
(1) 确定、删除自带的libevent
rpm -qa|grep libevent =-==> 确定是否已有
rpm -e libevent-2.0.21-4.el7.x86_64 --nodeps (不要删除相关的依赖)
(2) tar -zxvf libevent-2.0.21-stable.tar.gz
(3) 安装到: /root/training/libevent
./configure --prefix=/root/training/libevent
make
make install
启动:./memcached -u root -d -m 128 -p 11211
./memcached -u root -d -m 128 -p 11212
./memcached -u root -d -m 128 -p 11213
3、操作MemCached
(1)命令行:telnet
telnet 127.0.0.1 11211
import java.io.Serializable;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Future;
import org.junit.Test;
import net.spy.memcached.MemcachedClient;
public class TestMemCached {
@Test
public void testInsert() throws Exception{
MemcachedClient client = new MemcachedClient(new InetSocketAddress("192.168.157.11", 11211));
Future<Boolean> f = client.set("key1", 0, "HelloWorld");
if(f.get().booleanValue()){
client.shutdown();
}
}
@Test
public void testInsertObject() throws Exception{
MemcachedClient client = new MemcachedClient(new InetSocketAddress("192.168.157.11", 11211));
Future<Boolean> f = client.set("stu001", 0, new Student());
if(f.get().booleanValue()){
client.shutdown();
}
}
@Test
public void testGet() throws Exception{
MemcachedClient client = new MemcachedClient(new InetSocketAddress("192.168.157.11", 11211));
Object obj = client.get("key1");
System.out.println(obj);
client.shutdown();
}
@Test
public void testInsertList() throws Exception{
List<InetSocketAddress> list = new ArrayList<>();
list.add(new InetSocketAddress("192.168.157.11", 11211));
list.add(new InetSocketAddress("192.168.157.11", 11212));
list.add(new InetSocketAddress("192.168.157.11", 11213));
MemcachedClient client = new MemcachedClient(list);
for(int i=0;i<20;i++){
System.out.println("插入的数据是:" + "key"+i+" "+"value"+i);
client.set("key"+i, 0, "value"+i);
Thread.sleep(1000);
}
client.shutdown();
}
}
class Student implements Serializable{
}
5、MemCached主主复制功能(双机热备)
(1)不能使用官方的版本
一个日本的工程师改写了官方的版本,支持主主复制功能
memcached-1.2.8-repcached-2.2.tar.gz
(2)准备两台:bigdata11 bigdata12
(*) tar -zxvf memcached-1.2.8-repcached-2.2.tar.gz
(*) ./configure --prefix=/root/training/memcached_replication --with-libevent=/root/training/libevent --enable-replication
make
错误:error: ‘IOV_MAX’ undeclared (first use in this function)
vi memcached.c
55
56 #ifndef IOV_MAX
57 //#if defined(__FreeBSD__) || defined(__APPLE__)
58 # define IOV_MAX 1024
59 //#endif
60 #endif
make install
(3) 启动:需要指定对端的Memcached地址: -x参数
bigdata11: ./memcached -d -u root -m 128 -x bigdata12
bigdata12: ./memcached -d -u root -m 128 -x bigdata11
错误:
./memcached: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file:
No such file or directory
判断:命令memcached依赖的库有哪些?
ldd memcached
linux-vdso.so.1 => (0x00007ffee936b000)
libevent-2.0.so.5 => not found
libc.so.6 => /lib64/libc.so.6 (0x00007fc26923e000)
/lib64/ld-linux-x86-64.so.2 (0x00005579c379b000)
创建一个连接,让系统的libevent-2.0.so.5 指向我们自己的libevent-2.0.so.5
(64位系统) ln -s /root/training/libevent/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5
(32位系统) ln -s /root/training/libevent/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5
telnet退出: ctrl + ]
三、Redis内存数据库