Redis 的线程模型

一、引言

在当今的互联网时代,数据的存储和处理速度对于应用程序的性能至关重要。Redis 作为一种高性能的内存数据库,以其快速的数据读写速度和丰富的数据结构而受到广泛关注。而 Redis 的线程模型是其实现高效数据存储与处理的核心机制之一。本文将深入探讨 Redis 的线程模型,帮助读者更好地理解和应用 Redis。

二、Redis 概述

(一)Redis 的定义和特点

Redis 是一个开源的内存数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis 具有以下特点:

  1. 高性能:Redis 是基于内存存储的,数据读写速度非常快。
  2. 丰富的数据结构:Redis 支持多种数据结构,如字符串、哈希表、列表、集合和有序集合等。
  3. 持久化:Redis 可以将数据持久化到磁盘,以保证数据的安全性。
  4. 高可用性:Redis 支持主从复制和哨兵模式,可以实现高可用性。

(二)Redis 的应用场景

Redis 广泛应用于以下场景:

  1. 缓存:Redis 可以作为缓存,将热点数据存储在内存中,以提高数据的访问速度。
  2. 计数器和排行榜:Redis 的原子操作可以方便地实现计数器和排行榜功能。
  3. 消息队列:Redis 的列表和发布 / 订阅功能可以实现简单的消息队列。
  4. 分布式锁:Redis 的 SETNX 命令可以实现分布式锁。

三、Redis 的线程模型

(一)Redis 的单线程模型

  1. 设计理念
    • Redis 采用单线程模型的设计理念是为了避免多线程带来的线程切换和锁竞争等问题,从而提高系统的性能和稳定性。
    • 在单线程模型下,Redis 可以充分利用 CPU 的单核性能,避免了多线程编程中的复杂性和不确定性。
  2. 工作原理
    • Redis 的单线程模型主要包括以下几个部分:
      • 事件循环:Redis 使用事件循环来处理客户端的请求和服务器的内部事件。事件循环会不断地监听文件描述符,当有事件发生时,会调用相应的事件处理函数进行处理。
      • 命令解析器:当客户端发送请求时,Redis 会使用命令解析器对请求进行解析,将请求转换为内部的命令格式。
      • 命令执行器:命令执行器会根据命令的类型和参数,执行相应的操作,并将结果返回给客户端。
  3. 优势
    • 简单高效:单线程模型使得 Redis 的代码实现更加简单,减少了多线程编程中的复杂性和不确定性。同时,单线程模型也避免了多线程带来的线程切换和锁竞争等问题,提高了系统的性能和稳定性。
    • 原子性:在单线程模型下,Redis 的命令执行是原子性的,即一个命令的执行不会被其他命令打断。这使得 Redis 可以方便地实现一些原子操作,如计数器和排行榜等。
    • 可预测性:单线程模型使得 Redis 的行为更加可预测,因为在单线程环境下,不会出现多线程编程中的不确定性和复杂性。这使得开发人员可以更加容易地理解和调试 Redis 的代码。

(二)Redis 的多线程模型

  1. 设计背景
    • 随着计算机硬件的发展,多核 CPU 已经成为主流。为了充分利用多核 CPU 的性能,Redis 从 6.0 版本开始引入了多线程模型。
    • 在多线程模型下,Redis 可以将一些耗时的操作(如文件 I/O 和网络 I/O)交给多个线程来处理,从而提高系统的性能。
  2. 工作原理
    • Redis 的多线程模型主要包括以下几个部分:
      • 主线程:主线程负责接收客户端的请求,并将请求放入队列中。
      • 工作线程:工作线程从队列中取出请求,并进行处理。工作线程可以同时处理多个请求,从而提高系统的性能。
      • 结果返回:工作线程处理完请求后,将结果返回给主线程,由主线程将结果返回给客户端。
  3. 优势
    • 充分利用多核 CPU 的性能:多线程模型可以将一些耗时的操作交给多个线程来处理,从而充分利用多核 CPU 的性能,提高系统的性能。
    • 提高系统的并发性:多线程模型可以同时处理多个请求,从而提高系统的并发性,减少客户端的等待时间。
    • 可扩展性:多线程模型使得 Redis 可以更加容易地进行扩展,当系统的负载增加时,可以通过增加工作线程的数量来提高系统的性能。

