redis的主从服务器搭建和数据过期策略

1、redis的主从服务器搭建

1.1 下载redis的配置文件

官网下载地址Redis configuration | Redis

 1.2创建redis挂载文件目录

在/usr/local下创建software/redis目录

在redis目录下创建3个redis服务器以端口号命名的目录文件: 6379,6380,63801

在每个文件夹下都创建data, conf, 和logs文件夹。

  • data、conf和logs文件夹

  • conf:存储redis配置文件

  • logs: 存储redis日志文件

[root@localhost redis]# mkdir -p 6379/conf 6379/data 6379/logs
[root@localhost redis]# mkdir -p 6380/conf 6380/data 6380/logs
[root@localhost redis]# mkdir -p 6381/conf 6381/data 6381/logs

1.3 创建redis配置文件

1.3.1 上传配置文件

将官网下载的配置文件redis.conf上传到6379,6380,63801文件夹下的conf文件目录下

1.3.2 创建日志文件

在6379,6380,63801文件夹下的logs文件下创建redis.log文件  

[root@localhost redis]# touch 6379/logs/redis.log
[root@localhost redis]# touch 6380/logs/redis.log
[root@localhost redis]# touch 6381/logs/redis.log

1.3.3 修改配置文件权限

1.4 创建redis的master容器(redis_6379)

1.4.1修改配置文件

  • 修改6379/conf/redis.conf文件
[root@localhost redis]# vim 6379/conf/redis.conf
  • 显示文编编号

Shift+ Ctrl + ; set number

  74 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  75 bind 0.0.0.0


 93 # are explicitly listed using the "bind" directive.
 94 protected-mode no


 303 # output for logging but daemonize, logs will be sent to /dev/null
 304 logfile "/var/log/redis/redis_6379.log"
 305 
 306 # To enable logging to the system logger, just set 'syslog-enabled' to yes,

1.4.2  创建redis_6379启动容器

docker run -itd --name redis_6379 --privileged=true  -v

# 红色部分创建配置文件的文件路径,蓝色部分是redis镜像文件的路径(下面也是如此)

/usr/local/software/redis/6379/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /usr/local/software/redis/6379/data/:/data -v /usr/local/software/redis/6379/logs/redis.log:/var/log/redis.log -p 6379:6379 redis /usr/local/etc/redis/redis.conf

1.4.3 测试容器

  • 进入容器
[root@localhost redis]# docker exec -it redis_6379 bash
  • 运行redis客户端
root@0eb9147d8dd7:/data# redis-cli 
127.0.0.1:6379> ping
PONG

1.4.4 查看master容器IP

[root@localhost ~]# docker inspect redis_6379 |grep IPA
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.4",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.4",

1.5 创建redis从服务器(redis_6380)

1.5.1 修改配置文件

  • 修改6370/conf/redis.conf配置文件
[root@localhost redis]# vim 6380/conf/redis.conf
  74 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  75 bind 0.0.0.0


 93 # are explicitly listed using the "bind" directive.
 94 protected-mode no


 303 # output for logging but daemonize, logs will be sent to /dev/null
 304 logfile "/var/log/redis/redis_6380.log"
 305 
 306 # To enable logging to the system logger, just set 'syslog-enabled' to yes,


1253 
1254 appendonly yes
1255 
1256 # The name of the append only file (default: "appendonly.aof")


2051 # to suppress
2052 #
2053 # ignore-warnings ARM64-COW-BUG
2054 slave-read-only no
2055 replicaof 172.17.0.4 6379 # 172.17.0.4表示master容器的地址创建后可以再改

1.5.2 创建运行容器

docker run -itd --name redis_6380 --privileged=true  -v /usr/local/software/redis/6380/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /usr/local/software/redis/6380/data/:/data -v /usr/local/software/redis/6380/logs/redis.log:/var/log/redis/redis_6380.log -p 6380:6379 docker.io/redis /usr/local/etc/redis/redis.conf

 1.5.2 测试主从

127.0.0.1:6379> info Replication

 1.6 创建从服务器(redis_6381)

1.6.1修改配置文件

  • 修改6381/conf/redis.conf配置文件
[root@localhost redis]# vim 6381/conf/redis.conf
  74 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  75 bind 0.0.0.0


 93 # are explicitly listed using the "bind" directive.
 94 protected-mode no


303 # output for logging but daemonize, logs will be sent to /dev/null
 304 logfile "/var/log/redis/redis_6381.log"
 305 
 306 # To enable logging to the system logger, just set 'syslog-enabled' to yes,


