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

Redis日常维护技巧与常见问题解决方案

Redis是一个开源的内存数据存储系统,广泛应用于缓存、消息队列、实时分析等场景。由于其高性能和持久化特性,越来越多的企业开始引入Redis。然而,要使Redis高效、稳定地运行,日常的维护和问题解决显得尤其重要。本文将分享一些Redis的日常维护技巧以及常见问题的分析与解决方案。

一. Redis日常维护技巧

在Redis的日常维护中,有效的管理和监控是确保其高效和稳定运行的关键。以下是一些实用的Redis维护技巧,帮助用户更好地管理其Redis实例。

1.1 监控Redis性能

1.1.1 使用自带命令

Redis提供了一些强大的命令,可以帮助我们实时监控系统性能:

  • INFO命令:这个命令返回Redis服务器的各种统计信息,包括内存使用情况、连接数、数据库键值对数量、慢查询记录等。你可以通过 INFO memory 命令了解内存使用情况,或 INFO stats 来获取请求的总数、命中率等重要指标。这些数据能够帮助我们发现潜在的性能瓶颈。

  • MONITOR命令:这个命令会实时记录Redis服务器上的所有请求,并输出到控制台。这在调试或分析性能问题时十分有用,帮助我们了解哪些命令消耗较多的资源。

1.1.2 使用监控工具

除了使用自带命令,借助第三方监控工具可以更加直观地了解Redis的状态:

  • Redis Desktop Manager 和 RedisInsight等图形化工具:这些工具提供了可视化界面,能够定期展示并分析Redis的使用情况,用户可以一目了然地看到各种数据统计和性能指标。

  • Prometheus + Grafana:这是一个功能强大的监控和可视化解决方案。可以将Redis与Prometheus结合,定期抓取Redis的性能指标数据,然后用Grafana进行美观的可视化展示,帮助团队及时了解Redis的运行状况,并可以设置告警规则提醒运维人员及时处理异常。

1.2 数据备份与恢复

定期备份是保障数据安全的重要手段。Redis支持RDB和AOF两种持久化机制,不同的场景需要选择不同的配置。

1.2.1 RDB(快照方式)

RDB(Redis Database Backup)每隔一定时间创建数据快照,适合数据恢复时间较长的场合。你可以通过以下命令手动触发RDB保存:

bash

SAVE  # 阻塞调用,保存当前数据
BGSAVE  # 异步保存,后台保存数据

需要在 redis.conf 配置文件中设置 save 参数来指定保存频率,例如 save 900 1 表示在900秒内至少进行1次写操作后保存。

1.2.2 AOF(Append Only File)

AOF持久化记录所有写命令的日志,适合对数据一致性要求较高的场合。可以通过设置 appendonly yes 启用AOF,并设定重写策略(appendfsyncno-appendfsync-on-rewrite 等)。AOF的优势在于可以更细粒度地恢复数据,但需要定期进行AOF重写以避免文件过于庞大。

对于备份策略,可以使用以下命令进行手动备份:

bash

# 生成AOF快照
BGREWRITEAOF
1.2.3 数据恢复

当发生数据丢失时,可以根据备份数据进行恢复。可以从RDB文件或AOF文件中恢复数据,恢复过程一般在Redis启动时自动进行,但用户也可以手动指定数据路径进行恢复。

1.3 优化配置

通过合理的Redis配置,可以显著提升性能。以下是一些常见的优化配置建议:

1.3.1 maxmemory设置

设定Redis的最大内存使用量(maxmemory),以避免意外的内存消耗过高导致的系统崩溃。根据实际机器的硬件配置和业务需求,建议设定成物理内存的60%-80%。可以在配置文件中设置:

maxmemory 2gb  # 设置最大内存为2GB
1.3.2 内存淘汰策略

使用合适的内存淘汰策略,如LRU(Least Recently Used)或LFU(Least Frequently Used),确保Redis在内存达到最大限制时能高效地释放不常用的键值。可在配置中设置:

bash

maxmemory-policy allkeys-lru  # 选用LRU策略进行内存淘汰
1.3.3 连接数和超时设置

要根据实际的业务并发量合理调整maxclients参数,规范连接数,避免达到最大连接导致服务不可用。同时,通过调整timeout参数,规范连接的超时时间,切断长时间未使用的连接,降低资源消耗。

