Redis集群笔记

知识点:
1:redis集群中的每个节点都需要建立两个tcp端口,一个为“客户端端口”,用于接收客户端指令,与客户端交互,如6379,一个端口称之为集群总线端口,是在客户端端口号上加10000,如16397,用于节点之间通过二进制协议通讯
2:Redis集群不是使用的一致性哈希,而是使用哈希槽,整个redis集群有16384个哈希槽,决定一个key应该分配到那个槽的算法是:计算该key的CRC16结果再模16384,
集群中 的每个节点负责一部分哈希槽,
例如:
节点A存储的哈希槽范围是:0-5500
节点B存储的哈希槽范围是:5501-11000
节点C存储的哈希槽范围是:11001-16384
3:redis不能保证强一直性,redis是异步同步数据,
丢失数据场景:
1)客户端向主节点B发起写的操作
2)主节点B回应客户端写操作成功
3) 主节点B向它的从节点B1,B2,B3同步该写,
若在第3步时故障,那么此写操作就丢失了
4:redis.conf配置
cluster-enabled <yes/no>: 如果配置”yes”则开启集群功能,此redis实例作为集群的一个节点,否则,它是一个普通的单一的redis实例。
cluster-config-file : 注意:虽然此配置的名字叫“集群配置文件”,但是此配置文件不能人工编辑,它是集群节点自动维护的文件,主要用于记录集群中有哪些节点、他们的状态以及一些持久化参数等,方便在重启时恢复这些状态。通常是在收到请求之后这个文件就会被更新。
cluster-node-timeout : 这是集群中的节点能够失联的最大时间,超过这个时间,该节点就会被认为故障。如果主节点超过这个时间还是不可达,则用它的从节点将启动故障迁移,升级成主节点。注意,任何一个节点在这个时间之内如果还是没有连上大部分的主节点,则此节点将停止接收任何请求。
cluster-slave-validity-factor : 如果设置成0,则无论从节点与主节点失联多久,从节点都会尝试升级成主节点。如果设置成正数,则cluster-node-timeout乘以cluster-slave-validity-factor得到的时间,是从节点与主节点失联后,此从节点数据有效的最长时间,超过这个时间,从节点不会启动故障迁移。假设cluster-node-timeout=5,cluster-slave-validity-factor=10,则如果从节点跟主节点失联超过50秒,此从节点不能成为主节点。注意,如果此参数配置为非0,将可能出现由于某主节点失联却没有从节点能顶上的情况,从而导致集群不能正常工作,在这种情况下,只有等到原来的主节点重新回归到集群,集群才恢复运作。
cluster-migration-barrier :主节点需要的最小从节点数,只有达到这个数,主节点失败时,它从节点才会进行迁移。更详细介绍可以看本教程后面关于副本迁移到部分。
cluster-require-full-coverage <yes/no>:在部分key所在的节点不可用时,如果此参数设置为”yes”(默认值), 则整个集群停止接受操作;如果此参数设置为”no”,则集群依然为可达节点上的key提供读操作

启动redis:
redis-server redis.conf //以该配置启动redis服务
关闭节点:
redis-cli -a cyclone -c -h 192.168.220.11 -p 7001 shutdown
-a: password
-h: hostname
-p: port

搭建:
1:下载redis,安装,配置6个环境
http://ifeve.com/redis-cluster-tutorial/
3:搭建集群命令

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
--cluster-replicas 1

解释:create:创建集群
–cluster-replicas 第一个为master,第二个则为slave,就是7000master,7001为slave,7002为master,7003为slave,7004为master,7005为slave
redis问你是否采用默认策略:即哈希槽平均分为三份,给三个master。输入yes即可

在这里插入图片描述
搭建成功:
在这里插入图片描述
简单测试:会看到存储的值的分到的哈希槽以及分到那个master节点上

