第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Redis安裝項(xiàng)目實(shí)戰(zhàn):初學(xué)者指南

標(biāo)簽:
Redis
概述

本文详细介绍了Redis的安装方法和项目实战应用,涵盖不同操作系统上的安装步骤和配置优化技巧,并提供了实际项目中的应用案例,帮助读者全面掌握Redis安装和使用。

Redis简介与安装
Redis是什么

Redis 是一个开源(BSD许可)的、内存中的数据结构存储系统,可以作为数据库、缓存和消息中间件使用。它是一个非关系型数据库(NoSQL),支持字符串、哈希表、集合、有序集合和列表等多种数据结构。它具备显著的读写速度、高效的内存管理及持久化能力,广泛应用于大规模缓存、实时分析、消息队列等场景。

Redis的主要特点
  • 高性能: Redis 在内存中存储数据,拥有极高的读写速度,支持每秒执行 10 万次以上的操作。
  • 灵活的数据支持: 支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等。
  • 持久化: 提供 RDB 和 AOF 模式,确保数据在断电或故障后不会丢失。
  • 键过期: 支持设置键的过期时间,特别适用于缓存系统。
  • 丰富的命令: 提供了丰富的命令集,能够实现复杂的数据操作。
  • 发布和订阅: 允许实时消息传递,实现消息队列或通知系统。
  • 复制和集群: 支持主从复制和集群模式,提高数据的可用性和可靠性。
不同操作系统下的Redis安装方法

Redis 可在 Linux、Windows 和 macOS 等多个操作系统上运行。以下是针对这些操作系统的安装方法:

在Linux上安装Redis

  1. 使用包管理器安装

    • Debian/Ubuntu:
      sudo apt update
      sudo apt install redis-server
    • CentOS/RHEL:
      sudo yum install redis
      sudo systemctl start redis # 启动服务
      sudo systemctl enable redis # 设置开机启动
  2. 从源码编译安装
    • 下载 Redis 源码包,解压后进入目录。
      wget http://download.redis.io/releases/redis-6.2.6.tar.gz
      tar xzf redis-6.2.6.tar.gz
      cd redis-6.2.6
    • 编译 Redis。
      make
    • 安装 Redis。
      sudo make install
    • 设置 Redis 配置文件并启动 Redis 服务器。
      sudo cp -rf redis.conf /etc/redis/
      redis-server /etc/redis/redis.conf

在Windows上安装Redis

Redis 官方并不直接支持 Windows 环境,但可以通过以下方式安装:

  1. 使用 Windows 版本的 Redis 安装包。

    • 下载 Redis Windows 版本的安装包(例如 Redis-x64-6.2.6.zip)。
    • 解压后进入解压目录。
    • 启动 Redis 服务器。
      redis-server.exe redis.windows.conf
  2. 使用 Cygwin 或 WSL(Windows Subsystem for Linux)。
    • 在 WSL 中安装 Redis 如同在普通的 Linux 发行版上一样。

在macOS上安装Redis

  1. 使用 Homebrew 安装
    • 首先安装 Homebrew。
      /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/main/install.sh)"
    • 使用 Homebrew 安装 Redis。
      brew install redis
      brew services start redis
  2. 从源码编译安装
    • 下载 Redis 源码包,解压后进入目录。
      wget http://download.redis.io/releases/redis-6.2.6.tar.gz
      tar xzf redis-6.2.6.tar.gz
      cd redis-6.2.6
    • 编译 Redis。
      make
    • 安装 Redis。
      sudo make install
    • 设置 Redis 配置文件并启动 Redis 服务器。
      sudo cp -rf redis.conf /usr/local/etc/redis.conf
      redis-server /usr/local/etc/redis.conf
Redis基本命令操作
Redis数据类型介绍

Redis 提供了多种数据类型,每种类型都有独特的用途。以下是 Redis 的主要数据类型:

  1. 字符串(String)

    • 字符串是最基本的数据类型,可以用于存储简单的键值对。
    • 示例代码:
      redis-cli set mykey "Hello, Redis!"
      redis-cli get mykey
  2. 哈希(Hash)

    • 哈希类型可以存储键值对的集合,类似 Python 的字典。
    • 示例代码:
      redis-cli hset user:1001 name "John" age 25
      redis-cli hget user:1001 name
      redis-cli hget user:1001 age
  3. 列表(List)

    • 列表类型可以存储一系列元素,支持两端插入和删除操作。
    • 示例代码:
      redis-cli rpush mylist "item1"
      redis-cli rpush mylist "item2"
      redis-cli lrange mylist 0 -1
  4. 集合(Set)

    • 集合类型用于存储无序的、唯一的字符串元素。
    • 示例代码:
      redis-cli sadd myset "item1"
      redis-cli sadd myset "item2"
      redis-cli smembers myset
  5. 有序集合(Sorted Set)
    • 有序集合和集合类似,但每个元素都关联一个分数,使这些元素可以根据分数进行排序。
    • 示例代码:
      redis-cli zadd scores 10 "Alice"
      redis-cli zadd scores 20 "Bob"
      redis-cli zrange scores 0 -1
常用的Redis命令

Redis 命令丰富,涵盖了从数据读写到键操作的各种功能。以下是部分常用的 Redis 命令:

  1. 设置和获取数据

    • SET:设置键值对。
      redis-cli set user:1001 "John Doe"
    • GET:获取值。
      redis-cli get user:1001
    • DEL:删除键。
      redis-cli del user:1001
  2. 列表操作

    • LPUSH:在列表头部插入元素。
      redis-cli lpush mylist "item1"
      redis-cli lpush mylist "item2"
    • LPOP:移除并返回列表头部的元素。
      redis-cli lpop mylist
    • LRANGE:返回列表中的一个范围。
      redis-cli lrange mylist 0 -1
  3. 键空间操作

    • EXPIRE:设置键的过期时间。
      redis-cli expire mykey 60
    • TTL:查看键的剩余过期时间。
      redis-cli ttl mykey
    • SCAN:迭代键空间。
      redis-cli scan 0
  4. 事务处理
    • MULTI:进入事务模式。
      redis-cli multi
    • EXEC:执行事务中的命令。
      redis-cli exec
    • DISCARD:放弃事务。
      redis-cli discard
如何使用命令行工具操作Redis

Redis 提供了一个命令行客户端 redis-cli,用来与 Redis 服务器进行交互。下面是一些常用的命令行操作示例:

  1. 连接到 Redis 服务器

    redis-cli

    默认情况下会连接到本地的 Redis 服务器。如果要连接远程服务器,可以指定 IP 地址或域名:

    redis-cli -h 192.168.1.100 -p 6379
  2. 执行命令
    redis-cli 中,可以直接输入 Redis 命令,例如:

    redis-cli set user:1001 "John Doe"
    redis-cli get user:1001
  3. 使用管道执行命令
    可以将命令写入一个文件(例如 commands.txt),然后通过管道将其输入到 redis-cli

    redis-cli < commands.txt
  4. 退出命令行客户端
    redis-cli 中,输入 exit 或者按 Ctrl+D 键退出。
Redis配置与优化
Redis配置文件的解读

Redis 使用配置文件来管理其行为,配置文件通常位于 /etc/redis/redis.conf/usr/local/etc/redis.conf。以下是一些重要的配置项:

  1. 绑定地址
    • bind 127.0.0.1:指定 Redis 仅监听本地的 IP 地址。
  2. 端口号
    • port 6379:设置 Redis 运行的端口,默认是 6379。
  3. 日志级别
    • loglevel notice:设置日志级别,可以选择 debug, verbose, notice, warning
  4. 持久化
    • save <seconds> <changes>:设置定期持久化的策略,例如 save 900 1 表示如果 900 秒内有至少 1 个改变,Redis 会持久化到磁盘上。
    • rdbcompression yes:设置 RDB 文件是否进行压缩。
    • dbfilename dump.rdb:设置 RDB 文件的名称。
  5. 最大内存使用
    • maxmemory <bytes>:设置 Redis 能使用的最大内存限制。
  6. 数据淘汰策略
    • maxmemory-policy:设置数据淘汰策略,例如 noeviction, volatile-lru, allkeys-lru
  7. 日志文件位置
    • logfile /path/to/logfile:设置日志文件的位置。
常见的配置优化选项

优化 Redis 配置对于提高其性能和稳定性至关重要。以下是一些常见的优化选项:

  1. 调整最大内存使用

    • 根据服务器的内存容量来设置 maxmemory,避免 Redis 占用过多内存。
      maxmemory 1gb
  2. 选择合适的数据淘汰策略

    • 根据应用场景选择合适的数据淘汰策略,例如使用 allkeys-lru 可以淘汰最近最少使用的键。
      maxmemory-policy allkeys-lru
  3. 调整持久化策略

    • 根据数据重要性设置持久化策略,例如对于重要数据使用 appendonly yes
      appendonly yes
      appendfilename appendonly.aof
  4. 调整日志级别
    • 根据需要选择合适的日志级别,例如 notice 适用于大多数生产环境。
      loglevel verbose
如何调整Redis内存使用

Redis 的内存使用可以通过 maxmemory 设置来限制,同时结合不同的数据淘汰策略来优化内存使用:

  1. 设置最大内存限制

    maxmemory 1gb

    配置文件中的 maxmemory 需要根据服务器的内存情况来设置,确保 Redis 不会占用过多内存。

  2. 选择合适的数据淘汰策略

    • allkeys-lru:淘汰最近最少使用的所有键。
      maxmemory-policy allkeys-lru
    • volatile-lfu:淘汰最近最少使用的过期键。
      maxmemory-policy volatile-lfu
    • noeviction:不淘汰任何数据,当内存达到上限时,新的写操作会被拒绝。
      maxmemory-policy noeviction
  3. 监控内存使用
    使用 Redis 的 INFO 命令来监控当前的内存使用情况:

    redis-cli info memory
  4. 定期持久化
    设置定期持久化来释放内存,例如使用 RDB 持久化:

    save 900 1
    save 300 10
    save 60 10000
  5. 使用 Redis 的 FLUSHALL 命令
    在开发或测试环境中,可以使用 FLUSHALL 命令来清除所有数据,释放内存:
    redis-cli flushall
Redis项目实战
实战项目选择与规划

选择合适的项目来应用 Redis 的能力对于学习和实践非常重要。以下是一些建议的项目选择和规划:

  1. 缓存系统
    • 使用 Redis 来缓存频繁访问的数据,提高应用的响应速度。
    • 需要规划哪些数据应该被缓存,设置合适的过期时间。
  2. 实时消息系统
    • 构建一个消息队列,用于异步处理任务或传递实时消息。
    • 利用 Redis 的发布/订阅功能来实现简单的消息系统。
  3. 排行榜功能
    • 实现一个动态的排行榜,根据用户的操作实时更新排名。
    • 使用 Redis 的有序集合数据类型来存储排名信息。
  4. 分布式锁
    • 使用 Redis 实现一个分布式锁机制,用于控制资源访问。
    • 利用 Redis 的 SETNX 命令来实现。
Redis在项目中的应用示例

