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服务启动时,都可以把磁盘上的数据再次加载到内存中。

  1. 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的启动目录,也可以自己配置。

  1. 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事务的常用命令
  1. 语法:multi

功能:用于标记事务块的开始。Redis会将后续的命令逐个放入队列中,然后才能使用EXEC命令原子化地执行这个命令序列。

返回值:开启成功返回OK

语法:exec

功能:在一个事务中执行所有先前放入队列的命令,然后恢复正常的连接状态。

如果在把命令压入队列的过程中报错,则整个队列中的命令都不会执行,执行结果报错;

  1. 语法:discard

功能:清除所有先前在一个事务中放入队列的命令,并且结束事务。

  1. 语法:watch key [key …]

功能:当某个事务需要按条件执行时,就要使用这个命令将给定的键设置为受监控的。如果被监控的key值在本事务外有修改时,则本事务所有指令都不会被执行。Watch命令相当于关系型数据库中的乐观锁。

返回值:监控成功,返回OK。

  1. 语法:unwatch

功能:清除所有先前为一个事务监控的键。

如果在watch命令之后你调用了EXEC或DISCARD命令,那么就不需要手动调用UNWATCH命令。

返回值:清除成功,返回OK。

redis消息的发布与订阅

  • redis为多个客户端之间通信引入了频道概念。客户端订阅频道,消息的发布者往频道发布消息,所有订阅此频道的客户端都能够接收到消息。
  • subscribe:订阅一个或者多个频道的消息
subscribe ch1 ch2 ch3
  • publish:将消息发布到频道
publish ch1 hello
  • psubscribe:支持通配符订阅一个或者多个频道

redis集群搭建

  1. 主从复制,主负责写从负责读,读写分离,主机数据更新后根据配置和策略,自动同步到从机。

搭建一主二从redis集群

  1. 搭建三台redis服务:使用一个redis模拟三台redis服务,提供三份redis配置文件,修改三份配置文件的端口号portpidfilelogfiledbfilename来模拟三个不同的redis服务,分别使用三个redis配件文件,启动三个redis服务
  2. 查看三台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

  1. 设置主从关系:设从不设主,主机不用任何变化,6379位主机,6380、6381位从机,在6380上执行slaveof 127.0.0.1 6379 表示从属于本机的6379。在6381上也执行slaveof 127.0.0.1 6379 。现在状态6379位主机,6380、6381位从机。
  2. 全量复制:一旦主从关系确定,会自动把主机上已有数据同步复制到从库。
  3. 增量复制:主机写数据会自动同步到从库。
  4. 在6380和6381上执行写操作无法执行只能读。
  5. 如果主机宕机,从机原地待命(还可以读但是数据不会再更新)。
  6. 主机恢复,一切恢复正常。
  7. 从机宕机:主机少一个从机其他从机不变,不受影响。
  8. 从机恢复:需要重新设置从属关系。
  9. 从机上位:主机宕机无法修复,可以找一个从机上位成为主机。
  • 从机断开原来的主从关系才能上位。在从机上执行salveof no one。表示不从属任何主机。
  • 重新设置主从关系,在其他从机上执行从属命令。
  1. 之前的主机恢复后重新设置从属关系,自行决定是否当主机还是从机,也可以当从机的从机。
  1. redis哨兵模式:主机宕机,从机自动上位
  • 搭建一个主从集群架构
  • 提供一个哨兵配置文件:在redis安装目录下创建配置文件:redis_entinel.conf
    添加内容sentinel monitor dc-redis 127.0.0.1 6379 2,表示:指定监控主机的ip地址,port端口,2表示得到哨兵的投票数(当哨兵投票数大于或者等于此数时切换主从关系它来当主机),该数字需要参照从机数量和服务器性能来决定。
  • 启动哨兵:单独窗口执行redis-sentinel /opt/redis-6.0.8/redis_sentinel.conf 端口号为26379
  • 主机宕机后 哨兵启动程序自动选择从机上位
  • 原主机恢复后自动从属于新的主机