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

分布式锁【Redis场景分布式锁篇】

文章目录

  • 1.Redis分布式锁
  • 2.分布式锁其它方案
    • 1.主动轮询型
      • 1.MySQL分布式锁
      • 2.Redis分布式锁
    • 2.监听回调型
      • 1.Etcd
      • 2.Zookeeper
    • 总结

1.Redis分布式锁

锁通常用来控制共享资源,比如一个进程内有多个线程竞争一个数据的使用权限,解决方式之一就是加锁。分布式锁,就是在分布式场景下的锁,比如多台不同机器上的进程,去竞争同一项资源,就是分布式锁。

一个优秀的分布式锁需要具有互斥性、抗死锁性、对称性、可靠性。

  • 互斥性:一把锁只能由一个竞争者获取。
  • 抗死锁性:避免锁因为异常永远不会被释放。
  • 对称性:加锁和解锁必须是同一个竞争者。
  • 可靠性:需要有一定的异常处理能力、容灾能力。

接下来,主要探究Redis是怎么实现这个分布式锁。Go!

版本一

Redis的SETNX在设置kv的时候,如果key不存在,会设置这个kv并返回1;否则直接返回0。
[图片]

基于以上SETNX的特性,我们就可以实现加锁。

版本二

对于上述的加锁,有一个直观的问题,就是获取锁的这个服务挂掉了,那锁怎么办呢?所以我们需要一个过期时间来对锁进行兜底处理。

> SET k 123 NX EX 10
"OK"

以上这个命令就可以实现原子性的增加过期时间了(SETNX和expire不是原子操作)。

如果说业务还没有完成,锁却过期了,还是不安全的,怎么办?

那么这里就有一个WatchDog机制,定时向Redis进行续期操作,防止锁在业务完成之前过期,续期的开始时间可以是过期时间的三分之一(当然也会消耗部分资源,续期操作也可能导致其他请求方无法使用,这就需要考虑业务安全性)。

版本三

上面的锁是可以用了,但是还是出现问题了。例如,服务 A 获取了锁,但由于某些原因导致锁过期,服务 A 未停止执行其任务。这时,服务 B 获取了锁并开始执行任务。然而,当服务 A 恢复后试图释放锁时,由于锁已过期且被服务 B 获取,服务 A 实际上会误释放服务 B 的锁,导致服务 B 的任务中断或产生冲突。

那么怎么办?

分布式锁需要满足谁申请谁释放原则,不能释放别人的锁。一般分布式锁会对上锁的key做一个唯一性id,这个id就是owner的值。

这就大事告成了吗?不不不,这个加owner值,在检查锁,再释放锁这块不是原子化的操作,可能获取时还是自己的,删除的时候却是别人的了。所以,这里在这一块就使用Lua脚本。

以上的方案确保了抗死锁性、互斥性、安全性。但是可靠性不能确保。以下简单探讨一下可靠性怎么保证。

  1. 主从容灾
  2. 多机部署

2.分布式锁其它方案

回到最初,我们为什么需要分布式锁呢?

最典型的案例就是库存超卖现象。对于单机项目使用单机锁就可以解决,如果多级部署就需要用到分布式锁。

那么如何实现分布式锁呢?

  1. 主动轮询:服务会定期向锁服务发送请求,直到成功获取锁或超时。
  2. 监听回调:服务无需主动轮询,而是通过锁服务的回调通知来感知锁的状态变化。

1.主动轮询型

主动轮询型分布式锁的核心是通过一个标识(通常是一个键)来表示锁的状态。加锁操作意味着向这个键写入特定的值,而解锁操作则对应删除这个键。如果在尝试加锁时发现锁已被其他服务获取,当前服务会定期轮询该键的状态,直到锁被释放为止,然后再尝试加锁并执行自身的操作。

主要是用Redis或MySQL实现。

1.MySQL分布式锁