(三)Redis 线程模型的选择

  1. 单线程模型的适用场景
    • 当系统的负载较轻,对性能要求不是很高时,可以选择单线程模型。单线程模型的代码实现更加简单,维护成本更低,同时也可以避免多线程带来的复杂性和不确定性。
    • 当系统需要保证原子性和可预测性时,可以选择单线程模型。在单线程模型下,Redis 的命令执行是原子性的,行为更加可预测,这使得开发人员可以更加容易地理解和调试 Redis 的代码。
  2. 多线程模型的适用场景
    • 当系统的负载较重,对性能要求很高时,可以选择多线程模型。多线程模型可以充分利用多核 CPU 的性能,提高系统的性能。
    • 当系统需要处理大量的文件 I/O 和网络 I/O 操作时,可以选择多线程模型。多线程模型可以将这些耗时的操作交给多个线程来处理,从而提高系统的性能。

四、Redis 线程模型的实际应用

(一)Redis 在缓存中的应用

  1. 缓存的作用和优势
    • 缓存是一种将数据存储在内存中的技术,它可以提高数据的访问速度,减少数据库的负载。Redis 作为一种高性能的内存数据库,非常适合用作缓存。
    • 使用 Redis 作为缓存可以带来以下优势:
      • 提高数据的访问速度:Redis 的数据存储在内存中,读写速度非常快,可以大大提高数据的访问速度。
      • 减少数据库的负载:将热点数据存储在 Redis 中,可以减少数据库的访问次数,从而降低数据库的负载。
      • 提高系统的性能和可扩展性:Redis 的高性能和可扩展性可以提高系统的整体性能和可扩展性。
  2. Redis 缓存的实现方式
    • Redis 缓存的实现方式主要有两种:
      • 直接使用 Redis 作为缓存:将数据直接存储在 Redis 中,当需要访问数据时,先从 Redis 中查找,如果 Redis 中没有数据,则从数据库中查找,并将数据存储到 Redis 中。
      • 使用 Redis 作为二级缓存:将 Redis 作为数据库的二级缓存,当需要访问数据时,先从一级缓存中查找,如果一级缓存中没有数据,则从 Redis 中查找,如果 Redis 中也没有数据,则从数据库中查找,并将数据存储到一级缓存和 Redis 中。
  3. Redis 缓存的线程安全问题
    • 在多线程环境下,使用 Redis 作为缓存可能会出现线程安全问题。例如,多个线程同时访问 Redis 缓存,如果没有采取适当的同步措施,可能会导致数据不一致的问题。
    • 为了解决 Redis 缓存的线程安全问题,可以采取以下措施:
      • 使用 Redis 的事务:Redis 的事务可以保证多个命令的原子性执行,从而避免数据不一致的问题。
      • 使用 Redis 的分布式锁:Redis 的分布式锁可以保证在多个线程同时访问共享资源时,只有一个线程能够获得锁,从而避免数据不一致的问题。

(二)Redis 在计数器和排行榜中的应用

  1. 计数器和排行榜的作用和优势
    • 计数器和排行榜是常见的应用场景,它们可以用于统计用户的行为、商品的销量等。Redis 的原子操作可以方便地实现计数器和排行榜功能。
    • 使用 Redis 实现计数器和排行榜可以带来以下优势:
      • 高性能:Redis 的原子操作可以在内存中快速地实现计数器和排行榜功能,性能非常高。
      • 可扩展性:Redis 可以很容易地进行扩展,当系统的负载增加时,可以通过增加节点来提高系统的性能。
      • 实时性:Redis 的数据存储在内存中,读写速度非常快,可以实时地反映数据的变化。
  2. Redis 计数器的实现方式
    • Redis 计数器的实现方式主要有两种:
      • 使用 INCR 和 DECR 命令:Redis 的 INCR 和 DECR 命令可以对一个整数进行自增和自减操作,可以方便地实现计数器功能。
      • 使用 SET 和 GET 命令:Redis 的 SET 和 GET 命令可以对一个字符串进行设置和获取操作,可以将计数器的值存储在一个字符串中,然后使用 SET 和 GET 命令进行操作。
  3. Redis 排行榜的实现方式
    • Redis 排行榜的实现方式主要有两种:
      • 使用 SORT 命令:Redis 的 SORT 命令可以对一个列表进行排序操作,可以将排行榜的数据存储在一个列表中,然后使用 SORT 命令进行排序操作。
      • 使用 ZSET 数据结构:Redis 的 ZSET 数据结构是一个有序集合,可以方便地实现排行榜功能。可以将排行榜的数据存储在一个 ZSET 中,然后使用 ZRANGE 和 ZREVRANGE 命令进行查询操作。

