Redis配置文件
-
在redis根目录提供redis.conf配置文件,如果不使用配置文件,redis会按照默认参数运行
-
网络配置
- port:指定redis服务使用的端口,默认使用6379
- bind:配置客户端连接redis服务时,所能使用的ip地址,默认使用127.0.0.1本机,通常使用真实IP
redis-cli -h ip地址 -p 端口号
redis-cli -h ip地址 -p 端口号 shutdown
关闭redis服务- tcp-keepalive:TCP连接保活策略,可以通过tcp-keepalive配置项来进行设置,单位为秒,假如设置为60秒,则server端会每60秒向连接空闲的客户端发起一次ACK请求,以检查客户端是否已经挂掉,对于无响应的客户端则会关闭其连接。如果设置为0,则不会进行保活检测。
-
常规配置
- logfile:指定日志文件名,如果不指定,Redis只进行标准输出。要保证日志文件所在的目录必须存在,文件可以不存在。还要在redis启动时指定所使用的配置文件,否则配置不起作用。
- loglevel:日志级别,开发阶段可以设置成debug,生产阶段通常设置为notice或者warning.
- databases:配置Redis数据库的个数,默认是16个
-
安全配置
- requirepass:配置Redis的访问密码。默认不配置密码,即访问不需要密码验证。此配置项需要在protected-mode=yes时起作用。使用密码登录客户端:redis-cli -h ip -p 6379 -a pwd
-
持久化配置
redis提供持久化策略,在适当的时机采用适当手段把内存中的数据持久化到磁盘中,每次redis服务启动时,都可以把磁盘上的数据再次加载到内存中。
- RDB策略:在指定时间间隔内、redis服务执行指定次数的写操作,会自动触发一次持久化操作(默认持久化策略)
1、save
:配置复合的快照触发条件,即Redis 在seconds秒内key改变changes次,Redis把快照内的数据保存到磁盘中一次。默认的策略是: 1分钟内改变了1万次
或者5分钟内改变了10次
或者15分钟内改变了1次
如果要禁用Redis的持久化功能,则把所有的save配置都注释掉。
2、stop-writes-on-bgsave-error:当bgsave快照操作出错时停止写数据到磁盘,这样能保证内存数据和磁盘数据的一致性,但如果不在乎这种一致性,要在bgsave快照操作出错时继续写操作,这里需要配置为no。
3、rdbcompression:设置对于存储到磁盘中的快照是否进行压缩,设置为yes时,Redis会采用LZF算法进行压缩;如果不想消耗CPU进行压缩的话,可以设置为no,关闭此功能。
4、rdbchecksum:在存储快照以后,还可以让Redis使用CRC64算法来进行数据校验,但这样会消耗一定的性能,如果系统比较在意性能的提升,可以设置为no,关闭此功能。
5、dbfilename:Redis持久化数据生成的文件名,默认是dump.rdb,也可以自己配置。
6、dir:Redis持久化数据生成文件保存的目录,默认是./即redis的启动目录,也可以自己配置。
- AOF策略:采用操作日志来记录在redis服务器上进行的每一次写操作
1、appendonly:配置是否开启AOF,yes表示开启,no表示关闭。默认是no。
2、appendfilename:AOF保存文件名
3、appendfsync:AOF异步持久化策略
always:同步持久化,每次发生数据变化会立刻写入到磁盘中。性能较差但数据完整性比较好(慢,安全)
everysec:出厂默认推荐,每秒异步记录一次(默认值)
no:不即时同步,由操作系统决定何时同步。4、no-appendfsync-on-rewrite:重写时是否可以运用appendsync,默认no,可以保证数据的安全性。
5、auto-aof-rewrite-percentage:设置重写的基准百分比
6、auto-aof-rewrite-min-size:设置重写的基准值
Redis事务
-
事务:把一组数据库命令放在一起执行,保证操作原子性,要么同时成功,要么同时失败。
-
Redis事务的常用命令
- 语法:multi
功能:用于标记事务块的开始。Redis会将后续的命令逐个放入队列中,然后才能使用EXEC命令原子化地执行这个命令序列。
返回值:开启成功返回OK
语法:exec
功能:在一个事务中执行所有先前放入队列的命令,然后恢复正常的连接状态。
如果在把命令压入队列的过程中报错,则整个队列中的命令都不会执行,执行结果报错;
- 语法:discard
功能:清除所有先前在一个事务中放入队列的命令,并且结束事务。
- 语法:watch key [key …]
功能:当某个事务需要按条件执行时,就要使用这个命令将给定的键设置为受监控的。如果被监控的key值在本事务外有修改时,则本事务所有指令都不会被执行。Watch命令相当于关系型数据库中的乐观锁。
返回值:监控成功,返回OK。
- 语法:unwatch
功能:清除所有先前为一个事务监控的键。
如果在watch命令之后你调用了EXEC或DISCARD命令,那么就不需要手动调用UNWATCH命令。
返回值:清除成功,返回OK。
redis消息的发布与订阅
-
redis为多个客户端之间通信引入了频道概念。客户端订阅频道,消息的发布者往频道发布消息,所有订阅此频道的客户端都能够接收到消息。
-
subscribe:订阅一个或者多个频道的消息
subscribe ch1 ch2 ch3
-
publish:将消息发布到频道
publish ch1 hello
-
psubscribe:支持通配符订阅一个或者多个频道
-
redis集群搭建
-
主从复制,主负责写从负责读,读写分离,主机数据更新后根据配置和策略,自动同步到从机。
搭建一主二从redis集群
-
搭建三台redis服务:使用一个redis模拟三台redis服务,提供三份redis配置文件,修改三份配置文件的端口号
port
、pidfile
、logfile
、dbfilename
来模拟三个不同的redis服务,分别使用三个redis配件文件,启动三个redis服务 -
查看三台redis服务在集群中的主从角色,默认情况下所有的redis服务都是主机,都可以写和读,都没有从机。三台redis服务互相独立。
info replication
127.0.0.1:6379> info replication # Replication role:master connected_slaves:0 master_replid:b307056ccf5deb18f185f555f8a5ba815b7c202d master_replid2:0000000000000000000000000000000000000000 master_repl_offset:0 second_repl_offset:-1 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0
-
设置主从关系:设从不设主,主机不用任何变化,6379位主机,6380、6381位从机,在6380上执行
slaveof 127.0.0.1 6379
表示从属于本机的6379。在6381上也执行slaveof 127.0.0.1 6379
。现在状态6379位主机,6380、6381位从机。 -
全量复制:一旦主从关系确定,会自动把主机上已有数据同步复制到从库。
-
增量复制:主机写数据会自动同步到从库。
-
在6380和6381上执行写操作无法执行只能读。
-
如果主机宕机,从机原地待命(还可以读但是数据不会再更新)。
-
主机恢复,一切恢复正常。
-