MySQL 实现分布式锁主要是通过一张专用的锁表,其中每一行代表一个锁。加锁操作通过向表中插入或更新记录完成,解锁操作则通过删除或修改相应记录实现。MySQL 利用事务和唯一约束,确保加锁操作的原子性。然而,与 Redis 不同,MySQL 锁缺乏内置的过期机制,在处理死锁问题时存在一定挑战。

具体来说,数据库锁无法像 Redis 那样设置自动过期时间。如果持有锁的进程异常退出或挂掉,而未能释放锁记录,其他线程会因为等待该锁被释放而陷入阻塞,从而导致系统死锁。这种问题在高可用场景下尤为严重,需要额外的逻辑来处理锁的超时与清理。

2.Redis分布式锁

Redis 分布式锁的实现通常基于唯一的key来标识一把锁。加锁操作通过向 Redis 插入一条键值数据完成,解锁操作则通过删除该key实现。如果在尝试加锁时发现锁已被他人持有(即key已存在),当前线程会通过轮询机制反复检查锁的状态,直到锁被释放后重新尝试加锁。

Redis 的分布式锁由于其单线程架构和高性能的特点,能有效避免竞争条件问题。此外,通过设置key的自动过期时间,可以防止因锁持有者异常退出导致锁长期不释放的情况。

2.监听回调型

什么是监听回调型?

例如,你在餐厅排队等座位。你拿到了一个排队号码,这就像是你“获取锁”。你不需要不断询问前台是否有座位,而是通过餐厅的叫号系统(广播、显示屏等)来等待通知,这就像是监听回调。当轮到你时,系统会通知你,你就可以去就座,这就相当于“获得锁并执行操作”。用餐后,当你离开餐厅时,你释放了座位,其他顾客可以继续排队,这类似于“释放锁”。整个过程中,你只需等待系统通知,而无需主动询问或轮询,大大提高了效率。

1.Etcd

Etcd是一个使用Go语言编写的高可用的分布式键值对kv数据仓库。

2.Zookeeper

zookeeper是一个用于提供分布式应用程序协调服务的组件。

总结

1、分布式锁实现要点是什么?
(怎么加锁、怎么解锁、怎么用)
加锁时候要设置owner过期时间,前者是便于解锁时进行拥有者判断,后者是作为异常情况的兜底。解锁时候要先判断owner,是自己的再释放,这里还要注意这两步操作的原子性,可以用lua脚本来进行保证。
(ps:Redis实现分布式锁的原理是什么?)
客户端想要加锁,就会去Redis中查找对应的key是否存在,如果不存在,就创建这个key,表示加锁成功;当另一个客户端也想加锁时,发现这个key已经存在了,就会返回0,表示加锁失败。
(ps:那你这个客户端执行SETNX加锁,结果执行del删除释放锁一直没成功,造成死锁,怎么办?)
给这个锁设置过期时间,若超过过期时间,Redis自动释放锁。
(ps:当客户端A成功加锁,但被客户端解锁了,要是有其他客户端加锁,就会和A共享数据,咋办?)
为了避免客户端A被错误解锁后,其他客户端与A共享数据的问题,可以为每个锁添加唯一的 client_id 标识,确保每个客户端的锁操作独立。当客户端A成功加锁时,它会将自己的 client_id 存储在锁的key中。在解锁时,使用 Lua 脚本原子操作,首先检查 Redis 中存储的 client_id 是否与当前客户端的标识一致,只有一致时才允许删除锁,确保锁的释放只能由持有者完成。这样,即使其他客户端加锁,也不会误解锁或与A共享数据,从而保证了锁的独立性和数据的安全性。
(ps:锁过期时间到了,但是业务还没有完成?)
启动一个WatchDog,在过期之前,刷新一下过期时间。

2、为什么需要owner呢?
对称性。

3、Lua一定可以保证原子性吗?
lua本身不具备原子性,用lua保证原子性是因为Redis是单线程执行,一个流程放进lua来执行,相当于是打包在一起,Redis执行它时不会被其他请求打断。(将查询,删除key打包,其中只有删除是写操作,所以这个流程本身是原子性的)