bash

maxclients 10000  # 设定最大连接数
timeout 300  # 设置连接最大空闲时间为300秒

1.4 定期清理无用数据

如果Redis中存在TTL(过期时间)的键值对,定期清理过期的数据不仅能释放内存,还能提高数据查询效率。在日常维护中,可以利用以下方法进行清理:

  • EXPIRE命令:通过设定键值的过期时间自动进行清理。
  • 定期执行UNUSED命令:可帮助发现未使用的钥匙,并进行相应的清理。

1.5 采用集群与分片

如果业务量大,单节点Redis可能面临性能瓶颈。对于读写请求量大的场景,可以考虑使用Redis Cluster来扩展Redis的性能。Redis Cluster能够实现数据分片,同时提供高可用性,越是规模大的项目,越要考虑集群的架构设计。

通过上述维护技巧,我们可以确保Redis高效、稳定地运行。同时,定期的数据备份和监控措施能够帮助我们在问题发生时迅速采取行动。善用这些技巧,有助于提升我们的工作效率,并保护我们的数据安全。希望这些分享能对大家在日常Redis管理中有所帮助,为构建更高效的应用打下坚实的基础。

二. 常见问题分析与解决方案

在使用Redis的过程中,用户常常会遇到多种问题。了解这些常见问题的成因及解决方案对于保持系统的稳定性和性能至关重要。以下是一些常见的Redis问题,以及针对这些问题的分析与解决方案。

2.1 数据丢失

问题描述

在Redis重启后,发现部分数据丢失是一个常见的问题,尤其是使用RDB持久化时,更容易出现由于未及时保存而导致的数据丢失现象。

解决方案
  • 检查持久化配置:首先,确认Redis的持久化机制是否正确启用。检查配置文件中的save(RDB快照保存间隔)和appendonly(AOF是否启用)设置。确保在适当的间隔内生成快照或AOF文件。

  • 记录日志信息:当发生数据丢失时,查看Redis日志文件,找出哪种操作可能导致数据丢失。比如,确保没有意外执行FLUSHALL等命令。

  • 结合RDB与AOF:如业务要求快速恢复,可采用同时使用RDB和AOF。RDB用于快速启动,AOF用于详细的增量更新,这样可以在业务出现故障时,使得数据恢复到最近的状态。

2.2 哨兵不可用

问题描述

在使用Redis Sentinel来保证高可用性时,某个哨兵节点可能出现不可用的现象,导致主从切换失败,从而影响系统的稳定性。

解决方案
  • 检查网络连接:确认哨兵节点与主节点之间的网络连接稳定且畅通无阻。网络问题可能导致哨兵无法监控主节点。

  • 确认哨兵配置:检查哨兵的配置文件,确认sentinel monitor规则是否正确,确保哨兵能够准确辨识主从节点。

  • 验证哨兵状态:使用以下命令查看哨兵状态,确保哨兵能够正常工作:

    bash

    SENTINEL masters  # 列出当前的主节点
    SENTINEL sentinels <master-name>  # 列出监控指定主节点的哨兵
  • 重新启动哨兵:在排查以上问题后,如果仍未解决,可以尝试重启出现问题的哨兵实例。

2.3 性能下降

问题描述

Redis的响应时间变长,吞吐量下降,可能会导致应用服务的较高延迟。

解决方案
  • 使用慢查询日志:使用SLOWLOG命令查看慢查询记录,找出执行时间较长的命令。可根据日志分析进一步优化这些操作。

    SLOWLOG get 10  # 获取10条慢查询日志
  • 检查内存使用情况:通过INFO memory命令检查内存占用情况,若内存使用接近maxmemory限制,可能导致性能下降。需要考虑扩展内存或优化数据存储。

  • 评估配置:根据当前流量情况,重新评估Redis配置,确保参数如maxmemorymaxclientstimeout符合实际需求。

  • 考虑数据分片或集群化:对数据量大的应用场景,可以采用Redis Cluster(集群模式),将数据分片以提升整体性能。

2.4 连接数超限

问题描述

当客户端连接到Redis时,可能会出现“Too many open files”或“exceeded maxclients”等错误提示,这通常意味着Redis的最大连接数达到了限制。

解决方案
  • 查看当前连接数:使用INFO clients命令查看当前连接情况,评估连接的使用状态,确认连接数是否真的达到上限。

  • 调整maxclients参数:根据实际需求和服务器性能,提升maxclients的值。在配置文件中增加这一参数。例如:

    bash

    maxclients 10000  # 设置最大连接数为10000
  • 优化应用程序代码:确保应用中对Redis的使用效率,例如使用连接池技术来减少频繁建立和关闭连接的开销,提高性能。

  • 使用连接超时策略:通过设置timeout参数,断开长时间未使用的连接,释放资源。

2.5 数据一致性问题

问题描述

在分布式系统中,可能领导于多个客户端同时对Redis执行写操作,导致数据不一致性的问题。

解决方案
  • 使用事务:在进行写操作时,使用MULTI、EXEC、WATCH等Redis事务机制,确保多个命令的原子性执行,避免数据不一致。

    bash

    MULTI
    SET key1 value1
    SET key2 value2
    EXEC
  • 设置合适的过期时间:当在Redis中存储临时数据时,建议设置EXPIRE命令,为键设置有效期,确保数据不会滞留太长时间。

  • 应用级一致性控制:在应用层实现乐观锁或悲观锁机制,避免多个写操作对同一数据的竞争和冲突。

通过分析和解决Redis中常见问题,运维人员和开发者能够更好地确保Redis服务的高可用性和性能。定期进行监控、备份及性能调优,能够在很大程度上减少问题的发生概率,为业务的稳定运行提供保障。

三. Redis常用维护命令及解释

在Redis的日常运维中,有效使用维护命令可以帮助我们更好地管理和监控Redis实例。以下是一些常用的Redis维护命令及其解释,这些命令涵盖了监控、管理、性能优化和数据备份等方面。

3.1 基础命令

3.1.1 INFO

功能:获取Redis服务器的详细信息和统计数据。

用法

INFO

解释:返回关于内存使用、连接数、键值对数量、持久化状态等重要信息的详细报告。可以指定返回特定的部分,例如:

bash

INFO memory  # 只返回内存相关的信息
INFO stats   # 返回统计信息
3.1.2 PING

功能:检测服务器是否在响应。

用法

PING

解释:返回 PONG 表示Redis正常工作。这个命令在排障时非常有用,可用来验证与Redis实例的连接状况。

3.2 监控命令

3.2.1 MONITOR

功能:实时监控Redis服务器接收到的所有请求。

用法

MONITOR

解释:开启后,Redis会打印出所有的命令和参数。这个命令会对性能有影响,请在必要时使用,并尽量在调试环境使用。

3.2.2 SLOWLOG

功能:获取慢查询日志。

用法

bash

SLOWLOG get <count>  # 获取最近的慢查询记录

解释:可以指定<count>参数,获取最近的慢查询记录,帮助识别执行时间过长的命令。命令会返回执行时间、日志ID、命令及参数等信息。

3.2.3 CLIENT LIST

功能:列出当前连接的所有客户端信息。

用法

CLIENT LIST

解释:该命令返回所有当前连接的客户端信息,包括ID、地址、状态、是否阻塞等。可以帮助运维人员分析连接状态和排除故障。

3.3 数据管理命令

3.3.1 FLUSHDB

功能:删除当前数据库中的所有键。

用法

FLUSHDB

解释:小心使用,这个命令会清空当前数据库的所有数据而不需要确认。如果想要删除所有数据库中的数据,可以使用 FLUSHALL

3.3.2 EXPIRE

功能:为指定键设置过期时间。

用法

EXPIRE key seconds

解释:设置指定键在seconds秒后过期。过期的键会被Redis自动删除,适用于存储临时数据的场景。

3.3.3 KEYS

功能:查找所有符合给定模式的键。

用法

KEYS *

解释:这个命令列出当前数据库中的所有键。需要注意的是,KEYS命令在数据量很大的情况下可能导致性能问题,使用时需慎重。

3.4 性能优化命令

3.4.1 CONFIG GET

功能:获取Redis的配置信息。

用法

CONFIG GET <parameter>

解释:返回指定配置参数的值,如果 <parameter> 为*,则返回所有配置参数(如:CONFIG GET *)。通过这个命令可以了解当前实例的一些配置,方便进行调整和优化。

3.4.2 CONFIG SET

功能:设置Redis的配置参数。

用法

CONFIG SET <parameter> <value>

解释:动态调整Redis配置参数。例如,可以使用此命令动态修改maxmemory配置。要注意,部分参数可能会在Redis重启后恢复为默认值,因此重要参数最好在配置文件中进行设置。

3.4.3 BGREWRITEAOF

功能:在后台重写AOF文件,减少AOF文件的体积。

用法

BGREWRITEAOF

解释:AOF文件在不断追加写操作的过程中会逐渐增大,使用BGREWRITEAOF命令可以重写AOF文件,从而回收磁盘空间,提升性能。

3.5 备份相关命令

3.5.1 SAVE

功能:在当前时间点进行RDB文件快照。

用法

SAVE

解释:阻塞当前线程并创建RDB快照文件。适用于需要手动创建数据快照的场景。

3.5.2 BGSAVE

功能:在后台异步保存RDB文件。

用法

BGSAVE

解释:不会阻塞当前客户端连接,适用于需要定期进行备份的场合。此命令会创建一个子进程来处理快照操作。

3.5.3 RESTORE

功能:从RDB快照恢复指定的key。

用法

bash

RESTORE key ttl serialized-value

解释:用于从防止数据丢失的备份中恢复特定的键。ttl参数用于设置恢复后键的过期时间,serialized-value是该key的序列化值。

结语

了解Redis的维护命令及其使用,可以有效提高运维效率,帮助运维人员及时识别和处理系统中的问题。定期使用这些命令进行监控和优化,有助于提高Redis实例的稳定性与性能

四、结语

Redis作为一个高效的内存数据库,在实际使用中难免会遇到各种问题。通过定期维护、性能监控、合理配置和问题分析,可以有效提升Redis的稳定性和性能。

相关文章:

Redis日常维护技巧与常见问题解决方案

Redis是一个开源的内存数据存储系统&#xff0c;广泛应用于缓存、消息队列、实时分析等场景。由于其高性能和持久化特性&#xff0c;越来越多的企业开始引入Redis。然而&#xff0c;要使Redis高效、稳定地运行&#xff0c;日常的维护和问题解决显得尤其重要。本文将分享一些Red…...

【Leetcode-Hot100】最小覆盖子串

题目 解答 想到使用双指针哈希表来实现&#xff0c;双指针的left和right控制实现可满足字符串。 class Solution(object):def minWindow(self, s, t):""":type s: str:type t: str:rtype: str"""len_s, len_t len(s), len(t)hash_map {}for…...

【Sequelize】关联模型和孤儿记录

一、关联模型的核心机制 1. 关联类型与组合规则 • 基础四类型&#xff1a; • hasOne&#xff1a;外键存储于目标模型&#xff08;如用户档案表存储用户ID&#xff09; • belongsTo&#xff1a;外键存储于源模型&#xff08;如订单表存储用户ID&#xff09; • hasMany&…...

系统分析师-第三遍-章节导图

导图要求&#xff1a; 第一章 绪论 第二章 数学与工程基础 导图要不偏瘫...

算法(ALGORITHMS)---- 关于阶乘

Everyday life is different,even with your state and mind!So if i have some new ways or logic to make a good Algorithms,I gonna post it and share with U guys! If there is anything error aboubt what I demonstrated,pls speak out on the comment,Thanks! 一.最初…...

电路(b站石群老师主讲,持续更新中...)

文章目录 第一章 电路模型和电路定律1.1电路和电路模型 第一章 电路模型和电路定律 第一章的重点&#xff1a; 1.电压、电流的参考方向 2.电阻元件和电源元件的特性 3.基尔霍夫定律&#xff08;KCL,KVL,&#xff09; KCL&#xff1a;基尔霍夫电流定律 KVL&#xff1a;基尔…...

Python multiprocessing模块Pool类介绍

multiprocessing.Pool 类是 Python 中用于并行处理任务的强大工具,它可以创建一个进程池,允许你在多个进程中并行执行任务,从而充分利用多核 CPU 的性能。下面为你总结 Pool 类的常用方法。 1. 创建进程池 from multiprocessing import Pool pool = Pool(processes=None)参…...

CCF CSP 第36次(2024.12)(1_移动_C++)