下面是一个简单的项目示例:使用 Redis 来构建一个缓存系统。

  1. 缓存商品信息

    • 在应用中,商品信息经常需要被频繁访问,可以将其缓存在 Redis 中以提高性能。
      
      import redis
    创建 Redis 客户端连接

    r = redis.Redis(host='localhost', port=6379, db=0)

    获取商品信息

    def get_product_info(product_id):
    key = f"product:{product_id}"
    product_info = r.get(key)
    if product_info:
    return product_info
    else:
    product_info = fetch_product_from_db(product_id)
    r.set(key, product_info, ex=3600) # 缓存 1 小时
    return product_info

    模拟从数据库获取商品信息的函数

    def fetch_product_from_db(product_id):

    这里可以替换为实际的数据库查询操作
    return f"Product {product_id} info"
    
    ```java
    import redis.clients.jedis.Jedis;
    
    // 创建 Redis 客户端连接
    Jedis jedis = new Jedis("localhost");
    
    // 获取商品信息
    public String getProductInfo(int productId) {
        String key = "product:" + productId;
        String productInfo = jedis.get(key);
        if (productInfo != null) {
            return productInfo;
        } else {
            productInfo = fetchProductFromDb(productId);
            jedis.set(key, productInfo, redis.clients.jedis.Expire.EPISODE, 3600);  // 缓存 1 小时
            return productInfo;
        }
    }
    
    // 模拟从数据库获取商品信息的函数
    public String fetchProductFromDb(int productId) {
        // 这里可以替换为实际的数据库查询操作
        return "Product " + productId + " info";
    }
    const redis = require('redis');
    const client = redis.createClient();
    
    // 获取商品信息
    function getProductInfo(productId) {
        const key = `product:${productId}`;
        client.get(key, (err, productInfo) => {
            if (productInfo) {
                console.log(productInfo);
            } else {
                const productInfo = fetchProductFromDb(productId);
                client.set(key, productInfo, 'EX', 3600);  // 缓存 1 小时
                console.log(productInfo);
            }
        });
    }
    
    // 模拟从数据库获取商品信息的函数
    function fetchProductFromDb(productId) {
        // 这里可以替换为实际的数据库查询操作
        return `Product ${productId} info`;
    }
  2. 缓存用户信息

    • 类似地,可以缓存用户的登录状态、个人信息等。
      
      def get_user_info(user_id):
      key = f"user:{user_id}"
      user_info = r.get(key)
      if user_info:
          return user_info
      else:
          user_info = fetch_user_from_db(user_id)
          r.set(key, user_info, ex=86400)  # 缓存 1 天
          return user_info

    def fetch_user_from_db(user_id):

    模拟从数据库获取用户信息
    return f"User {user_id} info"
    
    ```java
    public String getUserInfo(int userId) {
        String key = "user:" + userId;
        String userInfo = jedis.get(key);
        if (userInfo != null) {
            return userInfo;
        } else {
            userInfo = fetchUserFromDb(userId);
            jedis.set(key, userInfo, redis.clients.jedis.Expire.EPISODE, 86400);  // 缓存 1 天
            return userInfo;
        }
    }
    
    // 模拟从数据库获取用户信息的函数
    public String fetchUserFromDb(int userId) {
        // 这里可以替换为实际的数据库查询操作
        return "User " + userId + " info";
    }
    function getUserInfo(userId) {
        const key = `user:${userId}`;
        client.get(key, (err, userInfo) => {
            if (userInfo) {
                console.log(userInfo);
            } else {
                const userInfo = fetchUserFromDb(userId);
                client.set(key, userInfo, 'EX', 86400);  // 缓存 1 天
                console.log(userInfo);
            }
        });
    }
    
    // 模拟从数据库获取用户信息的函数
    function fetchUserFromDb(userId) {
        // 这里可以替换为实际的数据库查询操作
        return `User ${userId} info`;
    }
  3. 监控缓存命中率
    • 可以使用 Redis 的 INFO 命令来监控缓存的命中率。
      redis-cli info
如何结合其他技术栈使用Redis

