redis简介
redis单纯程模型,支持主从模式服务器拒绝了你发送离线文件,提高可用性,是一个开源项目,经常用来当一个数据结构服务器。其是内存级别的缓存服务器并可实现持久化功能. 据称一百万的变量存储(字串)占用100M内存空间,单台redis服务器可达到5万并发的能力。
redis与memcache的对比redis的优势memcache优势redis的组件redis的工作端口redis-cli命令的参数redis-cli中相关的命令与服务器端支持的命令与订阅相关的命令redis的认证功能
vim /etc/redis.conf
requirepass zhenping.com
重启redis服务
systemctl restart redis
连接redis并认证的方法
redis-cli -h 172.16.36.70
172.16.36.70:6379> select 0
(error) NOAUTH Authentication required.
172.16.36.70:6379> auth zhenping
OK
redis清空数据库redis的事务功能
通过multi,exec,watch等命令来实现事务功能,将多个命令打包,多个命令按顺序执行,并一次执行完成,并将执行结果一次性全部返回给客户端。redis事务不支持回滚操作网赚项目,在事务中应避免发生错误(如命令写错等),事务了也将会执行失败。
####建立一个事务
[root@Centos7 ~]# redis-cli -h 172.16.36.70
172.16.36.70:6379> multi
OK
172.16.36.70:6379> set ip 172.16.36.70
QUEUED
172.16.36.70:6379> get ip
QUEUED
172.16.36.70:6379> set prot 8080
QUEUED
172.16.36.70:6379> exec
1) OK
2) "172.16.36.70"
3) OK
####使用watch机制监控键
[root@Centos7 ~]# redis-cli -h 172.16.36.70
172.16.36.70:6379> watch ip
OK
172.16.36.70:6379> multi
OK
172.16.36.70:6379> set ip 172.16.36.71
QUEUED
172.16.36.70:6379> get ip
QUEUED
172.16.36.70:6379> exec
(nil)
说明: 当watch ip指令发出后,其它的请求操作改变了IP键的值,此时新发起的事务中,如果也要改变其值, 此事务申请将会失败
redis的发布和订阅功能(publish/subscribe)
发布和订阅功能被广泛用于构建即时通信应用,比如:网络聊天室和实时广播、实时提醒等。 订阅发布功能就能帮你很轻松地实现通知、监控程序
1、订阅一个频道:
72.16.36.70:6379> subscribe news
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "news"
3) (integer) 1
2、向频道发送消息
172.16.36.70:6379> publish news weizhenping
(integer) 1
3、频道会接收下来消息
[root@Centos7 ~]# redis-cli -h 172.16.36.70
172.16.36.70:6379> subscribe news
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "news"
3) (integer) 1
1) "message"
2) "news"
3) "weizhenping" #此内容为频道发送过来的消息
基于模式的频道订阅示例
1、基于模式订阅频道
[root@Centos7 ~]# redis-cli -h 172.16.36.70
172.16.36.70:6379> PSUBSCRIBE news.i[to] #订阅了news.io,news,io两个频道
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news.i[to]"
3) (integer) 1
2、向频道发送消息
172.16.36.70:6379> PUBLISH news.io hello
(integer) 1
3、频道会接收下来消息
[root@Centos7 ~]# redis-cli -h 172.16.36.70
172.16.36.70:6379> PSUBSCRIBE news.i[to]
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news.i[to]"
3) (integer) 1
1) "pmessage"
2) "news.i[to]"
3) "news.io"
4) "hello"
redis的持久化功能RDB相关的配置参数(/etc/redis/redis.conf)2、AOF(append only file)AOF重写过程AOF相关的配置参数(/etc/redis/redis.conf)redis的主从复制2、复制的工作原理3、主从相关配置(/etc/redis.conf)redis高可用的实现工作过程sentinel下线机制setinel程序专用配置文件redis-sentinel.conf配置参数sentinel专用命令
实验环境说明:
172.16.36.70 : redis主节点
172.16.36.71 : redis从节点
172.16.36.72 : redis从节点
172.16.36.74 : sentinel节点1
172.16.36.75 : sentinel节点2
172.16.36.76 : sentinel节点3
####配置redis主节点
操作主机: 172.16.36.70
#vim /etc/redis.conf
bind 172.16.36.70
daemonize yes
启动服务
#redis-server /etc/redis.conf
[root@Centos7 ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 172.16.36.70:6379 *:*
####配置redis从节点
操作主机: 172.16.36.71
#vim /etc/redis.conf
bind 172.16.36.71
daemonize yes
启动服务
#redis-server /etc/redis.conf
[root@Centos7 ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 172.16.36.70:6379 *:*
配置主节点信息
[root@Centos7 ~]# redis-cli -h 172.16.36.71 -p 6379
172.16.36.71:6379> SLAVEOF 172.16.36.70 6379
OK
操作主机: 172.16.36.72
#vim /etc/redis.conf
bind 172.16.36.72
daemonize yes
启动服务
#redis-server /etc/redis.conf
[root@Centos7 ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 172.16.36.70:6379 *:*
配置主节点信息
[root@Centos7 ~]# redis-cli -h 172.16.36.71 -p 6379
172.16.36.71:6379> SLAVEOF 172.16.36.70 6379
OK
####配置sentinel节点
操作主机: 172.16.36.74
# vim /etc/redis-sentinel.conf
port 26379
dir "/tmp"
daemonize yes
sentinel monitor mymaster 172.16.36.70 6379 2
sentinel parallel-syncs mymaster 3
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 180000
启动服务
redis-sentinel /etc/redis-sentinel.conf
查看服务启动状态
users:(("master",2112,14))
[root@Centos7 ~]# ss -tln
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:26379 *:*
操作主机: 172.16.36.75
# vim /etc/redis-sentinel.conf
port 26379
dir "/tmp"
daemonize yes
sentinel monitor mymaster 172.16.36.70 6379 2
sentinel parallel-syncs mymaster 3
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 180000
启动服务
redis-sentinel /etc/redis-sentinel.conf
查看服务启动状态
users:(("master",2112,14))
[root@Centos7 ~]# ss -tln
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:26379 *:*
操作主机: 172.16.36.76
# vim /etc/redis-sentinel.conf
port 26379
dir "/tmp"
daemonize yes
sentinel monitor mymaster 172.16.36.70 6379 2
sentinel parallel-syncs mymaster 3
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 180000
启动服务
redis-sentinel /etc/redis-sentinel.conf
查看服务启动状态
users:(("master",2112,14))
[root@Centos7 ~]# ss -tln
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:26379 *:*
查看sentinel相关的日志信息
tailf /var/log/redis/redis-sentinel.log
[32524] 25 Mar 10:05:02.290 # Sentinel runid is a44025e518b65c512340c48535df119496f7a0d8
[32524] 25 Mar 10:05:02.291 # +monitor master mymaster 172.16.36.70 6379 quorum 2
[32524] 25 Mar 10:05:32.322 # +sdown slave 172.16.36.71:6379 172.16.36.71 6379 @ mymaster 172.16.36.70 6379
[32524] 25 Mar 10:05:46.311 * +sentinel sentinel 172.16.36.76:26379 172.16.36.76 26379 @ mymaster 172.16.36.70 6379
[32524] 25 Mar 10:05:57.071 * +sentinel sentinel 172.16.36.75:26379 172.16.36.75 26379 @ mymaster 172.16.36.70 6379
[32524] 25 Mar 10:09:03.727 # +sdown master mymaster 172.16.36.70 6379
将当前的Master节点shudown,查看sentinel的相关日志信息
[32524] 25 Mar 10:09:03.747 # +new-epoch 4
[32524] 25 Mar 10:09:03.749 # +vote-for-leader 90c011868befc3047a8527886efce8f8c6f9ea34 4
[32524] 25 Mar 10:09:03.836 # +odown master mymaster 172.16.36.70 6379 #quorum 3/2
[32524] 25 Mar 10:09:03.836 # Next failover delay: I will not start a failover before Fri Mar 25 10:15:04 2016
[32524] 25 Mar 10:09:04.854 # +config-update-from sentinel 172.16.36.75:26379 172.16.36.75 26379 @ mymaster 172.16.36.70 6379
[32524] 25 Mar 10:09:04.854 # +switch-master mymaster 172.16.36.70 6379 172.16.36.72 6379
[32524] 25 Mar 10:09:04.855 * +slave slave 172.16.36.71:6379 172.16.36.71 6379 @ mymaster 172.16.36.72 6379
[32524] 25 Mar 10:09:04.856 * +slave slave 172.16.36.70:6379 172.16.36.70 6379 @ mymaster 172.16.36.72 6379
对当前主节点监控sentinel的活跃探测信息
root@Centos7 ~]# redis-cli -h 172.16.36.72
172.16.36.72:6379> monitor
OK
1458878723.052705 [0 172.16.36.76:53255] "PING"
1458878723.402835 [0 172.16.36.75:38413] "PING"
1458878723.586806 [0 172.16.36.74:32824] "PING"
1458878723.859748 [0 172.16.36.75:38413] "PUBLISH" "__sentinel__:hello" "172.16.36.75,26379,90c011868befc3047a8527886efce8f8c6f9ea34,4,mymaster,172.16.36.72,6379,4"
1458878724.099837 [0 172.16.36.76:53255] "PING"
1458878724.152776 [0 172.16.36.76:53255] "PUBLISH" "__sentinel__:hello" "172.16.36.76,26379,21a0a795010287138b6efc636d03edcce66bcd56,4,mymaster,172.16.36.72,6379,4"
1458878724.454214 [0 172.16.36.75:38413] "PING"
1458878724.617819 [0 172.16.36.74:32824] "PING"
1458878724.693888 [0 172.16.36.74:32824] "PUBLISH" "__sentinel__:hello" "172.16.36.74,26379,a44025e518b65c512340c48535df119496f7a0d8,4,mymaster,172.16.36.72,6379,4"
使用info sentinel命令查看主从信息
172.16.36.74:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=mymaster,status=ok,address=172.16.36.72:6379,slaves=2,sentinels=3
Redis Clustering
在redis3.0版本中引入clustering功能, 是去中心化的分布式数据库,通过分片机制进行数据分布,clustering内的每个节点仅有数据库一部分数据,每个节点都有全局元数据,通过查找元数据,即可查询到数据存放在哪台服务器
分布式解决方案缺点Codis(豌豆荚)有后台界面缺点不支持主从复制 ,需要另外实现Codis采用proxy方案,所有必然会带来单机性能的损失Redis Cluster(官方)缺点号外号外:
现在我们公众号推出参与奖和互动奖,凡是通过微信与我们参与讨论互动最多的朋友,将获得我们送出的神秘礼物,还有机会获得Ansible中文官网马上将出版的新书哦! 我们将不定期的推出奖励计划 ! 奖励多多,小伙伴们,一起来吧!
以上是今天为大家带来的内容服务器拒绝了你发送离线文件,如果有任何问题,大家也可以添加以下QQ群参与问题的讨论。关于我们: