版本:Redis server version 2.2.14
客户端:python-redis2.4.9
redis安装路径/usr/local/redis/
1.复制(http://redis.io/topics/replication)
cd /home/cc cp /usr/local/redis/redis.conf redis_m.conf cp /usr/local/redis/redis.conf redis_s.conf
编辑redis_m.conf
dbfilename dump_m.rdb
port 6379
编辑redis_s.conf
dbfilename dump_s.rdb
port 6380
slaveof 127.0.0.1 6379
注. redis每次启动的时候,都后从dbfilename里读取数据到内存中。
启动redis服务,主服务器和从服务器
redis-server redis_m.conf
redis-server redis_s.conf
客户端代码
#!/usr/bin/env python #coding=utf-8 import redis m = redis.Redis(host='127.0.0.1',port=6379,db=0) s = redis.Redis(host='127.0.0.1',port=6380,db=0)
#往主服务器中插入10条记录 for i in range(10): m.set(str(i),str(i)) #查看从服务器中是否有有记录 for i in range(10): print s.get(str(i))
2. 复制的特性
1. 一台主服务器可以被多台从服务器连接
2. master-salver可形成环状
3. salver端是非阻塞
4. 执行只读查询时可以使用多台从服务器,我觉得有些问题:
for i in range(100000): m.lpush('list',str(i)) m.sort('list',desc=True)
断掉slaver和没有断掉slaver花费的时间差不多的。不知道是不是我的想法有问题。
5. save的过程可以放在slaver上运行。
对于复制的过程是:
主服务器开始后台保存,并且收集所有将对数据集进行修改的新指令。当后台保存操作完成时,主服务器会将保存在磁盘中的数据库文件同步至从服务器,并将数据加载到内存中。主服务器接着会发送给从服务器所有累计的指令,以及所有从客户端收集到的将对数据集进行修改的指令。这个过程将以一个与Redis自身协议相同格式的命令流执行。简单来是,就是把db文件同步过去,然后就是累计的修改指令。