CCF CSP 第36次&#xff08;2024.12&#xff09;&#xff08;1_移动_C&#xff09; 解题思路&#xff1a;思路一&#xff1a; 代码实现代码实现&#xff08;思路一&#xff09;&#xff1a; 时间限制&#xff1a; 1.0 秒 空间限制&#xff1a; 512 MiB 原题链接 解题思路&…...

【教程】PyTorch多机多卡分布式训练的参数说明 | 附通用启动脚本

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 torchrun 一、什么是 torchrun 二、torchrun 的核心参数讲解 三、torchrun 会自动设置的环境变量 四、torchrun 启动过程举例 机器 A&#…...

九、自动化函数02

// 进阶版本的屏幕截图 void getScreenShot(String str) throws IOException {// ./src/test/image/ 存放图片路径// 屏幕截图SimpleDateFormat sim1 new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat sim2 new SimpleDateFormat("HHmmss");Str…...

构建批量论文格式修改系统:从内容识别到自动化处理

在学术研究和论文管理中,自动化处理论文格式是一个极具挑战性但非常有价值的任务。无论是提取论文的关键信息,还是批量修改格式,都需要一个强大的内容识别系统作为基础。本文将结合两份代码(paper_parser.py 和 paper_analyzer.py),深入分析它们如何实现论文内容的识别,…...

站台候车,好奇铁道旁的碎石(道砟)为何总是黄色的?

一、发现问题 同学们在站台等车时有没有发现&#xff0c;铁道旁的小石子很多都是黄色的&#xff0c;有部分为白色&#xff0c;像上图这样&#xff0c;这是为什么呢&#xff1f;是石头原生为黄色&#xff0c;还是因为其他原因变成了红黄色&#xff1f;是从灰白色变为了红黄色吗&…...

Oracle PL/SQL 中,异常(Exception)

在 Oracle PL/SQL 中&#xff0c;异常&#xff08;Exception&#xff09; 是处理运行时错误的机制&#xff0c;能够将错误逻辑与业务逻辑解耦&#xff0c;保证程序的健壮性和可维护性。以下从 原理 和 案例 两个方面详细解析 一、异常处理的核心原理 1. 异常触发机制 自动触发…...

OpenCV学习之获取图像所有点的坐标位置(二)

1.功能介绍 (1)使用openCV解析了.jpeg、.jpg、.png格式的图像文件,输出了图像的宽、高、通道数; (2)创建txt格式文件,保存图像中各像素点的rgba值。 2.环境介绍 操作系统:window10 开发语言:visual studio 2015 c++ 3.功能实现过程 3.1环境设置 (1)打开Vs2015…...

代码随想录算法训练营Day30 | 01背包问题(卡码网46. 携带研究材料)、Leetcode416.分割等和子集

代码随想录算法训练营Day30 | 01背包问题&#xff08;卡码网46. 携带研究材料&#xff09;、Leetcode416.分割等和子集 一、01背包问题 相关题目&#xff1a;卡码网46. 携带研究材料 文档讲解&#xff1a;01背包问题&#xff08;二维&#xff09;、01背包问题&#xff08;一维…...

opencv 形态学变换

形态学变换 1. 核2.腐蚀&#xff08;cv2.erode&#xff09;3. 膨胀&#xff08;cv2.dilate&#xff09;4. 开运算&#xff08;cv.MORPH_OPEN&#xff09;5. 闭运算&#xff08;cv2.MORPH_CLOSE&#xff09;6. 礼帽运算&#xff08;找出增多的白色区域&#xff09;7. 黑帽运算8.…...

视频设备轨迹回放平台EasyCVR打造水库大坝智慧安防视频监控智能分析方案

一、项目背景 水库安全度汛是全国防汛抗洪工作的重点&#xff0c;水库监控系统对保障水库安全、及时排险意义重大。多数水库站点分散、位置偏&#xff0c;地形复杂&#xff0c;与监控中心相隔较远。​ 传统有线监控系统成本高、工期长&#xff0c;遇山河等阻碍时布线困难&…...

使用 LLaMA-Factory 对 DeepSeek R1进行微调教程

如本教程有问题&#xff0c;感谢大家在评论区指出。 如操作过程中遇到解决不了的问题&#xff0c;可以在评论区提问&#xff0c;作者看到了会回复。 微调简介 模型微调通过在特定任务数据集上继续训练预训练模型来进行&#xff0c;使得模型能够学习到与任务相关的特定领域知识…...

