4. 动态添加节点 4.1. 准备两个redis做主备

手把手教你搭建 Redis 主从:双节点环境部署全攻略 在主节点和从节点上分别安装 Redis。以上就是 Redis 主从搭建的基本步骤,实际应用中可根据具体需求进行更多配置和优化。准备至少两台服务器,一台作为主节点,一台作为从节点。假设主节点的 IP 地址为。如果能获取到在主节点中设置的值。,则说明主从复制搭建成功。,从节点的 IP 地址为。 阅读详情

安装文档

1. 安装依赖

yum -y install gcc

yum -y install gcc-c++

yum -y install ruby

yum -y install rubygem*

yum -y install ruby-rdoc

yum -y install ruby-devel rubygems rpm-build

gem install redis

2. 部署方案

1. 安装实例 :准备三台虚拟机 :

192.168.56.200

192.168.56.201 

192.168.56.202

2. 在每个虚拟机上部署两个redis :

192.168.56. 200:6379

192.168.56. 200:6378

192.168.56. 201: 6379

192.168.56. 201: 6378

192.168.56. 202: 6379

192.168.56. 202: 6378

3. 安装redis

3.1. 下载

wget http://download.redis.io/releases/redis-3.0.6.tar.gz

3.2. 上传

略

3.3. 解压

略

3.4. 重命名

略

3.5. 修改环境变量

export REDIS_HOME=/usr/local/redis

export PATH=$PATH:$REDIS_HOME/bin

3.6. 编译

cd ./redis/src

make

3.7. 将生成的文件copy到bin下

mkdir ../bin

mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-sentinel redis-server redis-trib.rb ../bin

cd ..

3.8. 修改配置文件

vi redis.conf

port 6378

cluster-enabled yes

cluster-config-file nodes-6378.conf

cluster-node-timeout 5000

appendonly yes

3.9. 复制一份redis在当前目录,修改redis.conf

vi redis.conf

port 6379

cluster-enabled yes

cluster-config-file nodes-6379.conf

cluster-node-timeout 5000

appendonly yes

 

3.10. 下发

下发到其他机器两份,因为要做主备

3.11. 启动

启动6台redis

./redis-server ./redis.conf

3.12. 运行集群

./redis-trib.rb create --replicas 1 192.168.56.200:6378 192.168.56.200:6379 192.168.56.201:6378 192.168.56.201:6379 192.168.56.202:6378 192.168.56.202:6379

3.13. 启动命令行

redis-cli -c

4. 动态添加节点

4.1. 准备两个redis做主备

./redis-server ./redis.conf

4.2. 添加新master 节点

输入命令redis-trib.rb add-node [需要添加节点] [原集群节点]

# ./redis-trib.rb add-node 192.168.118.147:7003 192.168.118.148:7000  

4.3. 添加备份节点

./redis-trib.rb add-node --slave --master-id 4841d83e2b037c49bb078fff4b00385bf4927071 192.168.118.148:7003 192.168.118.136:7000

此处的 4841d83e2b037c49bb078fff4b00385bf4927071 为刚刚添加的节点  的 Node id

节点ID(node id) 可在 任意redis bin目录下查看nodes.conf中有记录 还有很多方式 下面有使用到

5. 查看集群节点

redis-cli –c

cluster nodes

6. 给新节点分配 hash 槽

# ./redis-trib.rb reshard [任意节点地址:port]

How many slots do you want to move (from 1 to 16384)? 4096  //由于这又4队主从节点16384/4  [按照情况分配数量]

.......

What is the receiving node ID? 4841d83e2b037c49bb078fff4b00385bf4927071  //注意此处的ID

Please enter all the source node IDs.

  Type 'all' to use all the nodes as source nodes for the hash slots.

  Type 'done' once you entered all the source nodes IDs.

Source node #1: all //也可以是某个节点的ID

 ......

Do you want to proceed with the proposed reshard plan (yes/no)? yes  //此处输入yes 执行操作,输入no 取消分配   

 

分配好之后输入命令 检查 集群状态   

# ./redis-trib.rb check [任意节点地址:port]

[root@master addm]# ./redis-trib.rb check 192.168.118.148:7001

Connecting to node 192.168.118.136:7000: OK

Connecting to node 192.168.118.147:7003: OK

Connecting to node 192.168.118.148:7001: OK

Connecting to node 192.168.118.136:7001: OK

Connecting to node 192.168.118.148:7000: OK

Connecting to node 192.168.118.147:7001: OK

Connecting to node 192.168.118.147:7000: OK

>>> Performing Cluster Check (using node 192.168.118.136:7000)

M: 6fb72d5d6f14c67840348c0d14767f2541ae128a 192.168.118.136:7000

   slots:12288-16383 (4096 slots) master

   1 additional replica(s)

M: 4841d83e2b037c49bb078fff4b00385bf4927071 192.168.118.147:7003

   slots:0-1364,5461-6826,10923-12287 (4096 slots) master

   0 additional replica(s)

S: 142ef0fd250be201a4f682163245a98d58d230c3 192.168.118.148:7001

   slots: (0 slots) slave

   replicates cde6ec4b98a8e2c5d4020a5e545a7b95c533737d

S: efce5470e3de0a2ba08211c7fb0d1a860051ba4a 192.168.118.136:7001

   slots: (0 slots) slave

   replicates 6fb72d5d6f14c67840348c0d14767f2541ae128a

M: d11986f2ccfad296c503684ac372ece29c587f14 192.168.118.148:7000

   slots:1365-5460 (4096 slots) master

   1 additional replica(s)

S: 0cc4699066987d99391b0faccddf25e8be44c62c 192.168.118.147:7001

   slots: (0 slots) slave

   replicates d11986f2ccfad296c503684ac372ece29c587f14

M: cde6ec4b98a8e2c5d4020a5e545a7b95c533737d 192.168.118.147:7000

   slots:6827-10922 (4096 slots) master

   1 additional replica(s)

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

 

结果中

M: 4841d83e2b037c49bb078fff4b00385bf4927071 192.168.118.147:7003

   slots:0-1364,5461-6826,10923-12287 (4096 slots) master

 

7. 集群相关命令

集群

CLUSTER INFO 打印集群的信息

CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。

节点

CLUSTER MEET <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。

CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。

CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。

CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。

槽(slot)

CLUSTER ADDSLOTS <slot> [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。

CLUSTER DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派。

CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。

CLUSTER SETSLOT <slot> NODE <node_id> 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。

CLUSTER SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。

CLUSTER SETSLOT <slot> IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。

CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。

键

CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。

CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。

CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键。

8. 删除节点

5):删除一个slave节点

 

Java代码  收藏代码

#redis-trib del-node ip:port '<node-id>'  

redis-trib.rb del-node 10.10.34.14:7386 'c7ee2fca17cb79fe3c9822ced1d4f6c5e169e378'  

 6):删除一个master节点

 

a):删除master节点之前首先要使用reshard移除master的全部slot,然后再删除当前节点(目前只能把被删除

master的slot迁移到一个节点上)

 

Java代码  收藏代码

#把10.10.34.14:6386当前master迁移到10.10.34.14:6380上  

redis-trib.rb reshard 10.10.34.14:6380  

#根据提示选择要迁移的slot数量(ps:这里选择500)  

How many slots do you want to move (from 1 to 16384)? 500(被删除master的所有slot数量)  

#选择要接受这些slot的node-id(10.10.34.14:6380)  

What is the receiving node ID? c4a31c852f81686f6ed8bcd6d1b13accdc947fd2 (ps:10.10.34.14:6380的node-id)  

Please enter all the source node IDs.  

  Type 'all' to use all the nodes as source nodes for the hash slots.  

  Type 'done' once you entered all the source nodes IDs.  

Source node #1:f51e26b5d5ff74f85341f06f28f125b7254e61bf(被删除master的node-id)  

Source node #2:done  

#打印被移动的slot后,输入yes开始移动slot以及对应的数据.  

#Do you want to proceed with the proposed reshard plan (yes/no)? yes  

 

b):删除空master节点

 

Java代码  收藏代码

redis-trib.rb del-node 10.10.34.14:6386 'f51e26b5d5ff74f85341f06f28f125b7254e61bf'  

 

 

 

9. 客户端

private static BinaryJedisCluster jc;  

  static {  

       //只给集群里一个实例就可以  

        Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();  

        jedisClusterNodes.add(new HostAndPort("10.10.34.14", 6380));  

        jedisClusterNodes.add(new HostAndPort("10.10.34.14", 6381));  

        jedisClusterNodes.add(new HostAndPort("10.10.34.14", 6382));  

        jedisClusterNodes.add(new HostAndPort("10.10.34.14", 6383));  

        jedisClusterNodes.add(new HostAndPort("10.10.34.14", 6384));  

        jedisClusterNodes.add(new HostAndPort("10.10.34.14", 7380));  

        jedisClusterNodes.add(new HostAndPort("10.10.34.14", 7381));  

        jedisClusterNodes.add(new HostAndPort("10.10.34.14", 7382));  

        jedisClusterNodes.add(new HostAndPort("10.10.34.14", 7383));  

        jedisClusterNodes.add(new HostAndPort("10.10.34.14", 7384));  

        jc = new BinaryJedisCluster(jedisClusterNodes);  

    }  

