当前位置: 首页 > news >正文

Redis 的不同数据结构分别适用于哪些微服务场景

我们一块来分析下Redis 的不同数据结构在微服务场景下的具体应用:

1. String (字符串)

  • 特点: 最基本的数据类型,二进制安全,可以存储任何类型的数据(文本、序列化对象、图片等),最大 512MB。支持原子性的递增/递减操作。
  • 微服务适用场景:
    • 分布式缓存: 最常见的用途。缓存数据库查询结果、API 响应、渲染后的 HTML 片段等。
      • 示例: UserService 查询用户信息后,将用户 ID 作为 Key,用户信息(序列化后的 JSON 或其他格式)作为 Value 存入 Redis String,并设置 TTL。GET user:123 -> {"name": "Alice", "email": "..."}
    • 分布式会话: 存储 Session ID 到用户会话数据的映射。
      • 示例: 用户登录后,AuthService 生成一个 Session ID,将 Session ID 作为 Key,用户的登录状态、权限等信息作为 Value 存入 Redis String。GET session:xyzabc -> {"userId": 123, "role": "admin", "loginTime": ...}
    • 计数器/限流器: 利用 INCR, DECR, INCRBY 等原子操作实现。
      • 示例: APIGateway 对某个接口进行限流,使用 INCR api:/orders:user:123,并结合 EXPIRE 设置时间窗口。当计数值超过阈值时拒绝请求。
      • 示例: ContentService 统计文章阅读数:INCR article:readcount:456
    • 分布式锁 (简单实现): 利用 SET key value NX EX seconds 命令实现简单的互斥锁。
      • 示例: InventoryService 在扣减库存前尝试获取商品锁:SET product:lock:sku123 my_request_id NX EX 30

2. Hash (哈希)

  • 特点: 存储一个 Key 到多个 Field-Value 对的映射,类似于编程语言中的 Map 或 Dictionary。适合存储结构化对象。
  • 微服务适用场景:
    • 缓存结构化对象: 存储对象的部分或全部属性,便于单独更新或获取某个字段,节省网络带宽和序列化开销。
      • 示例: UserService 缓存用户信息,Key 为 user:123,Fields 包括 name, email, age 等。HGET user:123 name -> "Alice"; HSET user:123 age 31 只更新年龄。
    • 购物车: 存储用户的购物车信息。
      • 示例: CartService 使用 Hash 存储购物车,Key 为 cart:user:123,Field 为商品 ID (product:sku456),Value 为商品数量 (3)。HINCRBY cart:user:123 product:sku456 1 实现添加商品数量。

3. List (列表)

  • 特点: 有序的字符串列表,按照插入顺序排序。可以在列表头部或尾部添加/移除元素。支持阻塞式弹出操作。
  • 微服务适用场景:
    • 轻量级消息队列/任务队列: 实现先进先出 (FIFO) 或后进先出 (LIFO) 的简单队列。
      • 示例: OrderService 创建订单后,使用 LPUSH order:notify:queue {"orderId": 789, "type": "email"} 将通知任务推入队列。NotificationService 使用 BRPOP order:notify:queue 10 阻塞式地获取并处理任务。
    • 最新消息/动态 Feed: 存储用户最近的操作或接收到的消息列表(通常需要配合 LTRIM 来限制列表长度)。
      • 示例: TimelineService 用户发布新帖子后,LPUSH user:timeline:123 post:abc,并用 LTRIM user:timeline:123 0 999 保留最新的 1000 条。