【Kubernetes基础--Pod深入理解】--查阅笔记2

深入理解Pod 为什么要有个Pod1. 容器协作与资源共享2. 简化调度和资源管理3. 设计模式支持 Pod 基本用法Pod 容器共享 VolumePod 的配置管理ConfigMap 概述创建 ConfigMap 资源对象在 Pod 中使用 ConfigMap使用 ConfigMap 的限制条件 为什么要有个Pod Pod 的引入并非技术冗余&…...

C语言进阶之自定义类型:结构体,枚举,联合

结构体 结构体类型的声明 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 结构的声明 struct tag{member-list;}variable-list;例如描述一个学生&#xff1a; struct Stu{char name[20];//名字int age;//年龄ch…...

深入解析C++引用:安全高效的别名机制及其与指针的对比

一、引用的核心概念 1.1 引用定义 引用&#xff08;Reference&#xff09;是C为变量创建的别名&#xff0c;通过&符号声明。其核心特性&#xff1a; 指针适用场景&#xff1a; 现代C黄金法则&#xff1a; "引用是指针的安全马甲&#xff0c;而智能指针是带着安全帽的…...

【rdma通信名词概念】

rdma通信名词概念 1.在rdma网卡中&#xff0c;QP(SQ和RQ)、CQ、EQ和SQR的含义是什么以及功能是什么&#xff1f;2 PCIe中的MSI-X中断机制&#xff1f; 1.在rdma网卡中&#xff0c;QP(SQ和RQ)、CQ、EQ和SQR的含义是什么以及功能是什么&#xff1f; QP&#xff1a;queue pair&am…...

Mysql主从复制有哪些方式

MySQL 主从复制主要有以下几种方式&#xff0c;根据不同的分类标准&#xff08;如同步机制、数据复制格式、拓扑结构等&#xff09;可以分为&#xff1a; 一、按同步机制分类 1. 异步复制 (Asynchronous Replication) 原理&#xff1a;主库提交事务后&#xff0c;立即返回给客…...

Vue工程化开发脚手架Vue CLI

开发Vue有两种方式 核心包传统开发模式&#xff1a;基于html / css / js 文件&#xff0c;直接引入核心包&#xff0c;开发 Vue。工程化开发模式&#xff1a;基于构建工具&#xff08;例如&#xff1a;webpack&#xff09;的环境中开发Vue。 脚手架Vue CLI Vue CLl 是 Vue 官方…...

MySQL函数运算

1.日期时间函数 查询当前日期时间的函数(使用函数需要加select)&#xff1a; curdate() 查看当前数据库的日期部分&#xff08;年月日&#xff09; SELECT CURDATE(); curtime() 查看当前数据库的时间部分&#xff08;时分秒&#xff09; SELECT CURTIME(); now() 查看当前…...

Spring如何解决项目中的循环依赖问题?

目录 什么是循环依赖&#xff1f; 如何解决&#xff1f; 采用两级缓存解决 需要AOP的Bean的循环依赖问题&#xff1f; 三级缓存解决 什么是循环依赖&#xff1f; 循环依赖就是Spring在初始化Bean时两个不同的Bean你依赖我&#xff0c;我依赖你的情况 例如A依赖B&#xf…...

【Pandas】pandas DataFrame itertuples

Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前几行DataFrame.at快速访问和修改 DataFrame 中单个值的方法DataFrame.iat快速访问和修改 DataFrame 中单个值的方法DataFrame.loc用于基于标签&#xff08;行标签和列标签&#…...

正则表达式反向引用的综合应用魔法:从重复文本到简洁表达的蜕变

“我....我要....学学学学....编程 java!” —— 这类“重复唠叨”的文本是否让你在清洗数据时头疼不已&#xff1f; 本文将带你一步步掌握正则表达式中的反向引用技术&#xff0c;并结合 Java 实现一个中文文本去重与清洗的实用工具。 结合经典的结巴实例。如何高效地将这样的…...

ESP32驱动读取ADXL345三轴加速度传感器实时数据

