redis

本文介绍了Redis的复制、哨兵和集群方案。复制涉及主从节点手动切换,哨兵通过监控和发布订阅自动切换主节点。集群在大数据量下采用分布式存储,通过rediscluster创建并配置主从节点,保证数据安全。文中还提到了Redis的事务特性和持久化方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 复制(主从节点,如果主节点宕机需要手动切换)
  • 哨兵(使用哨兵进程对多redis节点监控,使用发布订阅修改redis配置(使修改后的配置文件生效可以使用 ./redis-server /home/username/redis/redis.conf),实现自动切换主节点)
  • 集群(数据量大的情况下,单一节点无法完全存储,采用分布式方式对数据分片存储):
    采用rediscluster集群方案(没有中心节点),数据分布式存储在集群中各主节点中,为防止主节点挂掉,每个主节点配置相应数量冗余节点进行备份.
    在这里插入图片描述
  • 集群内部使用主从配置:
    在这里插入图片描述
  • 数据分布式存储:
    在这里插入图片描述
    建立集群步骤:
    1.运行docker容器:
    • 默认情况下不能指定ip地址

C:\Users\fei>docker run -it -d --name r1 --ip 172.0.0.2 redis
fc17ad8d02c4a7a66378c72874ab834d18558d0866d241b2423bb319db933bf0
docker: Error response from daemon: Invalid address 172.0.0.2: It does not belong to any of this network’s subnets.

    • 创建自定义网络

C:\Users\fei>docker network create --subnet=172.0.0.0/16 mynetwork
docker network ls命令查看桥接网络

    • 创建指定IP地址的redis容器

docker run -it --name r1 --net mynetwork --ip 172.0.0.2 redis
类似方法再依次创建6个不同ip地址的redis容器

2.修改配置文件,配置redis节点
在这里插入图片描述
3.使用redis-trib.rb创建redis集群(replicas参数指定每个主节点的从节点数量)

redis-trib.rb create --replicas 1 172.0.0.2:6380 172.0.0.3:6381 172.0.0.4:6382 172.0.0.5:6380 172.0.0.6:6380 172.0.0.7:6380(将会创建3个主节点3个从节点)

4.随便连接到集群中的一个主节点容器如172.0.0.2:6380

docker exec -it r1
redis-cli -c
向其中存入数据则redis集群会进行计算并将数据存入到集群中的某个主节点中(虽然连接到了172.0.0.2节点但可能数据会被存放到其他主节点,当主节点无响应时数据会被存放到此主节点对应的从节点中)

5.redis主从服务器数据采用异步方式进行同步
(1)全量同步:用于从服务器从来第一次和当前主服务器连接.
(2)增量同步:用于从服务器断线后重新和之前连接的主服务器恢复连接.

redis事务:
redis事务可以使事务中的一组命令要么全部执行要么全不执行(如果在发送exec命令前客户端断线了,则redis会清空事务队列,事务中所有命令都不执行,而一旦发送了exec命令,所有命令都会执行,即使断线也没关系)以及Redis事务还能保证一个事物内的命令依次执行不被其他命令插入,但redis的事务不具有回滚,以及中止执行的功能。(来自redis入门指南)
其事务特点是:

  1. 批量操作在发送 EXEC 命令前被放入队列缓存。
  2. 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
  3. 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

watch命令(监视一个(或多个) key ,一旦其中有一个键被修改,之后的事务不会执行,监控一直持续到exec命令)
如果使用事务只有当一个事务中所有命令一次执行完才能执行其他命令,在一些情况下需要先获得一条命令的返回值在进行下一步操作如进行increase增加操作时,此时可以将watch与事务结合使用防止竞态,达到一个客户端在进行操作时不影响另一个客户端修改数据的效果(redis实际上是采用了线程封闭的观念,把任务封闭在一个线程,自然避免了线程安全问题,不过对于需要依赖多个redis操作的复合操作来说,依然需要锁)。
在这里插入图片描述

redis通过组合使用 INCR 和 EXPIRE ,来达到只在规定的生存时间内进行计数(counting)的目的。为防止 EXPIRE 没有执行,计数器就会一直存在下去的情况,可以结合事务使用。将INCR 和 EXPIRE写到一个事务中。

  • redis持久化:
RDB持久化AOF持久化
全量备份,一次保存整个数据库增量备份,只保存新修改的数据
保存的间隔较长保存的间隔默认一秒
更适合数据备份,默认开启更适合用来保存数据,和一般SQL持久化方式一样,默认关闭
save会阻塞,但bgsave或者自动不会阻塞无论是平时还是AOF重写,都不会阻塞
轻重 : 重轻重: 轻
启动优先级 : 低启动优先级 : 高
体积 : 小体积 : 大
恢复速度 : 快恢复速度 : 慢
数据安全性 : 丢数据数据安全性 : 根据策略决定

https://www.cnblogs.com/imeng/p/11319535.html
https://www.dyxmq.cn/databases/redis/redis-persistence.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值