4. Set (集合)

  • 特点: 无序的、唯一的字符串集合。支持高效的成员检查、添加、删除操作,以及集合间的交集、并集、差集运算。
  • 微服务适用场景:
    • 标签系统/分类: 存储对象(如文章、商品)关联的标签。
      • 示例: ProductService 存储商品的标签:SADD product:tags:sku123 "electronics" "audio" "bluetooth"。可以方便地通过 SISMEMBER 检查商品是否有某标签,或通过 SINTER 查找同时具有多个标签的商品。
    • 共同好友/关注关系: 存储用户的关注列表或好友列表,并利用集合运算找到共同关系。
      • 示例: SocialService 存储用户关注的人:SADD user:following:alice "bob" "charlie"; SADD user:following:bob "alice" "charlie" "david". SINTER user:following:alice user:following:bob -> {"charlie"} (共同关注)。
    • 唯一访客统计 (简单场景): 记录访问某页面或功能的独立用户 ID。
      • 示例: AnalyticsService 记录访问某页面的独立访客:SADD page:visitors:/home "user:123" "user:456"SCARD page:visitors:/home 获取独立访客数。

5. Sorted Set (ZSet / 有序集合)

  • 特点: Set 的升级版,每个成员都关联一个 double 类型的分数 (score),并根据分数进行排序。成员唯一,但分数可以重复。支持按分数范围或排名范围获取成员。
  • 微服务适用场景:
    • 排行榜: 根据分数(如积分、销售额、时间戳)对成员进行排序。
      • 示例: GameService 存储玩家积分榜:ZADD game:leaderboard 1500 "player1" 1200 "player2"ZREVRANGE game:leaderboard 0 9 WITHSCORES 获取排名前 10 的玩家及其分数。
    • 延迟队列/定时任务: 将任务的执行时间戳作为 score,利用 ZRANGEBYSCORE 定期查询到期的任务。
      • 示例: OrderService 创建订单后 30 分钟未支付自动取消:ZADD order:pending:cancel <current_timestamp + 30_minutes> "order:789"。后台任务定时 ZRANGEBYSCORE order:pending:cancel 0 <current_timestamp> 获取到期订单进行处理。
    • 带权重的任务队列: score 可以代表任务优先级。

6. Stream (流)

  • 特点: Redis 5.0 引入的强大的 append-only 日志结构。支持消费组 (Consumer Groups),允许多个消费者并行处理同一个流的不同部分,并提供消息确认 (ACK) 机制,比 List 做消息队列更可靠、功能更丰富。
  • 微服务适用场景:
    • 可靠的消息队列/事件总线: 用于服务间的异步通信、事件溯源(轻量级)、日志收集等。
      • 示例: OrderService 在订单状态变更时,XADD order:events * status "paid" orderId "789" userId "123" 将事件添加到流中。InventoryServiceShippingService 可以分别创建消费组,独立地从流中读取并处理 paid 事件,并通过 XACK 确认处理完成。

7. HyperLogLog (HLL)

  • 特点: 概率数据结构,用于对集合的基数(唯一元素的数量)进行估算,占用内存极小 (固定约 12KB),但结果有微小误差 (标准误差约 0.81%)。
  • 微服务适用场景:
    • 大规模唯一计数: 统计海量数据中的独立元素数量,如网站的 UV (Unique Visitors)、独立 IP 数、搜索词的独立用户数等,对精度要求不是 100% 严格的场景。
      • 示例: AnalyticsService 统计每日独立访客:对每个访问的用户 ID 执行 PFADD daily_visitors:2023-10-27 "user_id_abc"。最后通过 PFCOUNT daily_visitors:2023-10-27 获得估算的 UV 值。

8. Geospatial (GEO)

  • 特点: 基于 Sorted Set 实现,专门用于存储地理空间坐标(经度、纬度)并进行相关查询。
  • 微服务适用场景:
    • 位置服务: 查找附近的人/地点、计算两点间距离等。
      • 示例: LocationServiceRideSharingService 存储司机的位置:GEOADD drivers:available 116.40 39.90 "driver123"。用户请求打车时,GEORADIUS drivers:available <user_longitude> <user_latitude> 5 km WITHDIST 查找 5 公里内的可用司机及其距离。

总结:

选择哪种 Redis 数据结构取决于微服务具体要解决的问题。通过比较每种数据结构的特性和优势,可以更高效的实现微服务中的缓存、通信和特定业务逻辑。我们要合理利用这些结构让Redis 在微服务架构中发挥它的价值。

相关文章:

Redis 的不同数据结构分别适用于哪些微服务场景