4、RedLock是什么?
RedLock 是一种分布式锁算法,通过在多个 Redis 实例上加锁,只有超过一半的实例同意加锁才能成功,以提高锁的可靠性和容错性。

感觉不错就点个赞,给作者充充电吧~

相关文章:

分布式锁【Redis场景分布式锁篇】

文章目录 1.Redis分布式锁2.分布式锁其它方案1.主动轮询型1.MySQL分布式锁2.Redis分布式锁 2.监听回调型1.Etcd2.Zookeeper 总结 1.Redis分布式锁 锁通常用来控制共享资源,比如一个进程内有多个线程竞争一个数据的使用权限,解决方式之一就是加锁。分布式…...

BGP协议

BGP(Border Gateway Protocol,边界网关协议)是一种用于在不同网络之间传输可达性信息的路由协议。它是互联网上使用的主要协议之一,用于连接不同的自治系统(AS),即由单个实体控。边界网关协议_百…...

iframe webview打开外链内嵌video标签导致视频无法全屏展示

iframe webview打开外链内嵌video标签导致视频无法全屏展示 解决方法iframe 添加属性webview 添加属性 解决方法 iframe 添加属性 <iframe style"width: 100%;height: 100vh;" src"http://xxx.xxx........" allowfullscreen"true" w…...

学习日志024--opencv中处理轮廓的函数

目录 前言​​​​​​​ 一、 梯度处理的sobel算子函数 功能 参数 返回值 代码演示 二、梯度处理拉普拉斯算子 功能 参数 返回值 代码演示 三、Canny算子 功能 参数 返回值 代码演示 四、findContours函数与drawContours函数 功能 参数 返回值 代码演示 …...

【从零开始入门unity游戏开发之——C#篇05】转义字符、@处理多行文本或者不使用转义字符、随机数

文章目录 一、转义字符1、什么是转义字符&#xff1f;2、常见的转义字符3、总结 二、使用处理多行文本或者不使用转义字符1、多行字符串2、不使用转义字符 三、随机数1、Random.Next()生成随机整数示例&#xff1a;生成一个随机整数生成指定范围内的随机整数 2、Random.NextSin…...

PHP获取指定日期的下周日至下周六的日期(下周几的日期)

PHP获取指定日期的下周日至下周六的日期&#xff08;下周几的日期&#xff09; 在PHP中&#xff0c;可以使用strtotime()函数来获取指定日期的下周日至下周六的日期。 // 周天 sunday // 周一 monday // 周二 tuesday // 周三 wednesday // 周四 thursday // 周五 friday // …...

超越飞书钉钉:探索高效内部知识库平替方案与应用

在团队协作日益频繁的今天&#xff0c;飞书与钉钉作为两大主流的企业沟通与协作平台&#xff0c;广受企业青睐。然而&#xff0c;随着企业规模的扩大和知识的累积&#xff0c;单纯的沟通与协作已难以满足企业对知识管理与传承的需求。因此&#xff0c;寻找一款能够高效整合内部…...

3D相框案例讲解(详细)

前言 通过现阶段的学习&#xff0c;我们已经掌握了HTML&#xff0c;CSS和JS部分的相关知识点&#xff0c;现在让我们通过一篇案例&#xff0c;来巩固我们近期所学的知识点。 详细视频讲解戳这里 任务一 了解目标案例样式 1.1了解案例 3D相框 1.2 分析案例 首先我们看到一个…...

一、基于langchain使用Qwen搭建金融RAG问答机器人--技术准备

一,LangChain框架介绍 LangChain 框架是一个开源工具&#xff0c;通过为各种 LLM 提供通用接口来简化应用程序的开发流程&#xff0c;帮助开发者自由构建 LLM应用。 LangChain封装了很多组件&#xff0c;通过这些组件的组合可以构建多种类型的RAG应用。开发者可以直接将私有数…...

2024年全球安全光幕装置行业总体规模、主要企业国内外市场占有率及排名