ESP32读取ADXL345三轴加速度传感器实时数据 ADXL345三轴加速度传感器简介ADXL345模块原理图与引脚说明ESP32读取ADXL345程序实验结果 ADXL345三轴加速度传感器简介 ADXL345是一款由Analog Devices公司推出的三轴数字加速度计&#xff0c;分辨率高(13位)&#xff0c;测量范围达…...

C++高级3 绑定器

绑定器 C11从Boost库中引入了bind绑定器和function函数对象机制 绑定器二元函数对象 一元函数对象 bind1st 绑定第一个 bind2nd 绑定第二个 #include <iostream> #include <memory> #include <vector> #include <functional> #include <ctime…...

Android 接口定义语言 (AIDL)

目录 1. 本地进程调用(同一进程内)2. 远程进程调用(跨进程)3 `oneway` 关键字用于修改远程调用的行为Android 接口定义语言 (AIDL) 与其他 IDL 类似: 你可以利用它定义客户端与服务均认可的编程接口,以便二者使用进程间通信 (IPC) 进行相互通信。 在 Android 上,一个进…...

【android bluetooth 案例分析 02】【CarLink 详解2】【Carlink无配对连接机制深度解析】

Carlink无配对连接机制深度解析&#xff08;首次/二次免鉴权原理&#xff09; 一、核心结论&#xff1a;Carlink通过SDK层协议设计完全绕过传统蓝牙配对 传统蓝牙配对&#xff08;Pairing&#xff09;依赖协议栈生成长期绑定密钥&#xff08;LTK&#xff09;&#xff0c;而Car…...

ubuntu 2204 安装 vcs 2023

系统 : Ubuntu 22.04.1 LTS vcs 软件 : 有已经安装好的软件(位于redhat8.10),没找到安装包 . 安装好的目录文件 占用 94 G注意 : 该虚拟机(包括安装好的软件)有114G,其中安装好的目录文件占用94GB // 即 我要把 这里 已经安装好的软件(包括scl/vcs/verdi 和其他软件) 在 …...

Spring Boot循环依赖全解析:原理、解决方案与最佳实践

&#x1f6a8; Spring Boot循环依赖全解析&#xff1a;原理、解决方案与最佳实践 #SpringBoot核心 #依赖注入 #设计模式 #性能优化 一、循环依赖的本质与危害 1.1 什么是循环依赖&#xff1f; 循环依赖指两个或多个Bean相互直接或间接引用&#xff0c;形成闭环依赖关系。 典…...

按键精灵安卓/ios脚本辅助工具开发教程:如何把界面配置保存到服务器

在使用按键精灵工具辅助的时候&#xff0c;多配置的情况下&#xff0c;如果保存现有的配置&#xff0c;并且读取&#xff0c;尤其是游戏中多种任务并行情况下&#xff0c;更是需要界面进行保存&#xff0c;简单分享来自紫猫插件的配置保存服务器写法。 界面例子&#xff1a; …...

【厦门大学】大模型概念、技术与应用实践

大模型概念、技术与应用实践 引言一、人工智能发展简史1.1 图灵测试的提出1.2 人工智能的诞生1.3 人工智能的发展阶段 二、大模型的核心概念2.1 大模型的定义2.2 大模型的特点 三、大模型的发展历程3.1 萌芽期&#xff08;1950-2005&#xff09;3.2 沉淀期&#xff08;2006-201…...

The Strict Teacher (Hard Version) 去除无效的干扰!巧妙转化

文章目录 The Strict Teacher (Hard Version) 思考问题&#xff01;那么多个人抓一个人&#xff0c;是否是每一个人都是对于最优策略的答案是有贡献的&#xff1f;答案是否定的&#xff0c;其实问题可以简化为三种情况&#xff1a; 所有的老师都在大卫的右边&#xff0c;…...

Linux中信号的保存

一、认识信号的其他相关概念 实际执行信号的处理动作称为信号递达 信号从产生到递达之间的状态&#xff0c;称为信号未决 进程可以选择阻塞某个信号 被阻塞的信号产生时将保持在未决状态&#xff0c;直到进程解除对该信号的阻塞&#xff0c;才进行递达的动作 阻塞和忽略是不同的…...

2024ICPC 南京 B 生日礼物