(三)Redis 在消息队列中的应用

  1. 消息队列的作用和优势
    • 消息队列是一种用于在不同系统之间进行异步通信的技术,它可以提高系统的性能和可扩展性。Redis 的列表和发布 / 订阅功能可以实现简单的消息队列。
    • 使用 Redis 实现消息队列可以带来以下优势:
      • 高性能:Redis 的数据存储在内存中,读写速度非常快,可以快速地处理消息队列中的消息。
      • 可扩展性:Redis 可以很容易地进行扩展,当系统的负载增加时,可以通过增加节点来提高系统的性能。
      • 简单易用:Redis 的列表和发布 / 订阅功能非常简单易用,可以快速地实现消息队列功能。
  2. Redis 消息队列的实现方式
    • Redis 消息队列的实现方式主要有两种:
      • 使用列表实现消息队列:Redis 的列表可以作为一个简单的消息队列,生产者可以使用 LPUSH 命令将消息放入列表中,消费者可以使用 RPOP 命令从列表中取出消息。
      • 使用发布 / 订阅实现消息队列:Redis 的发布 / 订阅功能可以实现一个更加灵活的消息队列,生产者可以使用 PUBLISH 命令将消息发布到一个频道中,消费者可以使用 SUBSCRIBE 命令订阅一个频道,当有消息发布到频道中时,消费者会收到通知。
  3. Redis 消息队列的线程安全问题
    • 在多线程环境下,使用 Redis 作为消息队列可能会出现线程安全问题。例如,多个线程同时访问 Redis 消息队列,如果没有采取适当的同步措施,可能会导致数据不一致的问题。
    • 为了解决 Redis 消息队列的线程安全问题,可以采取以下措施:
      • 使用 Redis 的事务:Redis 的事务可以保证多个命令的原子性执行,从而避免数据不一致的问题。
      • 使用 Redis 的分布式锁:Redis 的分布式锁可以保证在多个线程同时访问共享资源时,只有一个线程能够获得锁,从而避免数据不一致的问题。

(四)Redis 在分布式锁中的应用

  1. 分布式锁的作用和优势
    • 分布式锁是一种用于在分布式系统中实现互斥访问共享资源的技术,它可以避免多个节点同时对共享资源进行修改而导致的数据不一致问题。Redis 的 SETNX 命令可以实现分布式锁。
    • 使用 Redis 实现分布式锁可以带来以下优势:
      • 高性能:Redis 的 SETNX 命令可以在内存中快速地实现分布式锁功能,性能非常高。
      • 可扩展性:Redis 可以很容易地进行扩展,当系统的负载增加时,可以通过增加节点来提高系统的性能。
      • 简单易用:Redis 的 SETNX 命令非常简单易用,可以快速地实现分布式锁功能。
  2. Redis 分布式锁的实现方式
    • Redis 分布式锁的实现方式主要有以下步骤:
      • 使用 SETNX 命令设置一个锁:如果 SETNX 命令返回 1,表示成功设置了锁;如果 SETNX 命令返回 0,表示锁已经被其他节点占用。
      • 设置锁的过期时间:为了避免锁被某个节点占用后一直不释放,可以为锁设置一个过期时间。当锁过期时,Redis 会自动删除锁,其他节点可以重新获取锁。
      • 释放锁:当节点完成对共享资源的操作后,需要使用 DEL 命令释放锁,以便其他节点可以获取锁。
  3. Redis 分布式锁的线程安全问题
    • 在多线程环境下,使用 Redis 作为分布式锁可能会出现线程安全问题。例如,多个线程同时获取锁,如果没有采取适当的同步措施,可能会导致多个线程同时获得锁,从而破坏了锁的互斥性。
    • 为了解决 Redis 分布式锁的线程安全问题,可以采取以下措施:
      • 使用 Lua 脚本:Redis 支持 Lua 脚本,可以将获取锁和释放锁的操作封装在一个 Lua 脚本中,保证这两个操作的原子性执行。
      • 使用 Redisson 等开源框架:Redisson 是一个基于 Redis 的 Java 客户端,它提供了丰富的分布式锁实现,可以方便地在 Java 项目中使用分布式锁。

