一、设置redis外网访问
更改redis.conf 文件
# vim redis.conf
bind 127.0.0.1 # 注释掉改行
protected-mode yes # 更改模式为no(redis3.2后)
二、设置密码验证
更改redis.conf配置文件
requirepass redhat
或者通过set设置
127.0.0.1:6284> config get requirepass # 查看密码设置
1) "requirepass"
2) ""
127.0.0.1:6284> config set requirepass "111" # 设置密码
OK
127.0.0.1:6284> config get requirepass # 已设置认证,无法继续访问
(error) NOAUTH Authentication required.
127.0.0.1:6284> auth "111" # 键入密码
OK
127.0.0.1:6284> config get requirepass
1) "requirepass"
2) "111"
三、redis主从复制
redis 主从复制特点
(1) master可以拥有多个slave
(2) 多个slave 可以连接同一个master 外,还可以连接到其他slave
(3) 主从复制不会阻塞master,在同步数据时,master可以继续处理client请求
(4) 提高系统的伸缩性
redis 主从复制过程
当配置好slave后,slave与master建立连接,然后发送sync命令。无论是第一次连接还是重新连接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。后台进程完成写文件后,master就发送文件给slave,slave将文件保存到硬盘上,再加载到内存中,接着master就会把缓存的命令转发给slave,后续master将收到的写命令发送给slave。如果master同时收到多个slave发来的同步连接命令,master只会启动一个进程来写数据库镜像,然后发送给所有的slave。
redis主从复制配置
安装多个实例
# cp redis.conf redis_slave.
# vim redis_slave.conf更改以下内容:
pidfile /var/run/redis_slave.pid
port 6378
logfile "/wh_k/redis-2.8.17/src/redis_slave.log"
dbfilename dump_slave.rdb
修改配置文件redis_slave.conf (主从配置)
# vim redis_slave.conf添加以下内容:
# slaveof <masterip> <masterport>
slaveof 192.168.61.128 6379
masterauth redhat # master主服务器有密码,需添加此配置,“redhat”为主服务器密码
启动slave连接数据库
# ./redis-server ../redis_slave.conf
# ./redis-cli -h 192.168.61.128 -p 6378
测试
mater端:127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> keys *
(empty list or set)slave端:192.168.61.128:6378> select 2
OK
192.168.61.128:6378[2]> keys *
(empty list or set)master端插入数据:127.0.0.1:6379[2]> set name zsh
OK
127.0.0.1:6379[2]> set age 20
OK
127.0.0.1:6379[2]> mget name age
1) "zsh"
2) "20"slave端测试:192.168.61.128:6378[2]> keys *
1) "name"
2) "age"
192.168.61.128:6378[2]> mget name age
1) "zsh"
2) "20"
查看角色(主、备)
192.168.61.128:6378[2]> info
# Replication
role:slave
四、redis事务
简单事务控制
127.0.0.1:6379[1]> set age 10
OK
127.0.0.1:6379[1]> multi # 标记事务块开始
OK
127.0.0.1:6379[1]> set age 15
QUEUED
127.0.0.1:6379[1]> set age 20
QUEUED
127.0.0.1:6379[1]> exec # 调用
1) OK
2) OK
127.0.0.1:6379[1]> get age
"20"
取消事务discard(事务回滚)
127.0.0.1:6379[1]> get age
"20"
127.0.0.1:6379[1]> multi
OK
127.0.0.1:6379[1]> set age 15
QUEUED
127.0.0.1:6379[1]> set age 10
QUEUED
127.0.0.1:6379[1]> discard
OK
127.0.0.1:6379[1]> get age
"20"
监视命令watch
watch 命令会监视给定的key,当exec 时候如果监视的key 从调用watch 后发生过变化,则整个事务会失败。也可以调用watch 多次监视多个key.这 样就可以对指定的key 加乐观锁了。注意watch 的key 是对整个连接有效的,事务也一样。如果连接断开,监视和事务都会被自动清除。当然了exec,discard,unwatch 命令都会清除连接中的所有监视。redis事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。127.0.0.1:6379[1]> get age
"20"
127.0.0.1:6379[1]> set name zsh
OK
127.0.0.1:6379[1]>
127.0.0.1:6379[1]> watch age
OK
127.0.0.1:6379[1]> multi
OK
127.0.0.1:6379[1]> incr age
QUEUED
127.0.0.1:6379[1]> incr name
QUEUED
127.0.0.1:6379[1]> exec
1) (integer) 21
2) (error) ERR value is not an integer or out of range
127.0.0.1:6379[1]> get age
"21" # age已发生变化
127.0.0.1:6379[1]> get name
"zsh" # name未变化
五、发布和订阅消息
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息,客户端可以订阅任意数量的频道。有新消息通过PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的另几个客户端
打开客户端1订阅消息:127.0.0.1:6379> SUBSCRIBE Wechat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "Wechat"
3) (integer) 1打开客户端2发布消息:127.0.0.1:6379> PUBLISH Wechat "Hello world !"
(integer) 1
127.0.0.1:6379> PUBLISH Wechat "Beautifull"
(integer) 1打开客户端1查看消息:127.0.0.1:6379> SUBSCRIBE Wechat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "Wechat"
3) (integer) 1
1) "message"
2) "Wechat"
3) "Hello world !"
1) "message"
2) "Wechat"
3) "Beautifull"
六、redis 数据备份与恢复
创建备份save
该命令将在 redis 安装目录中创建dump.rdb文件(默认src下)127.0.0.1:6379> SAVE
OK
恢复备份
将dump.rdb移至安装目录下启动服务即可。
后台备份bgsave
127.0.0.1:6379> bgsave
Background saving started
7、性能测试
redis 性能测试是通过同时执行多个命令实现的。
[root@Centos6 src]# ./redis-benchmark -n 10000 -q
PING_INLINE: 50505.05 requests per second
PING_BULK: 48309.18 requests per second
SET: 58823.53 requests per second
GET: 60975.61 requests per second
INCR: 60606.06 requests per second
LPUSH: 61349.69 requests per second
LPOP: 59880.24 requests per second
SADD: 61728.39 requests per second
SPOP: 59880.24 requests per second
LPUSH (needed to benchmark LRANGE): 64516.13 requests per second
LRANGE_100 (first 100 elements): 27777.78 requests per second
LRANGE_300 (first 300 elements): 11737.09 requests per second
LRANGE_500 (first 450 elements): 9115.77 requests per second
LRANGE_600 (first 600 elements): 6702.41 requests per second
MSET (10 keys): 39840.64 requests per second
为提升性能,可以采用管道技术:管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。
了解更多关注我哟!!!
扫一扫进入我的公众号。