根据研究团队调研统计&#xff0c;2023年全球安全光幕装置市场销售额达到了46亿元&#xff0c;预计2030年将达到70亿元&#xff0c;年复合增长率&#xff08;CAGR&#xff09;为6.4%&#xff08;2024-2030&#xff09;。中国市场在过去几年变化较快&#xff0c;2023年市场规模为…...

uniapp跨端适配—条件编译

在uniapp中&#xff0c;跨端适配是通过条件编译实现的。条件编译允许开发者根据不同的平台&#xff08;如iOS、Android、微信小程序、百度小程序等&#xff09;编写不同的代码。这样可以确保每个平台上的应用都能得到最优的性能和用户体验。 以下是uniapp中条件编译的基本语法…...

HTML、CSS表格的斜表头样式设置title 画对角线

我里面有用到layui框架的影响&#xff0c;实际根据你自己的框架来小调下就可以 效果如下 上代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…...

自动驾驶控制与规划——Project 2: 车辆横向控制

目录 零、任务介绍一、环境配置二、算法三、代码实现四、效果展示 零、任务介绍 补全src/ros-bridge/carla_shenlan_projects/carla_shenlan_stanley_pid_controller/src/stanley_controller.cpp中的TODO部分。 一、环境配置 上一次作业中没有配置docker使用gpu&#xff0c;…...

Docker的初识

目录 1. 容器技术发展史1.1 Jail 时代1.2 云时代1.3 云原生时代1.3.1 Google & Docker 竞争1.3.2 k8s 成为云原生事实标准 2. 虚拟化和容器化的概念2.1 什么是虚拟化、容器化2.2 为什么要虚拟化、容器化&#xff1f;2.3 虚拟化实现方式2.3.1 应用程序执行环境分层2.3.2 虚拟…...

R-Studio Technician,无网络负担地进行远程数据分析和数据恢复任务

对于数据恢复技术人员和技术支持团队来说&#xff0c;时间就是金钱。这不仅包括您在客户机器上花费的时间 - 还包括您往返公司办公室的时间&#xff0c;这可能会带来巨大的不便&#xff0c;特别是如果客户位于其他省市。电话支持通常不适用于需要数小时才能完成的复杂任务&…...

Couchbase的OLAP支持情况

Couchbase 是一个高性能的 NoSQL 数据库&#xff0c;主要用于在线事务处理&#xff08;OLTP&#xff09;场景&#xff0c;但它也提供了一些功能来支持在线分析处理&#xff08;OLAP&#xff09;需求。以下是 Couchbase 对 OLAP 支持的几个方面&#xff1a; 1. N1QL 查询语言 …...

路径规划之启发式算法之十六:和声搜索算法(Harmony Search, HS)

和声搜索算法(Harmony Search, HS)是一种新兴的启发式全局搜索算法,是一种模拟音乐家即兴演奏过程的群体智能优化算法。这种算法由Zong Woo Geem等人在2001年提出,灵感来源于音乐家在寻找和声时的创造性思维过程。HS算法通过模拟音乐家演奏音乐时的选择过程来寻找问题的最优…...

服务器---centos上安装docker并使用docker配置jenkins

要在 Docker 中安装 Jenkins 并进行管理,可以按照以下步骤操作: 1. 安装 Docker 首先,确保你的系统已经安装了 Docker。如果尚未安装,可以使用以下命令进行安装: 在 CentOS 上安装 Docker sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://…...

面试题整理1---正向代理和反向代理的含义及异同

面试题整理1---正向代理和反向代理的含义及异同 1. 正向代理 (Forward Proxy)1.1 正向代理定义&#xff1a;1.2 正向代理的工作流程&#xff1a;1.3 正向代理的应用场景&#xff1a; 2. 反向代理 (Reverse Proxy)2.1 反向代理的定义&#xff1a;2.2 反向代理的工作流程&#xf…...

记录学习《手动学习深度学习》这本书的笔记(五)

这一章是循环神经网络&#xff0c;太难了太难了&#xff0c;有很多卡壳的地方理解了好久&#xff0c;比如隐藏层和隐状态的区别、代码的含义&#xff08;为此专门另写了一篇【笔记】记录对自主实现一个神经网络的步骤的理解&#xff09;、梯度计算相关&#xff08;【笔记】记录…...