五、Redis 线程模型的性能优化

(一)优化 Redis 的配置参数

  1. 设置合适的内存大小
    • Redis 的内存大小会影响其性能和稳定性。如果内存设置过小,可能会导致 Redis 频繁地进行内存交换,从而影响性能;如果内存设置过大,可能会浪费系统资源。因此,需要根据实际情况设置合适的内存大小。
  2. 调整线程数量
    • 如果使用 Redis 的多线程模型,可以根据系统的负载情况调整线程数量。如果线程数量设置过少,可能无法充分利用多核 CPU 的性能;如果线程数量设置过多,可能会导致线程切换频繁,从而影响性能。
  3. 优化持久化策略
    • Redis 的持久化策略会影响其性能和数据安全性。如果需要保证数据的安全性,可以选择使用 AOF 持久化;如果对性能要求较高,可以选择使用 RDB 持久化。同时,也可以根据实际情况调整持久化的频率和方式,以提高性能。

(二)使用 Redis 的连接池

  1. 连接池的作用和优势
    • 连接池是一种用于管理数据库连接的技术,它可以提高数据库的访问效率和性能。使用 Redis 的连接池可以避免频繁地创建和销毁 Redis 连接,从而提高系统的性能。
    • 使用 Redis 的连接池可以带来以下优势:
      • 提高性能:连接池可以复用已经建立的连接,避免频繁地创建和销毁连接,从而提高系统的性能。
      • 管理连接:连接池可以管理连接的数量和生命周期,避免连接泄漏和资源浪费。
      • 提高可扩展性:连接池可以根据系统的负载情况动态调整连接的数量,从而提高系统的可扩展性。
  2. Redis 连接池的实现方式
    • 在 Java 项目中,可以使用 Jedis 或 Redisson 等 Redis 客户端来实现连接池。这些客户端都提供了连接池的实现,可以方便地在项目中使用。
  3. 连接池的配置参数
    • 在使用 Redis 的连接池时,需要根据实际情况配置连接池的参数,如最大连接数、最小连接数、连接超时时间等。这些参数的设置会影响连接池的性能和稳定性,需要根据实际情况进行调整。

(三)避免大键和热键

  1. 大键和热键的问题
    • 大键是指存储的数据量较大的键,热键是指被频繁访问的键。如果 Redis 中存在大键或热键,可能会导致性能问题。
    • 大键会占用大量的内存空间,可能会导致 Redis 进行内存交换,从而影响性能。热键会导致 Redis 的某个节点负载过高,可能会影响整个系统的性能。
  2. 避免大键和热键的方法
    • 避免存储大键:如果需要存储大量的数据,可以将数据拆分成多个小键进行存储,避免存储大键。
    • 分散热键的访问:可以使用哈希算法将热键的访问分散到多个节点上,避免某个节点负载过高。同时,也可以使用缓存等技术来减少热键的访问频率。

六、实际案例分析

(一)案例背景

假设有一个电商平台,需要实现商品的库存管理和订单处理功能。为了提高系统的性能和可扩展性,决定使用 Redis 来存储商品的库存信息和订单状态信息。

(二)Redis 的应用场景

  1. 商品库存管理
    • 使用 Redis 的哈希表来存储商品的库存信息,每个商品的库存信息存储在一个哈希表中,键为商品的 ID,值为商品的库存数量。
    • 当用户下单时,需要减少商品的库存数量。可以使用 Redis 的事务来保证库存的减少操作是原子性的,避免出现库存超卖的问题。
  2. 订单状态管理
    • 使用 Redis 的字符串来存储订单的状态信息,每个订单的状态信息存储在一个字符串中,键为订单的 ID,值为订单的状态。
    • 当订单状态发生变化时,需要更新订单的状态信息。可以使用 Redis 的 SET 命令来更新订单的状态信息,保证订单状态的实时性。

(三)Redis 的线程模型选择

  1. 单线程模型的考虑
    • 由于商品库存管理和订单状态管理的操作相对简单,对性能要求不是很高,同时需要保证操作的原子性和可预测性,因此可以考虑使用 Redis 的单线程模型。
    • 在单线程模型下,Redis 的命令执行是原子性的,可以避免多线程带来的线程切换和锁竞争等问题,提高系统的性能和稳定性。

