# 1、修改从库redis.conf配置文件 #配置从库redis.conf配置文件(先装redis) #添加一行,主库IP地址及端口 vim /application/redis/conf/redis.conf # slaveof <masterip> <masterport> slaveof 192.168.200.95 6379 # 2、重启从库redis服务 pkill redis redis-server /application/redis/conf/redis.conf & #启动提示 7815:S 23 Nov 19:48:52.059 # Server started, Redis version 3.0.5 7815:S 23 Nov 19:48:52.060 * The server is now ready to accept connections on port 6379 7815:S 23 Nov 19:48:53.060 * Connecting to MASTER 192.168.200.95:6379 -->跟主库建立连接 7815:S 23 Nov 19:48:53.060 * MASTER <-> SLAVE sync started -->主从同步已经开始 7815:S 23 Nov 19:48:53.062 * Non blocking connect for SYNC fired the event. 7815:S 23 Nov 19:48:53.074 * Master replied to PING, replication can continue... -->主从ping可以继续 7815:S 23 Nov 19:48:53.075 * Partial resynchronization not possible (no cached master) 7815:S 23 Nov 19:48:53.087 * Full resync from master: 24b26f7abc62830a7ff97516c960ba7fc0992da9:1 7815:S 23 Nov 19:48:53.122 * MASTER <-> SLAVE sync: receiving 32 bytes from master -->接收到字节数 7815:S 23 Nov 19:48:53.122 * MASTER <-> SLAVE sync: Flushing old data 7815:S 23 Nov 19:48:53.122 * MASTER <-> SLAVE sync: Loading DB in memory 7815:S 23 Nov 19:48:53.122 * MASTER <-> SLAVE sync: Finished with success -->成功 # 3、测试主从同步 # 主库:写数据 [root@localhost redis]# redis-cli 127.0.0.1:6379> set test1 oldsuo OK # 从库: [root@localhost conf]# redis-cli -h localhost -p 6379 monitor -->开启实时监控 OK 1448280033.096372 [0 192.168.200.95:6379] 1448280043.125830 [0 192.168.200.95:6379] 1448280053.154134 [0 192.168.200.95:6379] 1448280070.858808 [0 192.168.200.95:6379] 1448280070.858828 [0 192.168.200.95:6379] -->主库添加数据,从库同步 [root@localhost redis]-->从库同步成功
redis 主从同步
至于 redis 的负载均衡,方案有很多: LVS、keepalived、Twemproxy 小编有时间再补上吧...
reidis 负载均衡
2、Python 操作 Redis
python 安装 redis 模块:
$ sudo pip install redis or $ sudo easy_install redis or $ sudo python setup.py install 详见:https://github.com/WoLpH/redis-py https://pypi.python.org/pypi/redis https://redislabs.com/python-redis
API 的使用 1> 操作模式
redis-py 提供两个类 Redis 和 StrictRedis 用于实现 Redis 的操作命令,StrictRedis 用于实现大部分官方的命令,并使用官方的语法和命令,Redis 是 StrictRedis 的子类,用于向后兼容旧版本的 redis-py
import redis r = redis.Redis(host=, port=6379) r.set(, ) )
2> 连接池redis-py 使用 connection pool 来管理对一个 redis server 的所有连接,避免每次建立、释放连接带来的额外开销。默认每个 Redis 实例都会维护着一个自己的连接池。也可以覆盖直接建立一个连接池,然后作为参数 Redis,这样就可以实现多个 Redis 实例共享一个连接池资源。实现客户端分片或有连接如何管理更细的颗粒控制。
pool = redis.ConnectionPool(host=, port=6379) r = redis.Redis(connection_pool=pool) r.set(, ) )
3> 操作分为五种数据类型,见下图:
① String 操作,String 在内存中格式是一个 name 对应一个 value 来存储
set(name, value, ex=None, px=None, nx=False, xx=False)
# 在Redis中设置值,默认,不存在则创建,存在则修改 # 参数: ex,过期时间(秒) px,过期时间(毫秒) nx,如果设置为True,则只有name不存在时,当前set操作才执行 xx,如果设置为True,则只有name存在时,岗前set操作才执行
setnx(name, value)
# 设置值,只有name不存在时,执行设置操作(添加)
setex(name, value, time)
# 设置值 # 参数: time,过期时间(数字秒 或 timedelta对象)
psetex(name, time_ms, value)
# 设置值 # 参数: time_ms,过期时间(数字毫秒 或 timedelta对象)
mset(*args, **kwargs)
# 批量设置值 # 如: mset(k1=, k2=) 或 mget({: , : })
get(name)
# 获取值
mget(keys, *args)
# 批量获取 # 如: mget(, ) 或 r.mget([, ])
getset(name, value)
# 设置新值并获取原来的值
getrange(key, start, end)
name,Redis 的 name start,起始位置(字节) end,结束位置(字节) # 如: "索宁" ,0-3表示 "索"
setrange(name, offset, value)