我们一块来分析下Redis 的不同数据结构在微服务场景下的具体应用&#xff1a; 1. String (字符串) 特点: 最基本的数据类型&#xff0c;二进制安全&#xff0c;可以存储任何类型的数据&#xff08;文本、序列化对象、图片等&#xff09;&#xff0c;最大 512MB。支持原子性的…...

用node编写git钩子hooks的示例

关于 git 钩子函数&#xff0c;就是在 git 进行提交的时候触发一些可执行脚本的功能&#xff0c;详情可以看这篇博客【GIT知识】git进阶-hooks勾子脚本_git hooks-CSDN博客&#xff0c;我这里稍微演示一下怎么用 node 编写钩子的脚本 以 pre-commit 钩子为例&#xff0c;会在用…...

RISC-V架构新生态:鸿道Intewell操作系统×全志D1芯片

在全球化技术博弈与自主可控需求的双重驱动下&#xff0c;RISC-V架构正从开源革命走向产业落地。然而&#xff0c;RISC-V生态的成熟不仅需要硬件层面的突破&#xff0c;更需操作系统与芯片的深度协同。鸿道Intewell操作系统与全志D1&#xff08;RISC-V架构&#xff09;芯片的适…...

盈达科技:重新定义GEO优化的技术边界与商业未来​

​ ​​——以硬核技术领跑生成式AI时代的认知主权争夺战​​ ​​01 技术架构&#xff1a;AICC 2.0智能协同中心​​ ​​生成式AI优化的「核动力引擎」​​ 盈达科技独创的​​AICC 2.0&#xff08;自适应-智能-认知-动态响应&#xff09;智能协同中心​​&#xff0c;构建…...

芯片测试工具系统Demo示例

芯片测试工具系统Demo示例 一个简单的芯片测试工具系统Demo示例&#xff0c;包含基础功能和模拟测试流程&#xff0c;使用Python实现&#xff1a; python import time import random import csv from datetime import datetime class VirtualChip: """模…...

从单模态到多模态:五大模型架构演进与技术介绍

前言 1. ResNet — 残差神经网络背景核心问题与解决方案原理模型架构ResNet 系列变体技术创新与影响 2. ViT — Vision Transformer背景核心思想发展历程Transformer的起源&#xff1a;ViT的出现&#xff1a;ViT的进一步发展&#xff1a; 模型架构技术创新与影响 3. Swin Trans…...

基于 Java 的淘宝 API 调用实践:商品详情页 JSON 数据结构解析与重构

一、引言 在电商领域&#xff0c;淘宝拥有海量的商品数据。通过调用淘宝 API 可以获取商品详情页的 JSON 数据&#xff0c;这对于商家进行市场分析、竞品调研等具有重要意义。本文将详细介绍如何使用 Java 调用淘宝 API&#xff0c;获取商品详情页的 JSON 数据&#xff0c;并对…...

Sentinel源码—3.ProcessorSlot的执行过程二

大纲 1.NodeSelectorSlot构建资源调用树 2.LogSlot和StatisticSlot采集资源的数据 3.Sentinel监听器模式的规则对象与规则管理 4.AuthoritySlot控制黑白名单权限 5.SystemSlot根据系统保护规则进行流控 3.Sentinel监听器模式的规则对象与规则管理 (1)Sentinel的规则对象 …...

【C++11】列表初始化、右值引用、完美转发、lambda表达式

&#x1f4da; 博主的专栏 &#x1f427; Linux | &#x1f5a5;️ C | &#x1f4ca; 数据结构 | &#x1f4a1;C 算法 | &#x1f310; C 语言 上篇文章&#xff1a;unordered_map、unordered_set底层编写 下篇文章&#xff1a;C11&#xff1a;新的类功能、模板的可…...

Spring中IOC的重点理解(笔记)

Spring: 出现在2002左右.解决企业级开发的难度.减轻对项目模块 类与类之间的管理帮助开发人员创建对象,管理对象之间的关系. 补充&#xff1a;什么是OCP原则&#xff1f;&#xff08;面试&#xff09; &#xff08;1&#xff09;是软件七大开发当中最基本的一个原则&#xff…...