鸿蒙调试打包(非正式打包)

文章目录 前言第一步&#xff1a;生成.p12和.csr文件第二步&#xff1a;申请证书的前置步骤第三步&#xff1a;申请证书 前言 HarmonyOS 应用打包后的文件为.app 格式&#xff0c; android 打包后的文件为.apk&#xff0c;IOS 打包后的文件为.apa HarmonyOS通过数字证书&#…...

Python中的容器化服务监控:结合Prometheus和Grafana实现高效监控与可视化

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在现代的DevOps和微服务架构中,容器化技术(如Docker)已成为主流的部署方式。然而,容器环境的动态特性使得服务监控和性能分析变得更加复…...

【大数据】-- 读放大和写放大

目录 一、定义 1. 读放大(Read Amplification) 定义 原因 优化方法 2. 写放大(Write Amplification) 定义 原因 优化方法 对比与联系 二、举例 1. Hadoop(HDFS) 读放大 写放大 2. Flink 读放大 写放大 3. Hive 读放大 写放大 4. Presto 读放大 写放…...

[工具升级问题] 钉钉(linux版)升级带来的小麻烦

本文由Markdown语法编辑器编辑完成。 1. 背景: 今日钉钉又发布了新的升级版本。由于我工作时使用的是Ubuntu 20.04版本&#xff0c;收到的升级推送信息是&#xff0c;可以升级到最新的7.6.25-Release版本。根据钉钉官方给出的历次更新版说明&#xff0c;这个新的版本&#xf…...

Maven学习(Maven项目模块化。模块间“继承“机制。父(工程),子项目(模块)间聚合)

目录 一、Maven项目模块化&#xff1f; &#xff08;1&#xff09;基本介绍。 &#xff08;2&#xff09;汽车模块化生产再聚合组装。 &#xff08;3&#xff09;Maven项目模块化图解。 1、maven_parent。 2、maven_pojo。 3、maven_dao。 4、maven_service。 5、maven_web。 6…...

Opencv之图像添加水印

一、实验原理 在图片处理领域&#xff0c;添加水印是一种常见的操作。通过叠加图像的方式&#xff0c;可以将水印无缝嵌入目标图像的指定位置。其基本原理包括以下步骤&#xff1a; 1、模板输入&#xff08;掩膜生成&#xff09;&#xff1a; 将水印图片转换为灰度图&#xf…...

在线预约陪诊小程序

一、前言 随着社会老龄化加剧以及人们健康意识的提高&#xff0c;就医过程中的陪伴需求日益增长。许多患者在面对复杂的医院环境、繁琐的就医流程时&#xff0c;需要有人协助挂号、候诊、取药等&#xff0c;而家属可能因工作繁忙无法全程陪同。同时&#xff0c;异地就医的患者更…...

2024年9月CCF GESP Scratch图形化编程等级考试四级真题试卷

GESP 图形化四级试卷&#xff08;A&#xff09; &#xff08;满分&#xff1a;100 分 考试时间&#xff1a;120 分钟&#xff09; 一、单选题&#xff08;共 10 题&#xff0c;每题 2 分&#xff0c;共 30 分&#xff09; 1、2024 年 10 月 8 日&#xff0c;诺贝尔物理学奖“意…...

[免费]SpringBoot+Vue校园社团管理系统(优质版)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue校园社团管理系统(优质版)&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue校园社团管理系统(优质版) Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术的迅速发展&#x…...

NX系列-使用 `nmcli` 命令创建 Wi-Fi 热点并设置固定 IP 地址

使用 nmcli 命令创建 Wi-Fi 热点并设置固定 IP 地址 一、前言 在一些场景下&#xff0c;我们需要将计算机或嵌入式设备&#xff08;例如 NVIDIA Orin NX&#xff09;转换为 Wi-Fi 热点&#xff0c;以便其他设备&#xff08;如手机、笔记本等&#xff09;能够连接并使用该设备…...