(四)性能优化措施

  1. 使用连接池
    • 为了避免频繁地创建和销毁 Redis 连接,可以使用连接池来管理 Redis 连接。连接池可以复用已经建立的连接,提高系统的性能。
  2. 避免大键和热键
    • 在存储商品库存信息和订单状态信息时,要避免使用大键和热键。可以将数据进行拆分,存储在多个小键中,以提高 Redis 的性能。
  3. 优化数据结构
    • 根据实际需求选择合适的数据结构来存储数据。例如,对于商品库存信息,可以使用哈希表来存储,对于订单状态信息,可以使用字符串来存储。
  4. 设置合理的过期时间
    • 对于一些临时数据,可以设置合理的过期时间,以便 Redis 自动删除过期数据,释放内存空间。

(五)效果评估

  1. 性能测试
    • 在实际应用中,可以使用性能测试工具对系统进行性能测试,比较使用 Redis 前后的系统性能变化。
    • 可以测试不同并发情况下的商品库存查询和订单状态查询的响应时间,以及商品库存减少和订单状态更新的操作时间。
  2. 可扩展性测试
    • 可以通过增加系统的负载和数据量来测试系统的可扩展性。观察 Redis 在处理大量数据和高并发请求时的性能表现。
  3. 稳定性测试
    • 进行长时间的稳定性测试,观察系统在长时间运行过程中是否出现故障或性能下降的情况。

七、总结

Redis 的线程模型是其实现高效数据存储与处理的核心机制之一。通过了解 Redis 的单线程和多线程模型的特点和适用场景,以及在实际应用中的注意事项,可以更好地发挥 Redis 的性能优势,提高系统的性能和可扩展性。同时,通过合理的性能优化措施和实际案例分析,可以进一步加深对 Redis 线程模型的理解和应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/912245.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[极客大挑战 2019]PHP 1

[极客大挑战 2019]PHP 1 审题 猜测备份在www.zip中,输入下载文件。 知识点 反序列化 解题 查看代码 看到index.php中包含了class.php,直接看class.php中的代码 查看条件 当usernameadmin,password100时输出flag 构造反序列化 输入select中&#…

【初阶数据结构与算法】线性表之单链表的定义与实现

文章目录 一、单链表的概念与结构1.单链表的概念2.单链表的节点3.链表的性质 二、单链表的实现1.结构准备2.链表的打印和节点申请打印函数节点申请函数 3.链表的头插和尾插头插函数尾插函数 4.链表的头删和尾删头删函数尾删函数 5.查找指定节点6.指定节点位置的删除和插入删除指…

SCNU习题 总结与复习

1. P1:构建最大二叉树 【分治】 重点 构树函数需要注意的点; 前序遍历需要注意,本题的输出有点特点。若一个结点无左子,无右子就不再下去遍历; 其他情况都要下去遍历; 2. P2 寻找多数【分治】 没啥,注意…

代码随想录-栈和队列-用栈实现队列

问题描述 题目描述中有说不存在空栈的pop和peek,所以无需判断这个 解析 重点在于思路,代码白给。 要用栈实现队列,肯定是两个栈才可以。一个做入队操作,一个做出队操作。 首先入队简单,往栈里加就完事了。 出队复…

Scrapy框架:Python爬虫开发快速入门与初试

在众多编程语言中,Python以其简洁的语法和强大的库支持,成为了编写爬虫的首选语言。而在Python的爬虫库中,Scrapy框架无疑是其中的佼佼者。Scrapy是一个开源的、基于Python的爬虫框架,它提供了一套完整的工具和功能,使…

三菱QD77MS定位模块速度限制功能

“速度限制功能”是控制中的指令速度超过“速度限制值”的情况下,将指令速度限制在“速度限制值”的设置范围内的功能。 [1]速度限制功能与各控制的关系 速度限制功能”与各控制的关系如下所示。 [3]速度限制功能的设置方法 使用“速度限制功能”时,在如…

LeetCode【0002】两数相加

本文目录 1 中文题目2 求解思路2.1 基础解法: 递归解法2.2 最优解法:迭代法 3 题目总结 1 中文题目 给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请将两个数相…

鸿蒙进阶-属性动画

hello大家好啊,这里是鸿蒙开天组,今天我们来学习鸿蒙中的动画属性。 先来说说动画~ 属性值的变化,通常会引发 UI 的变化,结合动画可以让这个变化过程【更为流畅】,反之这个过程将在一瞬间完成,用户体验不好&#xff…