@Test  

    public void testBenchRedisSet() throws Exception {  

        final Stopwatch stopwatch = new Stopwatch();  

        List list = buildBlogVideos();  

        for (int i = 0; i < 1000; i++) {  

            String key = "key:" + i;  

            stopwatch.start();  

            byte[] bytes1 = protostuffSerializer.serialize(list);  

            jc.setex(key, 60 * 60, bytes1);  

            stopwatch.stop();  

        }  

        System.out.println("time=" + stopwatch.toString());  

    }

超详细,多图文介绍redis集群方式并搭建redis伪集群 超多图文,对新手友好度极好。敲命令的过程中,难免会敲错,但为了截好一张合适的图,一旦出现一点问题,为了好的演示效果,就要从头开始敲。且看且珍惜。再认识redis集群前,若想先知道redis单机版的可查看,springboot整合redis。好了,下面开始了。每个redis实例可称为一个节点,安装redis并以默认端口启动是节点,不关闭,以另一个端口启动,是一个新节点。在另一台机器安装redis并启动,也是一个新节点。 阅读详情

相关推荐

Redis集群搭建(动态扩缩容、踩坑经验)

题记: 文章内容输出来源:拉勾教育Java高薪训练营。 本篇文章是 Redis 学习课程中的一部分笔记。 Redis集群搭建(动态扩缩容、踩坑经验) 1、准备一台sentos7虚拟机 192.168.80.129 2、去官网下载最新redis5安装包 redis-5.0.8.tar.gz 3、创建redis文件夹并上传redis安装包 mkdir -p /home/db/redis 4、解压 tar -zxvf redis-5.0.8.tar.gz 5、安装 cd /redis-5.0.8/src m

weixin_41018580的博客 3136

Redis添加主节点

# 1.添加主节点 add-node [新加入节点] [原始集群中任意节点] - ./redis-trib.rb add-node 192.168.1.158:7006 192.168.1.158:7005 - 注意: 1.该节点必须以集群模式启动 2.默认情况下该节点就是以master节点形式添加 ...

Leon_Jinhai_Sun的博客 788

Redis Cluster扩容实战:从3主6从到4主8从的完整操作指南

本文详细介绍了Redis Cluster从3主6从扩容到4主8从的完整操作指南,包括环境评估、新节点部署、数据迁移策略及故障转移测试等关键步骤。通过Docker环境准备和自动化脚本,帮助开发者实现无缝扩容,提升Redis集群的弹性扩展能力,确保高可用性和性能优化。

weixin_29274969的博客 425

redis集群动态添加主节点和从节点

redis集群动态添加主从节点

虾兵蟹将 1万+

图像质量评估:使用 SSIM 计算图像相似性

在图像处理领域,衡量两幅图像之间相似性的一种常见方法是使用结构相似性指数(SSIM)。SSIM 是一种全参考的图像质量评估指标,它不仅考虑了图像的亮度、对比度,还考虑了结构信息。在本文中,我们将介绍一个使用 Python 和 OpenCV 实现的 SSIM 计算脚本,并使用该脚本评估两幅图像的相似性。

hasque2019的博客 1154

EB配置输入捕获ICU模块----基于S32K3

基于S32K311芯片,EB配置ICU输入捕获(Emios 和Siul)

weixin_43586400的博客 1772

【redis】集群伸缩(添加删除节点)

注:本文知识点全部来自于《redis开发与运维》这本书在加上博主本人对于redis的理解构成   一、集群伸缩原理           Redis集群提供了灵活的节点扩容和收缩方案。在不影响集群对外服务的情况下,可以为集群添加节点进行扩容也可以下线部分节点进行缩容: 我们都指导,这样的每一个节点上面都分配了我们的16384槽中的几个,以及对应槽下面的数据。所以我们在伸缩节点的时候,实...

Big Smile 4160

ABAQUS单元刚度矩阵输出全攻略:从理论到实践(含MTX/DAT文件对比)

