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

如何用Redis实现分布式锁?RedLock算法的核心思想?Redisson的看门狗机制原理?

一、Redis分布式锁基础实现

public class RedisDistributedLock {private JedisPool jedisPool;private String lockKey;private String clientId;private int expireTime = 30; // 默认30秒public boolean tryLock() {try (Jedis jedis = jedisPool.getResource()) {// NX表示不存在时设置,PX设置过期时间(毫秒)String result = jedis.set(lockKey, clientId, SetParams.setParams().nx().px(expireTime * 1000));return "OK".equals(result);}}public void unlock() {try (Jedis jedis = jedisPool.getResource()) {// 使用Lua脚本保证原子性String script = "if redis.call('get', KEYS[1]) == ARGV[1] then " +"   return redis.call('del', KEYS[1]) " +"else " +"   return 0 " +"end";jedis.eval(script, Collections.singletonList(lockKey), Collections.singletonList(clientId));}}
}

关键点:

  1. 使用SET NX PX命令保证原子性
  • 单命令原子性:Redis服务器单线程顺序执行命令
  • 仅包含SET操作:仅完成键值设置和过期时间配置
  • 无逻辑判断:仅判断键是否存在(NX特性)
  1. 客户端唯一标识(clientId)防止误删
  2. Lua脚本保证解锁操作的原子性
  • 多命令原子性:组合GET、DEL等命令的复合操作
  • 包含业务逻辑:实现"比较后删除"的CAS(Compare And Set)操作
  • 支持复杂流程:可包含条件判断、循环等逻辑

缺陷:
如果锁存在A redis节点,然后B是A的从库,服务先获取A节点的redis key锁,如果A网络波动的时候的时候,主从切换,B节点升级为主节点,这个时候另一个服务获取B节点的相同的redis key,这种情况就发生脑裂了。

二、RedLock算法核心思想

RedLock算法由Redis作者提出,主要解决单点故障问题:

  1. 多节点部署:使用5个(奇数)独立的Redis节点
  2. 顺序获取:客户端依次向所有节点申请锁
  3. 成功条件:获得超过半数的锁(3个)
  4. 耗时计算:总耗时应小于锁的TTL时间
  5. 失败释放:失败时需要释放所有已获得的锁

三、Redisson看门狗机制原理