1253 
1254 appendonly yes
1255 
1256 # The name of the append only file (default: "appendonly.aof")

2051 # to suppress
2052 #
2053 # ignore-warnings ARM64-COW-BUG
2054 slave-read-only no
2055 replicaof 172.17.0.4 6379 # 172.17.0.4表示master容器的地址

1.6.2 创建运行容器

docker run -itd --name redis_6381 --privileged=true  -v /usr/local/software/redis/6381/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /usr/local/software/redis/6381/data/:/data -v /usr/local/software/redis/6381/logs/redis.log:/var/log/redis/redis_6381.log -p 6381:6379 docker.io/redis /usr/local/etc/redis/redis.conf

1.6.3测试主从

127.0.0.1:6379> info Replication

1.7 查看主从情况

进入redis主服务器

2、redis的数据过期策略

        redis对有些key都设置了过期时间,时间一到自动删除key,但是redis保存了大量的key,要精准保证每个键的过期删除机制太消耗CPU,这对单线程的redis来说付出的代价比较大,因此Redis采用惰性删除定时任务删除机制实现过期键的内存回收。

- 惰性删除

        过期的key不删除,当redis读取到这些设用过期时间的key,redis会进行判断,如果超过了key设定的过期时间,会执行删除操作并返回空,这种策略是出于节省CPU成本考虑,不需要单独维护每个键的过期删除机制来处理过期键的删除。

        这种机制的优点是删除key只发生在客户端读取到了过期时间的key的时候会发生,所以删除操作占用的cpu会很少,缺点就是若大量的key过期不删除,而且在很长的一段时间都不没有被获取到,这些过期的key会占用大量的内存,导致内存泄漏(无用的垃圾数据占用了大量的内存空间)。正因为如此,Redis还提供另一种定时任务删除机制作为惰性删除的补充。


- 定时任务删除

        Redis内部维护一个定时任务,默认每秒运行10次(根据具体服务器运行情况而定)。定时任务中删除过期键逻辑采用了自适应算法,根据键的过期比例,随机抽取一些设置了过期时间的key,检查是否过期,如果过期就删除。。

        这种机制的优点是可以通过控制删除操作的时间和频率,来降低对CPU的占用,相比较key过期就删除的机制来说,对cpu的占用会少。定期删除key可以清除一些无用的垃圾,也并不是所有过期很长时间的key都会被清除,也会有很多会遗漏,这些过期的key没有被删除的也没有走惰性删除,最后也还是会堆积在内存里面,这时候就需要内存淘汰策略了。

参考文献:

Redis的过期策略和内存淘汰机制 - 知乎 (zhihu.com)

Redis学习笔记--Redis数据过期策略详解 - 法号阿兴 - 博客园 (cnblogs.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Redis主从服务器是一种常见的架构模式,用于提高Redis的可用性和性能。在主从服务器架构中,主服务器负责处理写操作,而从服务器负责处理读操作。 以下是Redis主从服务器的步骤: 1. 安装Redis:首先,在主服务器和从服务器上都需要安装Redis。你可以从Redis官方网站下载并安装Redis。 2. 配置主服务器:在主服务器的配置文件(redis.conf)中,找到并修改以下配置项: - 将`bind`配置项设置为主服务器的IP地址,以允许其他服务器连接。 - 将`protected-mode`配置项设置为`no`,以允许其他服务器连接。 - 将`port`配置项设置为主服务器的端口号。 - 将`daemonize`配置项设置为`yes`,以使Redis以守护进程方式运行。 - 将`logfile`配置项设置为日志文件的路径。 3. 启动主服务器:启动主服务器,确保它正常运行。 4. 配置从服务器:在从服务器的配置文件(redis.conf)中,找到并修改以下配置项: - 将`bind`配置项设置为从服务器的IP地址。 - 将`protected-mode`配置项设置为`no`。 - 将`port`配置项设置为从服务器的端口号。 - 将`daemonize`配置项设置为`yes`。 - 将`logfile`配置项设置为日志文件的路径。 - 将`slaveof`配置项设置为主服务器的IP地址和端口号,例如:`slaveof <主服务器IP> <主服务器端口号>`。 5. 启动从服务器:启动从服务器,确保它正常连接到主服务器。 6. 验证主从复制:在主服务器上执行写操作,然后在从服务器上执行读操作,确保数据同步正常。 7. 配置持久化:为了保证数据的持久性,你可以在主服务器和从服务器上配置RDB快照或AOF日志持久化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值