数据库系统概论|第三章:关系数据库标准语言SQL—课程笔记4

前言 前面详细介绍了关于SELECT语句的相关使用方法&#xff0c;继续上文的介绍&#xff0c;本文将继续介绍数据查询的其他相关操作&#xff0c;主要包括排序&#xff08;ORDER BY&#xff09;子句、分组&#xff08;GROUP BY&#xff09;子句。与此同时&#xff0c;介绍完单表…...

【1】CICD持续集成-docker本地搭建gitlab代码仓库社区版

‌一、gitlab社区版概述 GitLab社区版&#xff08;Community Edition, CE&#xff09;是一个开源的版本控制系统&#xff0c;适用于个人开发者、中小团队及大型企业。‌ GitLab社区版采用MIT许可证&#xff0c;用户可以免费使用和修改源代码。其主要功能包括代码托管、版本控制…...

Verdi工具使用心得知识笔记(一)

Verdi工具使用知识点提炼 本文来源于移知&#xff0c;具体文档请咨询厚台 一、基础概念 波形依赖 Verdi本身无法生成波形&#xff0c;需配合VCS等仿真工具生成.fsdb文件。核心功能模块 • nTrace&#xff1a;代码调试与追踪 • nSchema&#xff1a;原理图分析 • nState&…...

【25软考网工笔记】第二章 数据通信基础(4)数据编码

目录 一、曼彻斯特编码 1. 以太网 2. 题型(考试过的选择题) 1&#xff09;题目解析 二、差分曼彻斯特编码 三、两种曼彻斯特编码特点 ​编辑 1. 双相码 2. 将时钟和数据包含在信号数据流中 3. 编码效率低 4. 数据速率是码元速率的一半 5. 应用案例 ​编辑 1&…...

【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——USB OTG测试

1&#xff09;实验平台&#xff1a;正点原子ATK-DLMP257B开发板 2&#xff09;浏览产品&#xff1a;https://www.alientek.com/Product_Details/135.html 3&#xff09;全套实验源码手册视频下载&#xff1a;正点原子资料下载中心 第四章 ATK-DLMP257B功能测试——USB OTG测试…...

现代c++获取linux系统磁盘大小

现代c获取linux系统磁盘大小 前言一、命令获取系统磁盘大小二、使用c获取系统磁盘大小三、总结 前言 本文介绍一种使用c获取linux系统磁盘大小的方法 一、命令获取系统磁盘大小 在linux系统中可以使用lsblk命令显示当前系统磁盘大小&#xff0c;如下图所示 lsblk二、使用c获…...

tcp和udp的数据传输过程以及区别

tcp和udp的数据传输过程以及区别 目录 一、数据传输过程 1.1 UDP 数据报服务图 1.2 TCP 字节流服务图 1.3 tcp和udp的区别 1.3.1 连接特性 1.3.2 可靠性 1.3.3 数据传输形式 1.3.4 传输效率与开销 应用场景 一、数据传输过程 1.1 UDP 数据报服务图 这张图展示了 UDP 数据报服务…...

C++项目-衡码云判项目演示

衡码云判项目是什么呢&#xff1f;简单来说就是这是一个类似于牛客、力扣等在线OJ系统&#xff0c;用户在网页编写代码&#xff0c;点击提交后传递给后端云服务器&#xff0c;云服务器将用户的代码和测试用例进行合并编译&#xff0c;返回结果到网页。 项目最大的两个亮点&…...

C 语言中的 volatile 关键字

1、概念 volatile 是 C/C 语言中的一个类型修饰符&#xff0c;用于告知编译器&#xff1a;该变量的值可能会在程序控制流之外被意外修改&#xff08;如硬件寄存器、多线程共享变量或信号处理函数等&#xff09;&#xff0c;因此编译器不应对其进行激进的优化&#xff08;如缓存…...

mysql表类型查询