题目&#xff1a; 格莱美的生日快到了&#xff0c;她从朋友那里得到了一个序列 A 作为礼物。这个序列只有 0 、 1 和 2 。格莱美认为这个数列太长了&#xff0c;因此她决定修改 A 使其更短。 从形式上看&#xff0c;格莱美可以执行任意数量的运算。每次她都可以从以下三种运算…...

扫地机器人进化史:从人工智障到家政王者

1996年&#xff0c;瑞典伊莱克斯推出的"三叶虫"开启了扫地机器人的纪元。这款售价2000美元的"初代机"工作时像喝醉的水手&#xff0c;随机碰撞的清扫方式让用户直呼"买了个寂寞"。谁能想到&#xff0c;这个当初被戏称为"人工智障"的发…...

C 语 言 --- 数 据 类 型 的 存 储

C 语 言 --- 数 据 类 型 的 存 储 空 类 型大 小 端 存 储大 端 存 储 --- 正 着 放&#xff08;从 小 到 大&#xff09;小 端 存 储 --- 倒 着 放&#xff08;从 大 到 小&#xff09; 浮 点 型 在 内 存 中 的 存 储总结 &#x1f4bb;作 者 简 介&#xff1a;曾 与 你 一 …...

3.8 字符串的常用函数

重点&#xff1a;字符串的常用函数 #1.测试转换大小写 lower:大写->小写 upper&#xff1a;小写->大写 swapcase&#xff1a;自动将大写转小写小写转大写 print("ABC".lower()) #abcprint("abc".upper()) #ABCprint…...

事件触发控制与响应驱动控制的定义、种类及区别

一、定义 事件触发控制&#xff08;Event-Triggered Control, ETC&#xff09; 事件触发控制是一种基于动态条件触发的控制策略&#xff0c;其核心在于通过预设的事件触发条件&#xff08;如系统状态误差超过阈值、特定信号到达等&#xff09;来决定何时更新控制信号或进行通信…...

Android离屏渲染

写在前面 与iOS同事聊天时聊到圆角会使用离屏渲染的方式绘制&#xff0c;影响性能&#xff1b;Android上有没有不知道&#xff0c;学习了一下整理了这篇文章。 Android 圆角与离屏渲染&#xff08;Offscreen Rendering&#xff09; 一、什么是离屏渲染&#xff1f; 离屏渲染…...

35. 搜索插入位置

给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2示例 2: 输入:…...

网络的起点:深入解析计算机网络中的网络接口层

一、什么是网络接口层&#xff1f; 计算机网络的 网络接口层&#xff08;Network Interface Layer&#xff09;&#xff0c;在 TCP/IP模型 中处于最底层&#xff0c;负责将数据从计算机传输到物理网络媒介&#xff0c;并在此基础上确保数据的正确传输。它位于数据链路层和物理…...

智能指针(内存泄漏)

一、RALL RALL的核心概念&#xff1a; 资源获取即初始化&#xff1a;资源的分配与对象的初始化绑定在一起&#xff0c;资源的释放与对象的销毁绑定在一起。 不是所有智能指针都用这个思想 可以有效避免死锁问题 二、智能指针 通过将new出的对象教给有生命周期的对象处理。 在…...

秒杀秒抢系统开发:飞算 JavaAI 工具如何应对高并发难题?

秒杀、秒抢活动已成为电商促销与吸引流量的常用手段。然而&#xff0c;此类活动所带来的高并发访问&#xff0c;对系统性能构成了巨大挑战。如何确保系统在高并发场景下依然能够稳定、高效运行&#xff0c;成为开发者亟待解决的关键问题。飞算 JavaAI 工具作为一款功能强大的开…...

AI在代码Review中的应用试验与推广策略

一、引言 在软件开发领域&#xff0c;代码审查&#xff08;Code Review&#xff09;是保障代码质量的关键环节。传统的代码审查依赖人工&#xff0c;不仅效率低下&#xff0c;而且容易出现疏漏。随着人工智能技术的发展&#xff0c;AI在代码审查中的应用逐渐成为可能。近期&am…...

自定义Jackson序列化和反序列化

为什么需要自定义Jackson序列化和反序列化?下面举个例子看看就知道了 问题描述 由于 Spring Boot 内置使用的就是 Jackson JSON 框架&#xff0c;所以&#xff0c;无需引入新的依赖&#xff0c;仅需添加自定义配置类即可&#xff0c;让其支持新的日期 API Controller层的代码…...