本文详细解析了ABAQUS中单元刚度矩阵的输出方法,涵盖理论原理、MTX与DAT文件格式对比及二次开发应用。通过具体操作步骤和性能优化建议,帮助用户高效获取并利用刚度矩阵数据,特别适合需要进行有限元分析验证和二次开发的工程师。

lg888的博客 1008

redis 向集群中 添加新的主节点、从节点

首先,先说几条命令 redis-cli -p 7001 -c // 进入集群 cluster nodes // 查看集群中各个节点的信息 cluster info // 查看集群的信息 // 更多集群 节点 槽 的操作 http://www.voidcn.com/article/p-uzncrgkr-nq.html 向集群中添加 主节点 redis-cli --cluster add-node 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:638..

qq_43753286的博客 3419

C#调用Bartender打印标签,除了打印还能一键导出图片和PDF(附完整代码)

本文详细介绍了如何使用C#集成Bartender实现标签的多格式输出,包括打印、图片和PDF导出。通过完整的代码示例和实战技巧,帮助开发者解决分辨率适配、纸张尺寸控制等核心问题,提升工业自动化和物流管理中的标签处理效率。

weixin_31236101的博客 370

强化学习之课程学习法

课程学习是一种有计划的学习方法,模拟人类学习的过程。它通过设置逐步增加难度的任务序列,让学习系统从简单的任务开始,逐渐过渡到复杂任务。这一方法可以显著提高训练效率,避免智能体一开始就面临过于复杂的任务,从而导致学习过程困难。逐步难度增加:从简单的任务开始,逐步增加任务的难度,直到智能体能够解决最复杂的任务。动态调整:根据智能体的学习进展,动态调整任务的难度,保证学习的过程始终处于一个适当的挑战性范围。

m0_64087341的博客 2696

DragonflyDB集群扩展:动态节点添加

DragonflyDB作为新一代高性能分布式KV存储系统,其集群扩展能力是核心特性之一。动态节点添加功能允许用户在不停机的情况下扩展集群规模,满足业务增长需求。本文将深入探讨DragonflyDB集群架构、动态节点添加的实现原理、操作步骤以及最佳实践。 ## 集群架构基础 ### 分片(Sharding)机制 DragonflyDB采用基于槽位(Slot)的分片机制,将16384个槽位分配给...

gitblog_00916的博客 890

Claude Code 源码一夜流出:会看热闹的人很多,会读源码的人很少

摘要:Claude Code源码意外泄露后,作者分享了高效的源码学习方法:1)Fork仓库保存代码;2)使用Qoder的Repo Wiki功能生成结构化文档和UML图;3)基于Wiki创建可复用的Skill。这种方法比直接让AI总结代码更系统深入,并推荐了可视化学习项目辅助理解。文章强调实践的重要性,提供了具体工具和操作指南。

722

Redis动态增加节点

Redis动态增加节点 1.启动redis集群 2.准备好待加入集群的redis实例 2.1创建两个目录用来存放新的redis实例(7008,7009)        使用命令   mkdir 7008 7009     2.2 拷贝redis.conf 到 7008和7009   2.3修改两个redis.conf      修改项:

请叫我架构师,谢谢! 1426

Anomalib库安装以及使用

Anomalib是一个专注于异常检测的深度学习库。它的目标是收集最新的异常检测算法,并提供用于在公共和私有数据集上进行基准测试的工具。该库提供了一系列已实现的异常检测算法,这些算法在最近的文献中有所描述。此外,Anomalib还提供了一套工具,方便开发人员开发和实现自定义模型。该库特别注重基于图像的异常检测,旨在识别数据集中的异常图像或图像中的异常像素区域。通过使用Anomalib,用户可以快速构建和评估各种异常检测算法,以满足其特定需求。

mingo_敏 5202

【即插即用模块】注意力篇 | TIP 2024 | 注意力机制的有效改进!内容引导注意力块CGA,空间-通道-像素三个维度融合,实现涨点!

CGA(Content-Guided Attention)是一种融合多维度注意力的即插即用模块,通过并联空间和通道注意力并与像素注意力串联,实现从通道、空间到像素的三层级特征筛选。该模块采用层级递进设计,解决了传统单维度注意力的局限性,尤其适用于图像恢复等对特征精度要求高的任务。实验表明,CGA在去雾任务中能显著提升指标,但会略微增加参数量。模块代码支持灵活集成到各类视觉模型中,建议放置在网络靠前位置以充分释放后续层性能。其核心创新在于通过7×7大卷积捕捉长距离依赖,结合分组卷积实现像素级细粒度建模

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 231

