Redis进阶攻略

1 篇文章 0 订阅

Redis进阶

Redis.conf解析

Redis.conf是我们开启Redis服务器时使用的配置文件,关于Redis大多数设置都需要在配置文件中进行。

下面分析配置文件的常用的一些设置:

单位换算

在这里插入图片描述

includes 引入外部配置

NETWORK 网络相关配置——常用

################################## NETWORK #####################################

# 这里一些官方注释省略了... ...

 bind 192.168.37.100	# bind可以设置可以访问的ip(这里表示可以通过192.168.37.100来访问)
# ... ...


protected-mode yes		# 是否开启保护模式

# Accept connections on the specified port, default is 6379 (IANA #815344).
# If port 0 is specified Redis will not listen on a TCP socket.
port 6379				# 设置服务开启的端口

# 其他的配置一般使用默认配置即可

GENERAL 通用配置

################################# GENERAL #####################################

# ... ...

daemonize yes			# 是否以守护进程方式运行,默认为no,需要手动开启,让redis可以在后台运行

pidfile /var/run/redis_6379.pid		# 指定一个pid的文件路径

# Specify the server verbosity level.
# This can be one of:
# debug (a lot of information, useful for development/testing)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
loglevel notice			# 设置日志级别

logfile ""				# 日志文件的存放位置与文件名

databases 16			# 数据库的数量 默认为16

always-show-logo yes	# 是否总是显示Redis的Logo

SNAPSHOTTING 快照

就是进行持久化操作,因为Redis时存储在内存的,如果不进行持久化,一旦断电数据就会全部丢失

################################ SNAPSHOTTING  ################################

save 900 1				# 900s内至少1个key被修改,就进行持久化
save 300 10				# 300s内至少300个key被修改,就进行持久化
save 60 10000			# 60s内至少10000个key被修改,就进行持久化	


stop-writes-on-bgsave-error yes		# 持久化出错时是否还要继续运行redis服务

rdbcompression yes		# 是否压缩rdb文件,会消耗一些CPU的资源

rdbchecksum yes			# 保存rdb文件时是否进行错误检验

# The filename where to dump the DB
dbfilename dump.rdb		# 设置rdb文件名

dir ./					# rdb文件保存路径

REPLICATION 复制(主从复制)

SECURITY 安全策略

在这里插入图片描述

可以在配置文件设置redis密码,但是一般会在命令中设置:

192.168.37.100:6379> config get requirepass					# config get requirepass得到redis的密码
1) "requirepass"
2) ""
192.168.37.100:6379> config set requirepass "123456"		# set requirepass设置redis密码
OK

192.168.37.100:6379> ping									# 可以发现设置密码后无法直接ping了
(error) NOAUTH Authentication required.

192.168.37.100:6379> auth 123456							# auth + 密码可以进行登录
OK
192.168.37.100:6379> config get requirepass					# 此时可以查看密码,发现是之前设置的
1) "requirepass"
2) "123456"
192.168.37.100:6379> config set requirepass ""				# set "" 可以重新将密码删去
OK
192.168.37.100:6379> ping
PONG
192.168.37.100:6379> config get requirepass
1) "requirepass"
2) ""

CLIENTS 客户端配置

在这里插入图片描述

MEMORY MANAGEMENT 内存管理

# maxmemory <bytes>				# 给redis配置的最大内存容量

# maxmemory-policy noeviction	# 内存到达上限后进行的操作方式

APPEND ONLY MODE AOF配置

appendonly no						# aof是否开启(默认关闭)

appendfilename "appendonly.aof"		# 持久化的文件名

# 下面是持久化的方式
# appendfsync always				# 每次修改都会更新,比较消耗性能
appendfsync everysec				# 每秒执行一次更新,可能丢失这一秒的数据	
# appendfsync no					# 不执行更新,此时操作系统自己同步数据,速度最快

Redis持久化⭐

Redis由于是存储在内存的数据库,因此如果不进行持久化操作将数据保存到硬盘上,一旦断电,数据库中的数据就会全部消失。

Redis持久化的两种方式:

一、RDB(Redis DataBase)

将当前进程数据生成快照以二进制的方式保存到硬盘;

当进行恢复的时候,就把保存的快照重新读回内存;

RDB中Redis会单独创建一个子进程来进行持久化,子进程先将数据写入到一个临时文件中,等持久化结束后,用这个临时文件替换上次持久化好的文件。期间主进程不进行任何IO操作,因此确保了性能。