Redis 可以与多种技术栈结合使用,例如 Python、Java、Node.js 等。这里以 Python 和 Java 为例,介绍如何结合 Redis 使用。

  1. 安装 Redis 客户端库
    可以使用 redis-py 库来连接和操作 Redis。

    pip install redis
    • 在 Java 中,可以使用 Jedis 库来操作 Redis。
      mvn install org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile -Dsource=1.8 -Dtarget=1.8
      mvn install redis.clients:jedis:3.7.0:jedis
  2. 使用 Redis 进行数据操作

    import redis
    
    # 创建 Redis 客户端连接
    r = redis.Redis(host='localhost', port=6379, db=0)
    
    # 设置键值对
    r.set('key1', 'value1')
    
    # 获取键值对
    value = r.get('key1')
    print(value)  # 输出: b'value1'
    
    # 使用 Redis 列表数据类型
    r.rpush('list1', 'item1')
    r.rpush('list1', 'item2')
    items = r.lrange('list1', 0, -1)
    print(items)  # 输出: [b'item1', b'item2']
    import redis.clients.jedis.Jedis;
    
    // 创建 Redis 客户端连接
    Jedis jedis = new Jedis("localhost");
    
    // 设置键值对
    jedis.set("key1", "value1");
    
    // 获取键值对
    String value = jedis.get("key1");
    System.out.println(value);  // 输出: value1
    
    // 使用 Redis 列表数据类型
    jedis.rpush("list1", "item1");
    jedis.rpush("list1", "item2");
    List<String> items = jedis.lrange("list1", 0, -1);
    System.out.println(items);  // 输出: [item1, item2]
  3. 结合其他技术栈使用 Redis
    • 在 Node.js 中,可以使用 ioredisnode-redis 库来操作 Redis。
Redis持久化与备份
Redis持久化的概念与方法

Redis 持久化指将内存中的数据持久化到磁盘上,以便在 Redis 服务重启或崩溃时恢复数据。Redis 提供了两种主要的持久化方法:

  1. RDB 持久化

    • RDB(Redis Database)是一种基于快照的持久化方式,即在特定时间点将 Redis 的数据集写入一个磁盘文件。
    • 可以通过 save 命令配置 RDB 持久化的触发条件:
      save 900 1
      save 300 10
      save 60 10000
    • 例如,save 900 1 表示如果在 900 秒内至少有 1 个键发生变化,就会触发 RDB 持久化。
  2. AOF 持久化

    • AOF(Append Only File)是一种追加日志的方式,记录所有的 Redis 命令,以便在崩溃后重放这些命令来恢复数据。
    • 通过设置 appendonly yes 开启 AOF 持久化:
      appendonly yes
      appendfilename appendonly.aof
  3. 自定义持久化策略
    • 可以在配置文件中设置更多详细的持久化策略,例如指定 RDB 文件的压缩或归档策略。
如何设置Redis持久化

以下是如何设置 Redis 的 RDB 和 AOF 持久化:

  1. RDB 持久化配置

    • 设置 RDB 持久化的触发条件:
      save 900 1
      save 300 10
      save 60 10000
    • 设置 RDB 文件的名称和压缩:
      dbfilename dump.rdb
      rdbcompression yes
  2. AOF 持久化配置

    • 开启 AOF 持久化并设置日志文件名称:
      appendonly yes
      appendfilename appendonly.aof
    • 设置 AOF 文件的重写策略:
      auto-aof-rewrite-percentage 100
      auto-aof-rewrite-min-size 64mb
  3. 手动触发持久化
    • 可以手动触发 RDB 持久化:
      redis-cli bgsave
    • 可以手动触发 AOF 日志重写:
      redis-cli bgrewriteaof
Redis备份与恢复步骤

备份和恢复是保证数据安全的重要步骤。以下是 Redis 的备份与恢复步骤:

  1. 备份 RDB 文件

    • 在 Redis 服务运行时,可以使用 bgsave 命令生成 RDB 文件:
      redis-cli bgsave
    • 定期手动备份 RDB 文件,例如每天备份一次:
      cp /path/to/dump.rdb /path/to/backup/dump.rdb
  2. 备份 AOF 日志

    • 每次生成新的 AOF 日志文件时,可以将其复制到安全位置进行备份:
      cp /path/to/appendonly.aof /path/to/backup/appendonly.aof
  3. 恢复数据

    • 将备份的 RDB 文件复制回 Redis 数据目录:
      cp /path/to/backup/dump.rdb /path/to/dump.rdb
    • 重启 Redis 服务,RDB 文件会被自动加载:

      redis-server /etc/redis/redis.conf
    • 将备份的 AOF 日志文件复制回 Redis 数据目录,并重新启动 Redis 服务:
      cp /path/to/backup/appendonly.aof /path/to/appendonly.aof
      redis-server /etc/redis/redis.conf
  4. 清理备份文件
    • 定期清理旧的备份文件,以节省磁盘空间:
      rm /path/to/backup/dump.rdb
      rm /path/to/backup/appendonly.aof