redis集群扩容和缩容_Redis集群增加节点和删除节点

本文主要是承接上一篇文章Redis集群的离线安装成功以后,我们如何进行给集群增加新的主从节点(集群扩容)以及如何从集群中删除节点(集群缩容),也就是集群的伸缩,集群伸缩的原理是控制虚拟槽和数据在节点之间进行移动,通过实际操作来整理一下集群的伸缩。上篇文章中搭建好的集群为三主三从,端口号为7000、7001、7002、7003、7004、7005。查看集群启动情况:ps -ef | grep red...

weixin_36222664的博客 311

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Redis实战:多Web节点Session共享

本文介绍了基于Redis实现分布式Session共享的方案。在分布式Web集群中,通过Redis集中存储Session数据,解决了传统Session存储无法跨节点共享的问题。文章详细对比了Redis和Memcached的技术特点,阐述了Redis在数据结构、持久化等方面的优势。实验将Session数据统一存储到Redis服务器。

2301_80732873的博客 1883

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

RedisCluster集群之动态增删节点

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33953384的博客 429

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【分布式微服务云原生】掌握 Redis Cluster架构解析、动态扩展原理以及哈希槽分片算法

Redis Cluster 提供了一种有效的数据分片和高可用性解决方案。它通过在多个节点上分布数据来提高性能,并能够在主节点故障时自动进行故障转移。然而,它也有一些限制,开发者需要根据应用场景和需求来决定是否使用 Cluster 模式。

Dylaniou的博客 1697

Redis Sentinel机制与用法[转]

Redis Sentinel 机制与用法(一)概述Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动

小地盘的诺克萨斯 1536

Redis Cluster动态扩容:架构原理与核心机制解析

Redis Cluster扩容是分布式系统设计的终极考验,其技术深度体现在:数学模型的工程实现哈希槽分配算法与网络拓扑的动态适配,本质是空间换时间的工程哲学。数据一致性的保障机制通过MIGRATE命令的原子性、双写缓冲区的设计,实现最终一致性的精密控制。生产环境的容错设计脑裂防御、热点处理、内存优化等机制,构建了反脆弱性系统架构。掌握这些核心技术,意味着获得了构建百万级QPS弹性系统的能力。

fjkxyl的博客 1172

查看redis数据_redis集群之动态扩容与缩容

1. 集群伸缩概述redis 集群提供了灵活的节点扩容和收缩方案。在不影响集群对外服务的情况下,可以为集群添加节点进行扩容也可以下线部分节点进行缩容。redis集群可以实现对节点的灵活上下线控制。其中原理可抽象为槽和对应数据在不同节点之间灵活移动当主节点分别维护自己负责的槽和对应的数据,如果希望加入1个节点实现集群扩容时,需要通过相关命令把一部分槽和数据迁移给新节点上面图里的每个节点把一...

weixin_39564036的博客 384

Redis cluster 集群节点的扩容和缩容

上篇记录了redis集群的部署搭建,这里再记录一下Redis cluster集群节点的维护 一 Redis cluster 集群节点维护 集群运行时间长久之后,难免由于硬件故障、网络规划、 业务增长等原因对已有集群进行相应的调整, 比如增加 Redisnode节点(集群扩容)、 减少节点(缩容节点)、 节点迁移、更换服务器等。 增加节点和删除节点会涉及到已有的槽位重新分配及数据迁移 上篇文章中搭建好的集群为三主三从,端口号为7000、7001、7002、7003、7004、7005。   查看..

APPLEHU09的博客 117

redis lua执行原理,主从同步,动态变量

[Redis Slowlog]是排查性能问题关键监控指标。它是记录Redis queries运行时间超时特定阀值的系统。 这类慢查询命令被保存到Redis服务器的一个定长队列,最多保存slowlog-max-len(默认128)个慢查询命令。 当慢查询命令达到128个时,新产生的慢查询被加入前,会从队列中删除最旧的慢查询命令。 执行原理 创建并修改Lua环境 1 创建基础Lua环境 2 载入函数库 3 创建全局表格Lua 4 替换随机函数 5 创建排序辅助函数 6 创建redis.pcall

阿拉斯加大闸蟹的博客 5009
上一篇: 连接集群
下一篇: Redis Cluster 初探(1) - 集群搭建与扩容
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值