特点

  1. 适合大规模的数据恢复(占用空间少)

  2. 适合对数据完整性要求不高的(因为最后一次持久化出错时数据可能会丢失)

相关配置在配置文件SNAPSHOTTING 区域中配置

################################ SNAPSHOTTING  ################################

save 900 1				# 900s内至少1个key被修改,就进行持久化
save 300 10				# 300s内至少300个key被修改,就进行持久化
save 60 10000			# 60s内至少10000个key被修改,就进行持久化	

stop-writes-on-bgsave-error yes		# 持久化出错时是否还要继续运行redis服务

rdbcompression yes		# 是否压缩rdb文件,会消耗一些CPU的资源

rdbchecksum yes			# 保存rdb文件时是否进行错误检验

dbfilename dump.rdb		# 设置rdb文件名

dir ./					# rdb文件保存路径

二、AOF(Append Only File)

AOF是将我们所有的命令都记录下来(不包括查询的命令),恢复时就相当于通过保存的文件把所有命令再执行一遍。

再Append Only Model中配置:

appendonly no						# aof是否开启(默认关闭)

appendfilename "appendonly.aof"		# 持久化的文件名

# 下面是持久化的方式
# appendfsync always				# 每次修改都会更新,比较消耗性能
appendfsync everysec				# 每秒执行一次更新,可能丢失这一秒的数据	
# appendfsync no					# 不执行更新,此时操作系统自己同步数据,速度最快

当然因为保存的是命令,因此AOF进行持久化会比较消耗存储,一般我们都使用RDB方式。

修复持久化文件

在这里插入图片描述

可以通过redis-check-aof/rdb --fix + 文件名 对两种持久化文件进行修复。

消息订阅

Redis发布订阅是一种消息通信模式——发送者发送消息,订阅者就会接收消息。

类似微信公众号发送文章,关注者就会收到文章。

命令汇总

命令具体写法作用
SUBSCRIBESUBSCRIBE [channel] [channel]… …订阅一个或多个频道的信息
PUBLISHPUBLISH [channel] [message]将消息发送到指定的频道

用例

# ①订阅者订阅频道:
192.168.37.100:6379> SUBSCRIBE mychannel			# 开始订阅频道mychannel
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "mychannel"
3) (integer) 1

# ②此时操作发布者发布消息:
192.168.37.100:6379> PUBLISH mychannel hello		# 发布消息到频道mychannel
(integer) 1
192.168.37.100:6379> PUBLISH mychannel nihao
(integer) 1

# ③此时观察订阅者:
192.168.37.100:6379> SUBSCRIBE mychannel
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "mychannel"
3) (integer) 1
1) "message"				# message表示发送来消息
2) "mychannel"				# 提示频道信息
3) "hello"					# 发送的消息内容
1) "message"
2) "mychannel"
3) "nihao"

主从复制

简介

主从复制是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者是主节点(master),后者是从节点(slave),并且数据的复制是单向的,只能由主节点到从节点,Master主要用来进行写操作,Slave节点用来读操作。

想要实现主从复制,至少需要三个服务器开启(一个主服务器,两个从服务器)。因此需要复制并修改三个redis的配置文件,让三个服务器分别用三个配置文件来启动。

需要修改的内容: 1、端口port; 2、pid名字; 3、log文件名; 4、dump.rdb名字。

例如:

#主服务器:
port 6379
# ... ...
pidfile /var/run/redis_6379.pid
# ... ...
logfile "6379.log"
# ... ...
dbfilename dump6379.rdb

#从服务器1:
port 6380
# ... ...
pidfile /var/run/redis_6380.pid
# ... ...
logfile "6380.log"
# ... ...
dbfilename dump6380.rdb

#从服务器2:
port 6381
# ... ...
pidfile /var/run/redis_6381.pid
# ... ...
logfile "6381.log"
# ... ...
dbfilename dump6381.rdb

基础的一主二从服务器设置:

主服务器一般不用进行多余设置,需要设置的是从服务器

# 主服务器:6379端口
[root@localhost bin]# redis-server myconfig/redis6379.conf 			# 启动主服务器,使用redis6379.conf配置文件
[root@localhost bin]# redis-cli -h 192.168.37.100 -p 6379
192.168.37.100:6379> info replication								# 查看主从信息
# Replication
role:master															# 角色为主人
connected_slaves:2													# 有两个从服务器
slave0:ip=192.168.37.100,port=6380,state=online,offset=56,lag=1		# 从服务器信息
slave1:ip=192.168.37.100,port=6381,state=online,offset=56,lag=1		# 从服务器信息
master_replid:9305db612978ac32e79cde2a6e81d99c3b0ac9ce
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:56
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:56

