以下测试均使用redis-cli
发布与订阅
普通订阅
- 第一个客户端执行
SUBSCRIBE first second
1) "subscribe"
2) "first"
3) (integer) 1
1) "subscribe"
2) "second"
3) (integer) 2
- 第二个客户端执行
PUBLISH second Hello
- 此时第一个客户端接收到Hello
1) "message"
2) "second"
3) "hello"
模式匹配订阅
- 第一个客户端执行
PSUBSCRIBE first.* second.*
- 第二个客户端执行
PUBLISH second.111 Hello
- 此时第一个客户端接收到Hello
1) "pmessage"
2) "second.*"
3) "second.111"
4) "hello"
主从复制
- 异步复制,每秒一次,不阻塞主&从服务器
- 一个主服务器,多个从服务器、一个从服务器,多个从服务器
- 复制功能可以单纯地用于数据冗余(data redundancy), 也可以通过让多个从服务器处理只读命令请求来提升扩展性(scalability): 比如说, 繁重的SORT命令可以交给附属节点去运行
- 可以通过复制功能来让主服务器免于执行持久化操作: 只要关闭主服务器的持久化功能, 然后由从服务器去执行持久化操作即可
- 在关闭主服务器上的持久化,并同时开启自动拉起进程的情况下,即便使用Sentinel来实现Redis的高可用性,也是非常危险的。应该禁止主服务器关闭持久化的同时自动拉起从服务器
系统中运行多个redis实例
网上很多方案都不够完善,下面给出完全的例子
cp -rfp /etc/redis.conf /etc/redis_6380.conf
cp -rfp /etc/init.d/redis /etc/init.d/redis_6380
mkdir /var/lib/redis_6380 && chown redis.redis /var/lib/redis_6380
在redis_6380.conf中修改如下内容:
port 6379 => 6380
pidfile /var/run/redis.pid => /var/run/redis_6380.pid
logfile /var/log/redis/redis.log => /var/log/redis/redis_6380.log
dir /var/lib/redis => /var/lib/redis_6380
在redis_6380中修改如下内容:
pidfile="/var/run/redis/redis.pid" => "/var/run/redis/redis_6380.pid"
lockfile=/var/lock/subsys/redis => /var/lock/subsys/redis_6380
下面进行测试:
redis-server --port 6379 &
redis-server --port 6380 &
终端1:
redis-cli -p 6379
set myname lichao
终端2:
redis-cli -p 6380
slaveof 127.0.0.1 6379
get myname
=> lichao