工业相机常用功能之白平衡及C++代码分享

目录 1、白平衡的概念解析 2、相机白平衡参数及操作 2.1 相机白平衡参数 2.2 自动白平衡操作 2.3 手动白平衡操作流程 3、C++ 代码从XML读取参数及设置相机参数 3.1 读取XML 3.2 C++代码,从XML读取参数 3.3 给相机设置参数 1、白平衡的概念解析 白平衡(White Balance)…

语音识别ic赋能烤箱,离线对话操控,引领智能厨房新体验

一、智能烤箱产品的行业背景 随着科技的飞速发展,智能家居已经成为现代家庭的新宠。智能烤箱作为智能家居的重要组成部分,正逐渐从高端市场走向普通家庭。消费者对于烤箱的需求不再仅仅局限于基本的烘焙功能,而是更加注重其智能化、便捷化和…

智能合约在供应链金融中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 智能合约在供应链金融中的应用 智能合约在供应链金融中的应用 智能合约在供应链金融中的应用 引言 智能合约概述 定义与原理 发展…

书生大模型实战营-玩转HF/魔搭社区闯关任务

通过Github Codespace下载InternLM模型并运行 本篇博客是记录《书生大模型实战营第四期-玩转HF/魔搭/魔乐》章节的闯关任务从HF上下载模型文件,对实战营感兴趣的小伙伴也可以扫码报名哦。 一、通过模版创建Codespace环境 访问codespace 点击Jupyter Notebook 模版…

多维视角下的知识管理:Spring Boot应用

2 开发技术 2.1 VUE框架 Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架。 Vue 只关注视图层, 采用自底向上增量开发的设计。 Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。 2.2 Mysql数据库 …

【hdfs】【hbase】【大数据技术基础】实践二 HBase Java API编程

实践二 HBase Java API编程 为什么可以写命令还要编写程序?自动化批量处理? 尽管我们可以通过HBase的shell命令行工具进行数据操作,但在实际的生产环境中,为了提高效率和实现自动化处理,我们通常需要编写程序来与HBa…

【Pikachu靶场:XSS系列】xss之过滤,xss之htmlspecialchars,xss之herf输出,xss之js输出通关啦

一、xss之过滤 <svg onloadalert("过关啦")> 二、xss之htmlspecialchars javascript:alert(123) 原理&#xff1a;输入测试文本为herf的属性值和内容值&#xff0c;所以转换思路直接变为js代码OK了 三、xss之href输出 JavaScript:alert(假客套) 原理&#x…

【数据分享】1901-2023年我国省市县镇四级的逐年降水数据(免费获取/Shp/Excel格式)

之前我们分享过1901-2023年1km分辨率逐月降水栅格数据和Shp和Excel格式的省市县四级逐月降水数据&#xff0c;原始的逐月降水栅格数据来源于彭守璋学者在国家青藏高原科学数据中心平台上分享的数据&#xff01;基于逐月数据我们采用求年累计值的方法得到逐年降水栅格数据&#…

Istio Gateway发布服务

1. Istio Gateway发布服务 在集群中部署一个 tomcat 应用程序。然后将部署一个 Gateway 资源和一个与 Gateway 绑定的 VirtualService&#xff0c;以便在外部 IP 地址上公开该应用程序。 1.1 部署 Gateway 资源 vim ingressgateway.yaml --- apiVersion: networking.istio.…

暮雨直播 1.3.2 | 内置直播源,频道丰富,永久免费

暮雨直播是一款内置直播源的电视直播应用程序&#xff0c;提供丰富的频道内容&#xff0c;包括教学、首页、一线、博主、解说、动漫、堆堆等。该应用的内置直播源持续更新维护&#xff0c;确保用户可以稳定地观看各种电视频道。暮雨直播承诺永久免费&#xff0c;为用户提供了一…

大数据学习10之Hive高级

1.Hive高级 将大的文件按照某一列属性进行GROUP BY 就是分区&#xff0c;只是默认开窗存储&#xff1b; 分区是按行&#xff0c;如一百行数据&#xff0c;按十位上的数字分区&#xff0c;则有十个分区&#xff0c;每个分区里有十行&#xff1b; 分桶是根据某个字段哈希对桶数取…

Java基于SpringBoot+Vue框架的宠物寄养系统(V2.0),附源码,文档

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…