public class RedissonWatchdogExample {public static void main(String[] args) {Config config = new Config();config.useSingleServer().setAddress("redis://127.0.0.1:6379");RedissonClient redisson = Redisson.create(config);RLock lock = redisson.getLock("myLock");try {// 默认30秒过期,看门狗自动续期lock.lock();// 业务逻辑执行时间可能超过30秒Thread.sleep(40000); } finally {lock.unlock();}}
}

集群防止脑裂

Redisson 实现分布式锁的核心机制和集群脑裂防护原理如下:

1. 基础锁实现原理
-- Redis 原子操作脚本
if redis.call('exists', KEYS[1]) == 0 thenredis.call('hset', KEYS[1], ARGV[2], 1)redis.call('pexpire', KEYS[1], ARGV[1])return nil
end
2. 集群模式防护机制
// RedissonMultiLock 集群锁实现
List<RLock> locks = new ArrayList<>();
locks.add(redissonClient1.getLock("lock1"));
locks.add(redissonClient2.getLock("lock2"));
RLock multiLock = new RedissonMultiLock(locks.toArray(new RLock[0]));

关键实现要点:

1. 多节点提交机制
  • 需要 N/2+1 个节点成功获取锁才算有效
  • 使用异步线程维持锁心跳(Watchdog 机制)
// Watchdog 线程实现(伪代码)
private void scheduleExpirationRenewal() {if (expirationRenewalMap.putIfAbsent(lockName, newTimeout) == null) {// 每 10 秒续期一次internalLockLeaseTime / 3 周期执行}
}
2. 脑裂防护策略
  • 同步延迟控制:主从同步超时时间 > 锁过期时间
  • 多数派原则:成功获取锁的节点数 > 集群半数节点
  • 故障转移阻断:当节点失联时自动启动锁失效倒计时
3. 异常处理机制
// 锁释放时的集群同步
public void unlock() {for (RLock lock : locks) {if (lock.isHeldByCurrentThread()) {lock.unlockAsync();}}
}

集群模式下重要参数配置建议:

# redisson.yaml
clusterServersConfig:nodeAddresses:- "redis://127.0.0.1:7000"- "redis://127.0.0.1:7001"scanInterval: 1000retryAttempts: 3retryInterval: 500slaveConnectionMinimumIdleSize: 8failedSlaveReconnectionInterval: 30000

该实现通过以下方式保证脑裂场景下的数据一致性:

  1. 使用 Raft 式多数派提交协议
  2. 网络分区时自动降级为只读模式
  3. 主节点切换后新主节点会等待旧主节点锁超时
  4. 客户端自动检测集群拓扑变化并重建连接
    看门狗机制关键点:
  5. 后台线程:每10秒检查锁状态
  6. 自动续期:当业务未完成时,将过期时间重置为30秒
  7. 客户端存活判断:只有客户端保持活跃才会续期
  8. 默认配置:lockWatchdogTimeout=30秒

四、完整方案对比

方案优点缺点
基础Redis锁实现简单单点故障风险
RedLock算法高可用性实现复杂、性能损耗
Redisson实现自动续期、可重入锁、多种锁类型需要维护客户端连接

实际建议:

  1. 单节点场景使用Redisson基础锁
  2. 高可用场景使用Redisson+Redis Cluster
  3. 极端可靠性需求使用RedLock算法

生产环境注意事项:

  1. 合理设置超时时间(业务平均耗时 * 2)
  2. 监控锁等待时间和获取次数
  3. 为不同业务使用不同的锁前缀
  4. 做好锁等待超时的异常处理

竞品分析

分布式锁实现方案对比及优劣势分析

一、ZooKeeper 实现方案
// 使用Curator框架示例
public class ZkDistributedLock {private CuratorFramework client;private InterProcessMutex lock;public boolean tryLock(String lockPath) throws Exception {lock = new InterProcessMutex(client, lockPath);return lock.acquire(3, TimeUnit.SECONDS); // 3秒获取超时}public void unlock() throws Exception {if (lock != null) {lock.release();}}
}

核心原理
通过创建临时顺序节点实现,获取锁的客户端会生成有序节点,只有序号最小的节点持有锁

优势

  1. 自动释放(会话失效时自动删除节点)
  2. 公平锁机制(顺序节点)
  3. 强一致性保证

劣势

  1. 写操作性能低于Redis
  2. 需要维护ZooKeeper集群
  3. 客户端实现相对复杂

二、Etcd 实现方案
// 使用jetcd客户端示例
public class EtcdDistributedLock {private Client client;private Lease lease;public boolean tryLock(String lockKey) throws Exception {lease = client.getLeaseClient().grant(30).get(); // 30秒租约Txn txn = client.getKVClient().txn();txn.If(new Cmp(lockKey, Cmp.Op.EQUAL, CmpTarget.version(0))).Then(Op.put(lockKey, "locked", PutOption.newBuilder().withLeaseId(lease.getID()).build())).Else(Op.get(lockKey));return txn.commit().get().isSucceeded();}
}

核心原理
基于租约(Lease)机制,利用事务操作实现原子性锁获取

优势

  1. 强一致性(Raft协议)
  2. 自动续期机制
  3. 支持公平锁/非公平锁

劣势

  1. 运维复杂度较高
  2. 客户端生态不如Redis完善
  3. 性能低于Redis

三、数据库实现方案
// 基于MySQL的乐观锁实现
public class DbDistributedLock {@Transactionalpublic boolean tryLock(String lockName) {// 使用唯一索引约束int result = jdbcTemplate.update("INSERT INTO distributed_lock(lock_name,owner) VALUES (?,?) ON DUPLICATE KEY UPDATE owner=IF(expire_time < NOW(), VALUES(owner), owner)",lockName, UUID.randomUUID().toString());return result > 0;}
}

核心原理
基于数据库唯一约束或排他锁(SELECT FOR UPDATE)

优势

  1. 无需额外中间件
  2. 实现简单快速

劣势

  1. 性能差(高并发场景容易成为瓶颈)
  2. 无自动释放机制
  3. 死锁风险较高

方案对比总结表

方案一致性性能自动释放实现复杂度适用场景
Redis最终一致支持简单高并发、允许短暂不一致
ZooKeeper强一致支持复杂强一致性要求、公平锁场景
Etcd强一致支持较复杂强一致性且需要自动续期
数据库强一致不支持简单低频访问、无中间件环境的应急方案

选型建议

  1. 追求性能 ➜ Redis(Redisson实现)
  2. 强一致性要求 ➜ ZooKeeper/Etcd
  3. 无中间件环境 ➜ 数据库方案(需谨慎处理超时)
  4. 混合使用场景 ➜ 可组合使用(如Redis做主锁,数据库做备用锁)

相关文章:

如何用Redis实现分布式锁?RedLock算法的核心思想?Redisson的看门狗机制原理?

一、Redis分布式锁基础实现 public class RedisDistributedLock {private JedisPool jedisPool;private String lockKey;private String clientId;private int expireTime 30; // 默认30秒public boolean tryLock() {try (Jedis jedis jedisPool.getResource()) {// NX表示不…...

LeetCode 热题 100 35.搜索插入位置

目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; 核心思路&#xff1a; 思路详解&#xff1a; 代码&#xff1a; Java代码&#xff1a; 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 35. 搜索插入位置 - 力扣&…...

电流检测放大器的优质选择XBLW-INA180/INA181

前言&#xff1a; 在当前复杂的国际贸易环境下&#xff0c;关税的增加使得电子元器件的采购成本不断攀升&#xff0c;电子制造企业面临着巨大的成本压力。为了有效应对这一挑战&#xff0c;实现国产化替代已成为众多企业降低生产成本、保障供应链稳定的关键战略。对此芯伯乐推出…...

序列化和反序列化:从理论到实践的全方位指南

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…...

Leetcode (力扣)做题记录 hot100(62,64,287,108)

力扣第62题&#xff1a;不同路径 62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int uniquePaths(int m, int n) {int[][] array new int[m][n];for(int i 0;i<n;i){array[0][i] 1;}for(int i 0;i<m;i){array[i][0] 1;}for(int i …...

【Linux】shell内置命令fg,bg和jobs

​Shell 内置命令​​ fg&#xff08;foreground 的缩写&#xff09;。它用于将​​后台挂起的任务恢复到前台运行​​。 例如&#xff1a; 假设你运行了一个耗时的 SVN 操作&#xff08;如 svn update 或 svn checkout&#xff09;。按下 CtrlZ 将该进程挂起到后台。输入 fg…...

鸿蒙OSUniApp 制作动态加载的瀑布流布局#三方框架 #Uniapp

使用 UniApp 制作动态加载的瀑布流布局 前言 最近在开发一个小程序项目时&#xff0c;遇到了需要实现瀑布流布局的需求。众所周知&#xff0c;瀑布流布局在展示不规则尺寸内容&#xff08;如图片、商品卡片等&#xff09;时非常美观和实用。但在实际开发过程中&#xff0c;我…...

通用软件项目技术报告 - 导读II

现在,我们正式进入报告的第三个主要领域:3. 领域三:核心业务逻辑与算法实现。 连接: 我们已经讨论了如何存储数据(领域一)和如何设计 API 让外部或内部服务可以访问这些数据或触发操作(领域二)。现在,我们将深入应用程序的“心脏”——实际执行业务规则、进行计算和(…...

新能源汽车三电质量护盾:蓝光三维扫描技术显身手

在绿色低碳的潮流下&#xff0c;新能源汽车行业快速发展&#xff0c;车企们纷纷加速电气化转型。由于电动汽车动力系统构造与内燃机车辆的构造有很大不同&#xff0c;制造商及其供应商必须加快工程研发设计及生产&#xff0c;而这对质量保证过程提出了新的挑战。 对于新能源汽…...

针对已训练好的YOLOv8模型的优化策略

以下是针对已训练好的YOLOv8模型的优化策略&#xff0c;结合模型微调、结构改进、训练策略调整等方法&#xff0c;可进一步提升检测性能或适应特定场景需求&#xff1a; 一、超参数调优 学习率动态调整 初始学习率&#xff08;lr0&#xff09;&#xff1a;若模型收敛后仍有优化…...

AI 产业化浪潮:从生成智能到星载计算,中国如何重塑全球竞争格局

2025 年的科技版图上&#xff0c;人工智能正经历着从技术奇点到产业爆点的历史性跨越。当生成式 AI 突破实验室围墙走进千行百业&#xff0c;当智能体开始在数字世界自主决策&#xff0c;当卫星搭载的大模型在太空展开计算&#xff0c;一场由技术创新驱动的产业革命正在重塑全球…...

Python如何解决中文乱码

Python文件头部声明 # -*- coding: utf-8 -*- # 必须放在文件第一行或第二行中文字符串定义方式 # Python 3 chinese_str "中文" # 默认就是Unicode# Python 2 chinese_str u"中文" # 必须加u前缀字符串编码转换黄金法则 # 解码&#xff1a;字节串 …...

android studio导入项目

如果 gradle-8.0-bin.zip 没有下载成功 可以点击进入这个网站&#xff1a;https://services.gradle.org/distributions/ 找到和自己本版相同的gradle-8.0-bin.zip文件找到自己版本进行下载; 如果下载依赖失败, 可以手动下载依赖编译过程中的jar https://repo.maven.apache.org/…...

Android Studio Meerkat与Gradle构建工具升级实战指南

简介 Android Studio Meerkat和Gradle构建工具的升级将带来显著的性能提升和开发体验优化。在Android生态快速演进的2025年,开发者亟需掌握这些新特性以提升工作效率。本指南将从零开始,详细讲解如何升级Android Studio和Gradle构建工具,配置新特性,并提供实际应用场景的代…...

TCP/IP参考模型详解:从理论架构到实战应用

一、参考模型基础概念与分类 计算机网络参考模型是为解决网络通信标准化问题而设计的逻辑框架。在众多模型中&#xff0c;TCP/IP参考模型以其高实用性和广泛应用&#xff0c;成为现代网络架构的基石。该模型采用分层设计思想&#xff0c;将复杂的网络通信功能划分为多个层次&am…...

【Linux网络】网络层

网络层 在复杂的网络环境中确定一个合适的路径 IP 协议 IPV4 点分十进制[0,255].[0,255].[0,255].[0,255]IPV6 IP地址目标网格目标主机 基本概念 主机:配有IP地址,但是不进行路由控制的设备;路由器:即配有IP地址,又能进行路由控制;节点:主机和路由器的统称。 两个问题 路…...

FastAPI + OpenAI 模型 的 GitHub 项目结构模板

FastAPI OpenAI 模型 的 GitHub 项目结构模板&#xff0c;适合用作大模型&#xff08;如 GPT-4&#xff09; API 服务的基础框架。该模板包括了基本的项目结构、配置、文档以及与 OpenAI API 的交互方式。 项目结构 fastapi-openai-api/ ├── app/ │ ├── __init__.p…...

基于EFISH-SCB-RK3576/SAIL-RK3576的无人快递柜控制器技术方案

国产化替代J1900的智能化升级方案 一、硬件架构设计‌ ‌多模态感知模块‌ ‌智能识别单元‌&#xff1a; ‌双MIPI-CSI接口‌接入4K摄像头&#xff0c;NPU加速包裹条码识别&#xff08;速度>5件/秒&#xff0c;准确率>99.99%&#xff09;&#xff0c;支持破损检测&…...

Centos 上安装Klish(clish)的编译和测试总结

1&#xff0c;介绍 clish是一个类思科命令行补全与执行程序&#xff0c;它可以帮助程序员在nix操作系统上实现功能导引、命令补全、命令执行的程序。支持&#xff1f;&#xff0c;help, Tab按键。本文基于klish-2.2.0介绍编译和测试。 2&#xff0c;klish的编译 需要安装的库&…...

Android学习总结之Glide自定义三级缓存(面试篇)

一、三级缓存核心原理与设计 问题 1&#xff1a;为什么需要三级缓存&#xff1f;各层缓存的核心作用是什么&#xff1f; 回答核心 内存缓存&#xff1a;毫秒级快速响应&#xff0c;存储近期浏览的图片&#xff08;如滑动列表来回切换的图片&#xff09;&#xff0c;通过 LRU…...

管理Oracle Data Guard的最佳实践

Oracle Data Guard的中文名字叫数据卫士&#xff0c;顾名思义&#xff0c;它是生产库的一道保障。所以管理Data Guard是DBA的一项重要工作之一&#xff0c;管理Data Guard时主要有以下几个注意点需要引起重视。 备份库的归档日志积压 一般情况下&#xff0c;生产库的归档日志是…...

iOS WebView和WKWebView怎么调试?

iOS WebView调试 本教程将指导您如何使用WebDebugX调试iOS应用中的WebView内容&#xff0c;包括WKWebView和UIWebView。通过本教程&#xff0c;您将学习如何检查WebView中的HTML、CSS和JavaScript&#xff0c;以及如何解决常见的WebView调试问题。 准备工作 在开始调试iOS W…...

笔记本电脑打开网页很慢,一查ip地址网段不对怎么处理

我有一个笔记本&#xff0c;在家里连WIFI后获取到的ip地址网段不对&#xff0c;那么常规做法是手动去配置个静态IP和DNS&#xff0c;要知道笔记本IP地址默认采用的是DHCP&#xff0c;也就是动态获取ip地址。如果手动设置静态IP&#xff0c;也就是固定IP的话&#xff0c;你换个场…...

【更新】全国省市县-公开手机基站数据集(2006-2025.3)

手机基站是现代通信网络中的重要组成部分&#xff0c;它们为广泛的通信服务提供基础设施。随着数字化进程的不断推进&#xff0c;手机基站的建设与布局对优化网络质量和提升通信服务水平起着至关重要的作用&#xff0c;本分享数据可帮助分析移动通信网络的发展和优化。本次数据…...

iOS视频编码详细步骤(视频编码器,基于 VideoToolbox,支持硬件编码 H264/H265)

iOS视频编码详细步骤流程 1. 视频采集阶段 视频采集所使用的代码和之前的相同&#xff0c;所以不再过多进行赘述 初始化配置&#xff1a; 通过VideoCaptureConfig设置分辨率1920x1080、帧率30fps、像素格式kCVPixelFormatType_420YpCbCr8BiPlanarFullRange设置摄像头位置&am…...

行项目违反范围截止值

把允许负值打钩就可以&#xff0c;如果没有此字段&#xff0c;按照下面截图把屏幕格式放字段出来&#xff1b;字段放出来以后如果是灰色的话&#xff0c;就用SE16N调试模式修改字段值&#xff1b;...

Linux wlan 单频段 dual wifi创建

环境基础 TP LINK WN722N V1网卡linux 主机 查看设备是否支持双ap managed&#xff1a;客户端模式&#xff08;连接路由器/AP&#xff09;AP&#xff1a;接入点模式&#xff08;创建热点&#xff09;AP/VLAN&#xff1a;支持带VLAN标签的虚拟AP{ AP, mesh point, P2P-GO } &l…...

STC32G12K12实战:串口通信

STC32G12K128芯片写一个按键通过串口1发送字符串的程序。首先&#xff0c;确认芯片的串口1配置。STC32G系列通常使用UART1&#xff0c;相关的寄存器是P_SW1来选择引脚。默认情况下&#xff0c;UART1的TX是P3.1。 接下来是设置定时器作为波特率发生器。通常用定时器2&#xff0c…...

unity 鼠标更换指定图标

1.准备两张图 要求图片导入设置如下 将 Texture Type 改为 Cursor 确保 Read/Write Enabled 已勾选 取消勾选 Generate Mip Maps 将 Filter Mode 设为 Point (保持清晰边缘) 将 Compression 设为 None (无压缩) 2.创建脚本&#xff0c;把脚本挂到场景中 &#xff0c;该…...

会话管理中的cookie,以及浏览器操作cookie,在express中设置,删除,和获取cookie

会话管理中的 Cookie以及在浏览器和 Express 中操作 Cookie&#xff1a; &#x1f36a; 一、Cookie 在会话管理中的作用 ✅ Cookie 的定义&#xff1a; Cookie 是服务器发送到浏览器并保存在本地的小段文本数据&#xff0c;浏览器会在之后的请求中将这些数据回传给服务器。 …...

Mac的web服务器

最近用了个人觉得比较好用的集成环境。Flyenv - FlyEnv | 一体化全栈环境管理工具. 支持macOS / Windows / Linux 链接放在这了。 mac上安装&#xff1a; brew install flyenv 等着安装成功就好了 给个图。ollama也有...

数据可视化大屏——南方草牧商品交易所

代码综述 整体结构与用途 这是一段用于构建网页的 HTML 代码&#xff0c;结合引入的 JavaScript 和 CSS 文件&#xff0c;初步推测该网页是南方草牧商品交易所的相关页面&#xff0c;主要展示了与草牧商品交易相关的各类数据&#xff0c;包括产品挂牌数、成交量、会员信息等&…...

AIGC与数字媒体实验室解决方案分享

第1部分 概述 1.1 建设目标 1.深度融合AIGC技术&#xff0c;培养能够驾驭新质生产力的数字媒体人才 通过引入前沿的AIGC技术&#xff0c;确保学生能够接触到最先进的人工智能应用。教学内容理论和实践结合&#xff0c;让学生在实际操作中熟练掌握AIGC工具&#xff0c;生成高…...

Qwen3模型架构、训练方法梳理

qwen3炼丹真是全是技巧&#xff0c;下面来看看&#xff0c;仅供参考。 https://huggingface.co/Qwen https://modelscope.cn/organization/qwen https://github.com/QwenLM/Qwen3 模型架构 Dense 模型结构改进&#xff1a; GQA、SwiGLU、RoPE、RMSNorm with pre-normalization…...

MySQL 学习(九)bin log 与 redo log 的区别有哪些,为什么快速恢复使用 redo log 而不用 bin log?

目录 一、bin log 与 redo log 的区别1&#xff09;实现方式不同&#xff1a;2&#xff09;日志内容不同&#xff1a;3&#xff09;记录方式不同&#xff1a;4&#xff09;使用场合不同&#xff1a; 二、为什么快速恢复使用 redo log 而不用 bin log&#xff1f; 面试题&#x…...

【消息队列】RabbitMQ基本认识

目录 一、基本概念 1. 生产者&#xff08;Producer&#xff09; 2. 消费者&#xff08;Consumer&#xff09; 3. 队列&#xff08;Queue&#xff09; 4. 交换器&#xff08;Exchange&#xff09; 5. 绑定&#xff08;Binding&#xff09; 6. 路由键&#xff08;Routing …...

RabbitMQ 快速上手:安装配置与 HelloWorld 实践(二)

四、RabbitMQ 配置 4.1 用户及权限管理 在 RabbitMQ 中&#xff0c;用户管理是保障系统安全和正常运行的重要环节。通过合理的用户及权限设置&#xff0c;可以确保不同的应用或服务在使用 RabbitMQ 时&#xff0c;只能访问其被授权的资源&#xff0c;避免非法操作和数据泄露。…...

蓝桥杯 17. 修改数组

修改数组 原题目链接 题目描述 给定一个长度为 N 的数组 A [A1, A2, …, AN]&#xff0c;数组中可能包含重复的整数。 现在小明要按以下方法将其修改为没有重复整数的数组&#xff1a; 小明会依次修改 A2, A3, …, AN。 当修改 Ai 时&#xff0c;小明会检查 Ai 是否在 A…...

Redis内存淘汰策略和过期键删除策略有哪些?

Redis 提供 8 种内存淘汰策略&#xff0c;以下是详细解析及场景建议&#xff1a; 一、核心策略解析 noeviction (默认策略) 机制&#xff1a;内存满时拒绝新写入操作&#xff0c;返回错误优势&#xff1a;绝对数据安全场景&#xff1a;金融交易系统、医疗数据存储 allkeys-lr…...

基于 NanoDet 的工厂巡检机器人目标识别系统研究与实现​

摘要​ 本论文旨在设计并实现一个基于 NanoDet 模型的工厂巡检机器人目标识别系统。通过详细阐述数据集准备、模型训练、UI 界面构建以及系统部署的全过程&#xff0c;展示如何利用 NanoDet 模型的高效性和轻量化特点&#xff0c;结合合理的 UI 设计与数据集优化&#xff0c;使…...

深入解析Spring Security:JWT认证与授权实践

深入解析Spring Security&#xff1a;JWT认证与授权实践 引言 在现代Web应用中&#xff0c;安全性是至关重要的。Spring Security作为Spring生态中的安全框架&#xff0c;提供了强大的认证和授权功能。本文将重点介绍如何使用Spring Security结合JWT&#xff08;JSON Web Tok…...

《隐私计算:数据安全与隐私保护的新希望》

一、引言 在数字化时代&#xff0c;数据已成为企业和组织的核心资产。然而&#xff0c;数据的收集、存储和使用过程中面临着诸多隐私和安全挑战。隐私计算作为一种新兴技术&#xff0c;旨在解决数据隐私保护和数据共享之间的矛盾。本文将深入探讨隐私计算的基本概念、技术原理、…...

Elasticsearch索引设计与调优

一、分片策略设计 1.‌分片容量规划 单分片容量建议30GB(日志场景可放宽至100GB),避免超大分片引发查询延迟。分片总数计算公式:总数据量 / 30GB 1.2(20%余量应对未来增长)。主分片数创建后不可修改,副本分片数支持动态调整。2.‌分片分布优化 PUT logs-2025 { &qu…...

什么是im即时通讯?私有化im即时通讯软件优势是什么?

在当前企业高度关注数据主权的背景下&#xff0c;私有化IM即时通讯软件&#xff08;如BeeWorks&#xff09;的部署模式成为企业实现数据自主控制、规避外部风险的核心解决方案。以下是针对企业数据主权诉求的私有化IM软件优势深度解析&#xff1a; 一、数据主权诉求下的私有化I…...

【unity游戏开发——编辑器扩展】EditorWindow自定义unity窗口拓展

注意&#xff1a;考虑到编辑器扩展的内容比较多&#xff0c;我将编辑器扩展的内容分开&#xff0c;并全部整合放在【unity游戏开发——编辑器扩展】专栏里&#xff0c;感兴趣的小伙伴可以前往逐一查看学习。 文章目录 前言一、自定义窗口1、创建窗口类2、创建窗口对象3、显示窗…...

深入理解Java HotSpot中的即时编译

即时编译(Just-In-Time Compilation,简称JIT)是Java虚拟机(JVM)的核心技术之一,通过在运行时将字节码转换为本地机器码,显著提升了Java应用程序的性能。本文基于HotSpot JVM,详细探讨了JIT编译的工作原理、优化技术、日志分析以及最新的编译器发展,旨在帮助开发者更好…...

【教程】Docker方式本地部署Overleaf

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 背景说明 下载仓库 初始化配置 修改监听IP和端口 自定义网站名称 修改数据存放位置 更换Docker源 更换Docker存储位置 启动Overleaf 创…...

解决docker alpine缺少字体的问题 Could not initialize class sun.awt.X11FontManager

制作的springboot项目镜像&#xff0c;缺少字体报错Could not initialize class sun.awt.X11FontManager 原因镜像中缺少字体 解决&#xff1a; 制作镜像时&#xff0c;添加字体库&#xff0c;Dockerfile文件 中添加如下内容 注意&#xff1a; jdk版本一定要使用&#xff0…...

深度解析智能体:从概念到应用的全方位洞察

在科技日新月异的当下&#xff0c;智能体已从人工智能的前沿概念逐渐走进大众视野&#xff0c;成为备受瞩目的焦点。那么&#xff0c;究竟何为智能体呢&#xff1f; 一、智能体的概念 智能体&#xff0c;简单来讲&#xff0c;可看作是“大模型 超级工具人”的有机融合。它能够…...

python 异步执行多个 python 命令

前提说明&#xff1a; 1. 有N套用 python 爬取客户不同网站上的评论的程序 2. 有一套用 python 将评论出成 Excel 报表的程序 新需求&#xff1a; 做一个总入口&#xff0c;异步同时爬不同网站评论&#xff0c;或同时出不同月份报表&#xff0c;或爬虫做报表同时做的 # -…...