Redis监控与调试
Redis监控工具介绍

监控 Redis 的运行状态和性能是确保其高效运行的关键。以下是一些常用的 Redis 监控工具:

  1. Redis CLI 的 INFO 命令

    • 使用 Redis CLI 的 info 命令可以查看 Redis 的各种状态信息:
      redis-cli info
    • 输出包括服务器信息、内存使用情况、客户端连接数、键空间统计、持久化状态等。
  2. Redis CLI 的 MONITOR 命令

    • 使用 MONITOR 命令可以实时监控 Redis 的所有命令执行情况:
      redis-cli monitor
  3. Redis Sentinel

    • Redis Sentinel 是 Redis 的高可用解决方案,可以监控 Redis 服务器的状态,自动执行故障转移。
    • 安装和配置 Redis Sentinel:
      redis-server --sentinel
  4. 第三方监控工具
    • 使用第三方监控工具如 GrafanaPrometheusRedis Insights 来监控 Redis 的性能。
    • 例如,使用 Prometheus 采集 Redis 指标并用 Grafana 进行可视化展示:
      curl -sSL https://raw.githubusercontent.com/prometheus/prometheus/v2.37.2/scripts/install/prometheus.sh | sh -s -- --prefix /usr/local
如何监控Redis性能

监控 Redis 性能可以帮助了解系统当前的状态并及时发现潜在问题。以下是一些常用的监控步骤:

  1. 使用 Redis CLI 的 INFO 命令

    • 查看 Redis 的内存使用情况:
      redis-cli info memory
    • 查看 Redis 的键空间统计信息:
      redis-cli info keyspace
  2. 使用 MONITOR 命令

    • 监控 Redis 的命令执行情况:
      redis-cli monitor
  3. 使用 Prometheus 和 Grafana

    • 配置 Prometheus 通过 Redis 模板抓取 Redis 指标:
      scrape_configs:
      - job_name: 'redis'
        static_configs:
          - targets: ['localhost:6379']
    • 使用 Grafana 进行可视化展示:
      docker run -d -p 3000:3000 grafana/grafana
  4. 设置 Redis Sentinel 监控

    • 安装和配置 Redis Sentinel:
      redis-server --sentinel
  5. 定期备份和检查数据
    • 定期备份 RDB 文件和 AOF 日志文件,防止数据丢失。
    • 检查备份文件的完整性和可用性。
常见问题排查与调试技巧

在使用 Redis 的过程中,可能会遇到各种问题,下面是一些常见的问题排查和调试技巧:

  1. 内存泄漏

    • 分析 Redis 的内存使用情况,检查是否有键的过期时间设置不合理。
    • 使用 INFO 命令查看内存使用情况:
      redis-cli info memory
    • 调整 maxmemory 和淘汰策略,释放内存。
  2. 性能瓶颈

    • 使用 MONITOR 命令监控 Redis 的命令执行情况:
      redis-cli monitor
    • 查看 Redis 的运行时长和命令执行时间:
      redis-cli info commandstats
  3. 连接问题

    • 检查 Redis 的客户端连接数是否达到上限:
      redis-cli info clients
    • 检查 Redis 的网络配置,确保 Redis 服务器可以被正确访问。
  4. 持久化问题

    • 检查 RDB 和 AOF 日志文件的完整性:
      redis-cli bgsave
      redis-cli bgrewriteaof
    • 检查 Redis 的持久化配置是否正确:
      save 900 1
      save 300 10
      appendonly yes
      appendfilename appendonly.aof
  5. 故障转移
    • 使用 Redis Sentinel 监控 Redis 服务器的状态,并自动执行故障转移:
      redis-server --sentinel
    • 查看 Sentinel 的状态信息:
      redis-cli sentinel monitor mymaster 127.0.0.1 6379 1

通过上述方法,可以有效地监控和调试 Redis 的运行状态,确保其稳定运行。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
手記
粉絲
9
獲贊與收藏
26

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消