普通表 SELECT table_schema AS database_name,table_name FROM information_schema.tables WHERE table_schema NOT IN (information_schema, mysql, performance_schema, sys)AND table_type BASE TABLEAND table_name NOT IN (SELECT DISTINCT table_name FROM informatio…...

JavaScript事件循环

目录 JavaScript 执行机制与事件循环 一、同步与异步代码 1. 同步代码&#xff08;Synchronous Code&#xff09; 2. 异步代码&#xff08;Asynchronous Code&#xff09; 二、事件循环&#xff08;Event Loop&#xff09; 1. 核心组成 2. 事件循环基本流程 3. 运行机制…...

Linux》》bash 、sh 执行脚本

通常使用shell去运行脚本&#xff0c;两种方法 》bash xxx.sh 或 bash “xxx.sh” 、sh xxx.sh 或 sh “xxx.sh” 》bash -c “cmd string” 引号不能省略 我们知道 -c 的意思是 command&#xff0c;所以 bash -c 或 sh -c 后面应该跟一个 command。...

Git完全指南:从入门到精通版本控制 ------- Git 查看提交历史(8)

Git提交历史深度解析&#xff1a;从代码考古到精准回退 前言 在软件开发的生命周期中&#xff0c;提交历史是团队协作的时空胶囊。Git作为分布式版本控制系统&#xff0c;其强大的历史追溯能力可帮助开发者&#xff1a; 精准定位引入Bug的提交分析代码演进趋势恢复误删的重要…...

精益数据分析(2/126):解锁数据驱动的商业成功密码

精益数据分析&#xff08;2/126&#xff09;&#xff1a;解锁数据驱动的商业成功密码 大家好&#xff01;在如今这个数据爆炸的时代&#xff0c;数据就像一座蕴含无限宝藏的矿山&#xff0c;等待着我们去挖掘和利用。最近我在深入研读《精益数据分析》这本书&#xff0c;收获了…...

【ssti模板注入基础】

一、ssti模板注入简介 二、模板在开发中的应用 为什么要使用模板 为什么要用模板来提升效率&#xff1a; 不管我们输入什么&#xff0c;有一部分内容都是不会变的 除了内容之外其他都不会变&#xff0c;如果我们有成千上万的页面&#xff0c;如果不用模板&#xff0c;就算复…...

如何在 Kali 上解决使用 evil-winrm 时 Ruby Reline 的 quoting_detection_proc 警告

在使用 Kali Linux 运行 Ruby 工具&#xff08;例如 evil-winrm&#xff09;时&#xff0c;你可能会遇到以下警告&#xff1a; Warning: Remote path completions is disabled due to ruby limitation: undefined method quoting_detection_proc for module Reline这个警告会导…...

从零开始搭建PyTorch环境(支持CUDA)

从零开始搭建PyTorch环境&#xff08;支持CUDA&#xff09; 本文将详细介绍如何在Windows系统上为RTX 3050显卡配置支持CUDA的PyTorch环境。 环境准备 本教程基于以下环境&#xff1a; 显卡&#xff1a;NVIDIA RTX 3050操作系统&#xff1a;WindowsPython版本&#xff1a;3.1…...

【扩散模型连载 · 第 2 期】逆向扩散建模与神经网络的角色

上期回顾 我们在第 1 期中介绍了 正向扩散过程&#xff08;Forward Process&#xff09;&#xff0c;并用 CIFAR-10 图像演示了加噪过程&#xff1a; 正向过程是固定的&#xff0c;无需训练&#xff0c;但我们感兴趣的是&#xff1a;如何从纯噪声一步步“还原”出真实图像&…...

Mysql约束

约束其实就是创建表的时候给表的某些列加上限制条件。 主键约束和自增长约束比较重要 一、Mysql约束-主键约束 简介 指定的主键不能重复也不可以出现空值 1.添加单列主键 语法1&#xff1a;create table 表名&#xff08;字段名 数据类型 primary key&#xff09;; 点开…...

力扣热题100—滑动窗口(c++)

3.无重复字符的最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 unordered_set<char> charSet; // 用于保存当前窗口的字符int left 0; // 窗口左指针int maxLength 0; // 最长子串的长度for (int right 0; right < s.siz…...

Linux网络编程第一课:深入浅出TCP/IP协议簇与网络寻址系统

知识点1【网络发展简史】 **网络节点&#xff1a;**路由器和交换机组成 交换机的作用&#xff1a;拓展网络接口 路由&#xff1a;网络通信路径 1、分组交换 分组的目的&#xff1a; 数据量大&#xff0c;不能一次型传输&#xff0c;只能分批次传输&#xff0c;这里的每一批…...

论文阅读笔记:Generative Modeling by Estimating Gradients of the Data Distribution

1、参考来源 论文《Generative Modeling by Estimating Gradients of the Data Distribution》 来源&#xff1a;NeurIPS 2019 论文链接&#xff1a;https://arxiv.org/abs/1907.05600 参考链接&#xff1a; 【AI知识分享】真正搞懂扩散模型Score Matching一定要理解的三大核心…...

C++零基础实践教程 函数 数组、字符串与 Vector

模块四&#xff1a;函数 (代码复用与模块化) 随着程序变得越来越复杂&#xff0c;把所有代码都堆在 main 函数里会变得难以管理和阅读。函数 (Function) 允许你将代码分解成逻辑上独立、可重用的块。这就像把一个大任务分解成几个小任务&#xff0c;每个小任务交给一个专门的“…...

照片处理工具:基于HTML与JavaScript实现详解

在当今数字时代,处理照片已成为日常需求。 本文将详细介绍一个基于HTML和JavaScript的照片处理工具的实现原理,这个工具可以调整图片尺寸、格式,并精确控制输出文件大小。 实现如下,不需要任何编辑器,txt文本、浏览器就行!! 工具功能概述 这个照片处理工具提供以下核心…...

MyBatis-OGNL表达式

介绍 OGNL&#xff08;Object-Graph Navigation Language&#xff09;是一种强大的表达式语言&#xff0c;用于获取和设置Java对象图中的属性。在MyBatis中&#xff0c;OGNL常用于动态SQL构建&#xff0c;如条件判断、循环等。以下是关于OGNL表达式的整合信息&#xff0c;包括…...

Web Worker在uniapp鸿蒙APP中的深度应用

文章目录 一、Web Worker核心概念解析1.1 什么是Web Worker&#xff1f;1.2 为什么在鸿蒙APP中使用Web Worker&#xff1f;1.3 性能对比实测 二、uniapp中的Web Worker完整实现2.1 基础配置步骤2.1.1 项目结构准备2.1.2 鸿蒙平台特殊配置 2.2 Worker脚本编写规范2.3 主线程通信…...

无人机故障冗余设计技术要点与难点!

一、技术要点 1. 冗余架构设计 硬件冗余&#xff1a;关键部件&#xff08;飞控、电机、电池、通信模块&#xff09;采用双余度或三余度设计&#xff0c;例如&#xff1a; 双飞控系统&#xff1a;主飞控失效时&#xff0c;备用飞控无缝接管。 电机动力冗余&#xff1a;六轴无…...

MySQL数据库表查询

测试表company.employee5 mysql> create database company; #创建一个库&#xff1b; 创建一个测试表: mysql> CREATE TABLE company.employee5(id int primary key auto_increment not null,name varchar(30) not null,sex enum(male,female) default male not null,hi…...

ADB的安装及抓取日志(2)

三、ADB抓取日志 在使用ADB抓取日志前&#xff0c;首先要保证电脑已经安装并配置ADB&#xff0c;在上一节已经验证完成。连接设备&#xff1a;可通过USB或者WI-FI&#xff0c;将安卓设备与电脑连接&#xff0c;并启用USB调试模式&#xff0c;此处我选择的是通过电脑与安卓设备…...

【C++】 —— 笔试刷题day_17

一、小乐乐改数字 题目解析 这道题&#xff0c;它们给定一个数&#xff0c;我们要对它进行修改&#xff1b;如果某一位是奇数&#xff0c;就把它变成1,&#xff1b;如果是偶数&#xff0c;就把它变成0&#xff1b; 让我们输出最后得到的数。 算法思路 这道题&#xff0c;总体…...

traceId传递

1、应用内传递通过ThreadLocal,InheritableThreadLocal传递 2、跨进程的应用间传递&#xff0c;这种会涉及到远程rpc通信&#xff0c;mq通信&#xff0c;数据库通信等。 feign:拦截器中改变请求头 feign.RequestInterceptor, 这个机制能够实现修改请求对象的目的&#xff0c…...

自然科技部分详解

光的反射 凸面镜与凹面镜 凸透镜和凹透镜 空气开关原理 短路是指电路中突然的电流过大&#xff0c;这会让线圈的磁性增大&#xff0c;来克服内设的弹簧导致断开 过载会让电流增大&#xff0c;两金属片受热膨胀触发断开 核电荷数是指原子核所带的电荷数。 在原子中&#xf…...

蓝桥杯 9. 九宫幻方

九宫幻方 原题目链接 题目描述 小明最近在教邻居家的小朋友小学奥数&#xff0c;而最近正好讲述到了三阶幻方这个部分。 三阶幻方是指将 1 ~ 9 不重复地填入一个 33 的矩阵中&#xff0c;使得每一行、每一列和每一条对角线的和都是相同的。 三阶幻方又被称作九宫格&#x…...

算法——希尔排序

目录 一、希尔排序定义 二、希尔排序原理 三、希尔排序特点 四、两种解法 五、代码实现 一、希尔排序定义 希尔排序是一种基于插入排序的排序算法&#xff0c;也被称为缩小增量排序。它通过将待排序的数组分割成若干个子序列&#xff0c;对子序列进行排序&#xff0c;然后…...

亚马逊热销变维权?5步搭建跨境产品的安全防火墙

“产品热卖&#xff0c;引来维权”——这已经悄然成为越来越多跨境卖家的“热销烦恼”。曾经拼品拼量&#xff0c;如今却要步步谨慎。商标侵权、专利投诉、图片盗用……这些问题一旦发生&#xff0c;轻则下架、账号被限&#xff0c;重则冻结资金甚至封店。 别让“热销”变“受…...

20250416-Python 中常见的填充 `pad` 方法

Python 中常见的填充 pad 方法 在 Python 中&#xff0c;pad 方法通常与字符串或数组操作相关&#xff0c;用于在数据的前后填充特定的值&#xff0c;以达到指定的长度或格式。以下是几种常见的与 pad 相关的用法&#xff1a; 1. 字符串的 pad 操作 虽然 Python 的字符串没有…...

JavaEE-0416

今天修复了一个查询数据时数据显示哈希码&#xff1a; 搜索检阅后得到显示该格式的原因&#xff1a; 重写 POJO 类的 toString 方法 在 Java 编程中&#xff0c;默认情况下&#xff0c;对象的 toString() 方法会返回类似于 com.cz.pojo.Score2a266d09 的字符串。这是由于默认…...

团体程序设计天梯赛L2-008 最长对称子串

对给定的字符串&#xff0c;本题要求你输出最长对称子串的长度。例如&#xff0c;给定Is PAT&TAP symmetric?&#xff0c;最长对称子串为s PAT&TAP s&#xff0c;于是你应该输出11。 输入格式&#xff1a; 输入在一行中给出长度不超过1000的非空字符串。 输出格式&…...

命令模式 (Command Pattern)

命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。该模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。 一、基础 1.1 意图 将请求封…...

Elasticsearch 8.18 中提供了原生连接 (Native Joins)

作者&#xff1a;来自 Elastic Costin Leau 探索 LOOKUP JOIN&#xff0c;这是一条在 Elasticsearch 8.18 的技术预览中提供的新 ES|QL 命令。 很高兴宣布 LOOKUP JOIN —— 这是一条在 Elasticsearch 8.18 的技术预览中提供的新 ES|QL 命令&#xff0c;旨在执行左 joins 以进行…...