Qt控件的盒子模型,了解边距边线和内容区

这篇专门讲讲一个控件在绘制时的视觉样式。我们平常在对控件设置样式时&#xff0c;需要设置控件的一些外边距&#xff0c;内边距&#xff0c;边线&#xff0c;还有文字内容&#xff0c;贴上图片等。那么对于一个控件&#xff0c;到底怎么实现这些设置的呢&#xff1f; 先看下面…...

深度学习基础--将yolov5的backbone模块用于目标识别会出现怎么效果呢??

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 yolov5网络结构比较复杂&#xff0c;上次我们简要介绍了yolov5网络模块&#xff0c;并且复现了C3模块&#xff0c;深度学习基础–yolov5网络结构简介&a…...

MySQL 根据 字段包含关键词进行分类

为了解决动态关键词匹配的需求&#xff0c;我们需要创建一个关键词表&#xff08;keywords_table&#xff09;&#xff0c;其中存储关键词和对应的类别。以下是具体的步骤&#xff1a; 1. 创建关键词表 可以用以下 SQL 创建一个简单的关键词表&#xff1a; CREATE TABLE keyw…...

ssm-day04 mybatis

mybatis是一个持久层框架&#xff0c;针对的是JDBC的优化 简化数据库操作&#xff0c;能进行单表、多表操作&#xff0c;在这个框架下&#xff0c;需要我们自己写SQL语句 Mapper接口和MapperXML文件就相当于Dao和Dao层的实现 通常将xml文件放在resources包下 &#xff0c;放在…...

soul大数据面试题及参考答案

如何看待数据仓库? 数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。 从数据存储角度看,它整合了来自多个数据源的数据。这些数据源可能包括业务系统数据库、日志文件等各种结构化和非结构化数据。例如,在电商企业中,它会整合订…...

【SpringBoot中MySQL生成唯一ID的常见方法】

SpringBoot中MySQL生成唯一ID的常见方法 在Spring Boot中&#xff0c;为MySQL生成唯一ID有多种方式&#xff0c;每种方式都有其特定的概念、优越点和使用场景。以下是详细的说明和代码示例&#xff1a; UUID 概念: UUID&#xff08;Universally Unique Identifier&#xff0…...

在 Windows 环境下将 Vue 项目打包并压缩为 .zip 文件的批处理脚本

以下是一个 Windows 批处理脚本&#xff0c;完成以下任务&#xff1a; 运行 npm run build 打包 Vue 项目。使用 7-Zip 将生成的 dist 目录压缩成 ZIP 文件。 脚本内容 echo off:: 切换命令行编码为 UTF-8 chcp 65001 >nul:: 设置环境变量 set PROJECT_DIRC:\path\to\you…...

ubuntu上更改ext4格式的硬盘为 windows的 NTFS 格式参考

1. ubuntu上安装 sudo apt-get install gparted 2. 参考如下&#xff0c;下面是转换后的样例。 3.windows上添加识别新硬盘参考 先在设备管理器中 找到下面 磁盘管理 如下&#xff1a;找到类似下面的磁盘2 查看相关信息 右键可以新建卷和格式化&#xff0c;下面是已经新建…...

Qt WORD/PDF(二)使用 QtPdfium库实现 PDF操作、打印等

关于QT Widget 其它文章请点击这里: QT Widget GitHub 源码: QWidgetLearningPro &#xff08;暂未更新&#xff09; 姊妹篇: Qt WORD/PDF&#xff08;一&#xff09;使用 QtPdfium库实现 PDF 操作 Qt WORD/PDF&#xff08;二&#xff09;使用 QtPdfium库实现 …...