# 从服务器1:6380端口
[root@localhost bin]# redis-server myconfig/redis6380.conf 			# 启动从服务器,使用配置文件
[root@localhost bin]# redis-cli -h 192.168.37.100 -p 6380		
192.168.37.100:6380> SLAVEOF 192.168.37.100 6379					# SLAVEOF命令将自己作为目标的从服务器
OK
192.168.37.100:6380> info replication								# 查看主从信息
# Replication
role:slave															# 角色为从服务器
master_host:192.168.37.100											# 主服务器信息
master_port:6379
master_link_status:up
master_last_io_seconds_ago:10
master_sync_in_progress:0
slave_repl_offset:42
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:9305db612978ac32e79cde2a6e81d99c3b0ac9ce
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:42
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:42


# 从服务器2:6381端口,与从服务器1类似
[root@localhost bin]# redis-server myconfig/redis6381.conf 
[root@localhost bin]# redis-cli -h 192.168.37.100 -p 6381
192.168.37.100:6381> SLAVEOF 192.168.37.100 6379
OK
192.168.37.100:6381> info replication
# Replication
role:slave
master_host:192.168.37.100
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:42
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:9305db612978ac32e79cde2a6e81d99c3b0ac9ce
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:42
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:28

手动由从服务器升级成主服务器:

通过命令slaveof no one让自己成为主服务器,其他从服务器可以更换主服务器为当前服务器。

全量赋值与增量复制

Slave 启动成功连接到 master 后会发送一个sync同步命令
Master 收到命令会启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行
完毕之后,master将传送整个数据文件到slave,并完成一次完全同步。

全量复制:slave服务器在收到数据库文件的数据后,将其存盘并加载到内存中。

增量复制:master继续将新的数据传给slave,完成同步

哨兵模式⭐

哨兵模式就是在主服务器宕机后自动选举主服务器的一种模式。

使用传统的主从复制模式来保证Redis的安全运行时,如果发生主服务器宕机的情况,需要手动去设置新的主服务器,修改从服务器的主人,这样手动操作是十分麻烦的,因此需要用到哨兵模式进行自动选举主服务器。

哨兵通过发送命令,让监控的Redis服务器返回自身状态,如果检测到主服务器宕机了,就会对一个从服务器进行升级为主服务器(如果是多哨兵模式,则需要通知其他哨兵服务器,进行投票选举主服务器,并且多哨兵模式下,各个哨兵之间也会互相监控)然后发布订阅模式,通知其他从服务器切换自己的主机。

启动哨兵

这里以单哨兵监控主服务器为例

在这里插入图片描述

创建哨兵的配置文件

[root@localhost bin]# vi myconfig/sentinel.conf

格式为sentinel monitor 自定义名字 ip port 1
在这里插入图片描述

启动三个redis服务器:

[root@localhost bin]# redis-server myconfig/redis6379.conf 
[root@localhost bin]# redis-server myconfig/redis6380.conf 
[root@localhost bin]# redis-server myconfig/redis6381.conf 
[root@localhost bin]# ps -ef | grep redis
root       1444      1  0 11:24 ?        00:00:00 redis-server 192.168.37.100:6379
root       1449      1  0 11:24 ?        00:00:00 redis-server 192.168.37.100:6380
root       1454      1  1 11:24 ?        00:00:00 redis-server 192.168.37.100:6381
root       1459   1317  0 11:24 pts/0    00:00:00 grep --color=auto redi

配置6379端口的redis为主服务器,其他两个为从服务器,过程同上,完成后效果:

在这里插入图片描述

此时启动哨兵:

[root@localhost bin]# redis-sentinel myconfig/sentinel.conf 

在这里插入图片描述

此时模拟主服务器宕机(这里手动shutdown)

在这里插入图片描述

查看两台原本的从服务器的状态,可以发现6381端口的服务器变成了主服务器,6380端口的服务器称为了他的从服务器。

在这里插入图片描述

在这里插入图片描述

并且,当原先的主服务器(6379)再次启动的时候,他不会再成为主服务器,而是作为现在的主服务器的从服务器存在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值