$ redis-cli -c -p 7000
redis 127.0.0.1:7000> set foo bar
-> Redirected to slot [12182] located at 127.0.0.1:7002
OK
redis 127.0.0.1:7002> set hello world
-> Redirected to slot [866] located at 127.0.0.1:7000
OK
redis 127.0.0.1:7000> get foo
-> Redirected to slot [12182] located at 127.0.0.1:7002
"bar"
redis 127.0.0.1:7000> get hello
-> Redirected to slot [866] located at 127.0.0.1:7000
"world

以下为一些redis集群的常用操作:
1:查看集群信息(id号,节点的ip和端口,主节点、从节点、哈希槽范围)

redis- cli -p 7000 cluster nodes

2:重新分配哈希槽

redis-cli --cluster 
127.0.0.1:7000

此处的127.0.0.1:7000,换成7001,7002,7003,7004,7005都是可以的,他只是一个对集群的指向,这个会以问答的形式进行迁移

定向进行哈希槽分配(常用)

redis-cli --cluster reshard 127.0.0.1:7000 --cluster-from a50cacc428610be7d1be73a91d8c1066c697daea --cluster-to 581b1270174a28b8d1717c971d4a25c5f5f4f212 --cluster-slots 1000 --cluster-yes

解释:127.0.0.1:7000是对集群的指向,换成7001也可以
–cluster-from :从哪个节点中分布哈希槽,后面接该节点的id
–cluster-to: 哈希槽迁移到那个节点中,后面接节点的id
–cluster-slotes :迁移的哈希槽的数量。

3:添加新的节点
和前面一样,配置一个7006的redis服务,并启动服务。
3.1:添加主节点

 redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000

集群中新增的7006节点没有哈希槽,要给他手动分配哈希槽。
3.2:添加从节点

redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000 --cluster-slave

注:7006节点添加到副本较少的随机的主节点中成为从节点。

redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000 --cluster-slave --cluster-master-id <node-id>

将节点7006添加到指定的主节点上成为其从节点

4:删除节点
4.1删除从节点

redis-cli --cluster del-node 127.0.0.1:7000 <node-id>

4.2删除主节点
1:只能删除为空的主节点,若不为空,可将其数据重新分片到所有其他主节点后删除(主节点数量少1),
2:也可对其从节点执行手动故障转移,在该节点成为新主节点的从节点之后删除该节点(主节点数量不变)

redis集群中节点的升级:
从节点升级:停止该节点,更新版本后重启即可
主节点升级:
1:使用cluster failover触发主服务器到其从服务器之一的手动故障转移
2:等待主节点成为从节点
3:最后,像对从节点一样升级节点
4:如果希望将主节点作为刚升级的节点,再次触发新的手动故障迁移,把升级后的节点转换回主节点

手动故障转移:就是人为模拟故障,以实现从节点升级为主节点,主节点变成从节点的行为,
利用redis-cli -p 登陆从节点,在从节点上执行该命令

CLUSTER FAILOVER

复制集迁移:把当前节点变成master-node-id的主节点。
利用redis-cli -p 登陆从节点,在从节点上执行该命令

CLUSTER REPLICATE <master-node-id>

redis-cli -p 7000 cluster nodes
此命令分为两部分,
redis-cli -p 7000 登陆本地的7000redis服务器,
登陆后执行cluster nodes,所以7000这个参数只要是集群中的其中一台服务器即可

redis-cli --help //获取帮助

redis-cli --stat 和一般执行的ls -l ,–stat和-l都是一样的,作为一个选项,这个是每个命令有不同的选项而已,没什么特殊的作用

redis过期删除策略:
被动删除:当get被操作时,redis会去检查该key是否过期,如果过期则删除之并且返回nil,对cpu友好,对内存不友好
主动删除:redis定期主动删除一批已过期的key,相当于定时器进行删除
主动清除策略:当已用内存操作maxmemory的限定后,会触发函数清理出空间,这个清理过程是阻塞的,直到清理出足够的空间来。

参考资料:
https://redis.io/topics/cluster-tutorial
http://ifeve.com/redis-cluster-tutorial/

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值