信息化基础知识——数字政府(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 数字政府 大数…...

使用winscp从windows访问Ubuntu进行文件传输

Ubuntu 系统上的准备工作 • 安装 SSH 服务器&#xff1a; 确保 Ubuntu 系统上已经安装了 SSH 服务器。如果没有安装&#xff0c;可以使用以下命令安装&#xff1a; sudo apt update sudo apt install openssh-server • 启动 SSH 服务&#xff1a; 确保 SSH 服务正在运行&a…...

【返璞归真】score检验:似然比的得分检验(Likelihood Ratio Score Test)

Score检验&#xff08;Score Test&#xff09;是一种用于假设检验的方法&#xff0c;特别是在统计建模中&#xff0c;常用于估计模型参数时检验某个假设是否成立。它的全名是“似然比的得分检验”&#xff08;Likelihood Ratio Score Test&#xff09;&#xff0c;通常用于大样…...

使用skywalking,grafana实现从请求跟踪、 指标收集和日志记录的完整信息记录

Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的开源项目&#xff0c; 2017年12月SkyWalking成为Apache国内首个个人孵化项目&#xff0c; 2019年4月17日SkyWalking从Apache基金会的孵化器毕业成为顶级项目&#xff0c; 目前SkyWalking支持Java、 .Net、 Node.js、…...

蓝桥杯刷题——day1

蓝桥杯刷题——day1 题目一题干题目解析代码 题目二题干题目解析代码 题目一 题干 给定一个字符串 s &#xff0c;验证 s 是否是 回文串 &#xff0c;只考虑字母和数字字符&#xff0c;可以忽略字母的大小写。本题中&#xff0c;将空字符串定义为有效的 回文串 。 题目链接&a…...

ORACLE RAC ADG备库报错ORA-04021: timeout occurred while waiting to lock object

问题&#xff1a;核心的灾备 RAC ADG 备库&#xff0c;这两天频繁重启&#xff0c;并且报如下错误&#xff0c;通过查看MOS&#xff0c;发现是个BUG ADG备库的ALERT错误日志如下&#xff1a; Errors in file /u01/app/oracle/diag/rdbms/hxxxsz/hxxxsz1/trace/hxxxsz1_lgwr_69…...

虚拟机Ubuntu以及pwn的工具安装

之前pwn入门在kali上装了&#xff0c;师兄说用Ubuntu会比kali好得多&#xff0c;更有利于pwn的学习&#xff0c;本着少走弯路的想法我就决定装一个&#xff0c;再把工具什么的配了 一、Ubuntu的安装 参考博客及镜像来源&#xff1a;VMware虚拟机安装Ubuntu教程(超详细)_vmwar…...

MeiliSearch:一款轻量级开源搜索引擎

Meilisearch 是由 Meili &#xff08;一家总部位于法国的软件开发公司&#xff09;创建的搜索引擎&#xff0c;目前在 Github 上有 47.9k stars。 Meillisearch 具备以下特色功能&#xff08;ChatGPT-4o 翻译&#xff09;&#xff1a; 混合搜索&#xff1a;结合语义搜索和全文…...

数据库入门

基本概念 数据库&#xff1a;DataBase简称DB&#xff0c;是一个用于存储和管理数据的仓库。 就像我们每天访问的网站Bilibili&#xff0c;OA、ERP和CRM等内部管理系统&#xff0c;以及我们每天使用的腾讯新闻和Tiktok应用程序一样&#xff0c;我们看到的数据实际上存储在数据库…...

WebGIS城市停水及影响范围可视化实践

目录 前言 一、相关信息介绍 1、停水信息的来源 2、停水包含的相关信息 二、功能简介 1、基础小区的整理 2、停水计划的管理 三、WebGIS空间可视化 1、使用到的组件 2、停水计划的展示 3、影响小区的展示 4、实际效果 四、总结 前言 城市停水&#xff0c;一个看似…...

【Syncfusion系列】Diagram 杂谈 第三篇 序列化和反序列化

目录 序列化保存C# 代码示例&#xff0c; 方式1 &#xff1a;C# 代码示例&#xff0c; 方式2 &#xff1a; 反序列化加载C# 代码示例, 方式1&#xff1a;C# 代码示例, 方式2&#xff1a; **如何序列化自定义属性**序列化和反序列化都存在的一个问题解决方式 图表是否已修改&…...