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

Redis:查询是否包含某个字符/字符串之二

上一篇:Redis:查询是否包含某个字符/字符串之一-CSDN博客

下一篇:Redis:查询是否包含某个字符/字符串之三-CSDN博客

摘要:

要查询数据,就需要遍历key,遍历value,其中包含存储等辅助功能

正文:

一、Python 遍历Redis所有key,并判断value中是否包涵每个字符串

在Python中遍历Redis的所有key,并检查每个key对应的value是否包含特定的字符串,可以使用redis-py库来完成。但是,需要注意的是,直接遍历Redis中的所有key(使用KEYS *)在key数量非常多的情况下可能会导致Redis服务阻塞,因此推荐使用SCAN命令来迭代地遍历key。

以下是一个使用redis-py库和SCAN命令来遍历Redis中所有key,并检查每个key的value是否包含特定字符串的示例代码:

import redis  # 连接到Redis服务器  
r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True)  # 要搜索的字符串列表  
search_strings = ['example1', 'example2', 'another_string']  # 使用SCAN命令迭代遍历Redis中的所有key  
cursor = '0'  
while cursor != 0:  cursor, keys = r.scan(cursor=cursor, match='*', count=100)  for key in keys:  # 获取key对应的value  value = r.get(key)  if value:  # 确保value不是None  # 检查value是否包含任何一个search_strings中的字符串  for search_string in search_strings:  if search_string in value:  print(f"Key: {key}, Value: {value}, contains: {search_string}")  break  # 如果已经找到一个匹配的字符串,可以跳出内层循环  # 注意:上面的代码假设所有value都是字符串。如果value是其他类型(如列表、集合等),则需要相应地调整检查逻辑。

请注意以下几点:

  1. 连接Redis:确保你已经安装了redis-py库,并且正确配置了Redis服务器的连接信息。

  2. SCAN命令:这里使用了SCAN命令来迭代地遍历key,而不是KEYS *count参数指定了每次迭代返回的key的最大数量,但实际返回的key数量可能会更少。

  3. 检查value:示例代码假设所有的value都是字符串类型。如果value是其他类型(如列表、集合、哈希等),则需要使用相应的Redis命令来获取和检查这些类型的数据。

  4. 性能考虑:遍历Redis中的所有key并检查它们的value是一个资源密集型操作,特别是在key数量很多的情况下。请确保这种操作不会在生产环境中对Redis性能造成不利影响。

  5. 错误处理:示例代码中没有包含错误处理逻辑。在实际应用中,你可能需要添加适当的错误处理来捕获和处理可能发生的异常,如网络问题、Redis服务器不可用等。

二、需要区分Redis返回的不同数据结构进行后续的遍历查询

在Redis中,不同的数据结构(如字符串、列表、集合、有序集合、哈希表)需要使用不同的命令来遍历或查询。当你从Redis获取数据时,首先你需要知道这个数据是以什么数据结构存储的,然后才能使用相应的命令来进行遍历或查询。

以下是一些基本的数据结构和它们对应的遍历/查询方法:

  1. 字符串(String)
    • 字符串是Redis中最基本的数据类型,但它本身不支持遍历,因为它只存储一个值。但是,你可以使用GET命令来获取这个值,然后根据值的类型(如果它是JSON、XML或其他可解析的格式)在客户端进行解析和遍历。
  2. 列表(List)
    • 使用LRANGE key start stop命令可以遍历列表中的元素。startstop是索引值,其中0表示列表的第一个元素。
  3. 集合(Set)
    • 使用SMEMBERS key命令可以获取集合中的所有元素,然后你可以在客户端遍历这些元素。
  4. 有序集合(Sorted Set)
    • 使用ZRANGE key start stop [WITHSCORES]命令可以遍历有序集合中的元素及其分数。如果你只关心元素,可以省略WITHSCORES选项。
  5. 哈希表(Hash)
    • 哈希表存储键值对,但你不能直接遍历哈希表中的所有值或键。你需要使用HGETALL key来获取哈希表中的所有字段和值,然后在客户端遍历这个返回的列表(通常是一个字段名-值对的列表)。

在Python中,你可以使用redis-py库来与Redis进行交互,并根据返回的数据类型进行相应的处理。以下是一个简单的示例,展示了如何根据Redis返回的不同数据结构进行遍历查询:

import redis  # 连接到Redis  
r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True)  # 假设我们知道key的数据类型  # 列表  
list_key = 'mylist'  
for item in r.lrange(list_key, 0, -1):  # 遍历整个列表,-1 表示最后一个元素  print(item)  # 集合  
set_key = 'myset'  
for item in r.smembers(set_key):  print(item)  # 有序集合  
zset_key = 'myzset'  
for item, score in r.zrange(zset_key, 0, -1, withscores=True):  print(f"Item: {item}, Score: {score}")  # 哈希表  
hash_key = 'myhash'  
for key, value in r.hgetall(hash_key).items():  print(f"Field: {key}, Value: {value}")  # 注意:对于字符串,你通常不会遍历它,而是直接获取并使用它  
string_key = 'mystring'  
value = r.get(string_key)  
print(value)  # 或者根据值的类型进行解析和遍历

请注意,上述代码中的decode_responses=True参数确保从Redis返回的数据被解码为Python字符串(而不是字节对象)。这对于处理文本数据非常有用。如果你的数据是二进制数据,你可能需要省略这个参数或相应地处理返回的数据。

在Redis中,常见的数据结构包括字符串(String)、列表(List)、集合(Set)、有序集合(Sorted Set)、哈希表(Hash)等。当从Redis获取数据时,你首先需要知道存储该数据的key对应的数据类型,然后才能使用适当的方法来遍历或查询该数据。

以下是一个Python示例,该示例使用redis-py库连接到Redis服务器,并根据不同的数据类型执行不同的遍历或查询操作:

import redis  # 连接到Redis服务器  
r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True)  # 假设我们有以下key和它们对应的数据类型  
# key1: 字符串  
# key2: 列表  
# key3: 集合  
# key4: 有序集合  
# key5: 哈希表  # 函数:根据key的数据类型执行不同的操作  
def handle_data_by_type(key):  # 获取key的类型  data_type = r.type(key)  if data_type == 'string':  # 对于字符串,直接获取并打印  value = r.get(key)  print(f"String: {value}")  elif data_type == 'list':  # 对于列表,遍历并打印每个元素  values = r.lrange(key, 0, -1)  # 获取列表中的所有元素  for value in values:  print(f"List Element: {value}")  elif data_type == 'set':  # 对于集合,遍历并打印每个元素(注意集合是无序的)  members = r.smembers(key)  for member in members:  print(f"Set Member: {member}")  elif data_type == 'zset':  # 对于有序集合,遍历并打印每个元素及其分数  for member, score in r.zscan_iter(key):  print(f"Sorted Set Member: {member}, Score: {score}")  elif data_type == 'hash':  # 对于哈希表,遍历并打印每个字段及其值  for field in r.hkeys(key):  value = r.hget(key, field)  print(f"Hash Field: {field}, Value: {value}")  else:  print(f"Unknown data type for key: {key}")  # 示例:处理不同的key  
handle_data_by_type('key1')  # 假设key1是字符串  
handle_data_by_type('key2')  # 假设key2是列表  
handle_data_by_type('key3')  # 假设key3是集合  
handle_data_by_type('key4')  # 假设key4是有序集合  
handle_data_by_type('key5')  # 假设key5是哈希表  # 注意:上面的'key1'到'key5'及其数据类型只是示例,你需要根据实际情况替换它们

请注意以下几点:

  1. 我使用了r.type(key)来获取key的数据类型。
  2. 对于列表(List),我使用了r.lrange(key, 0, -1)来获取所有元素。
  3. 对于集合(Set),我使用了r.smembers(key)来获取所有成员。
  4. 对于有序集合(Sorted Set),我使用了r.zscan_iter(key)来迭代成员和它们的分数。这是因为zscan_iterzrange更高效,特别是当有序集合包含大量元素时。但是,请注意zscan_iter返回的是元组的迭代器,其中每个元组包含(成员,分数)。
  5. 对于哈希表(Hash),我使用了r.hkeys(key)来获取所有字段,然后对每个字段使用r.hget(key, field)来获取其值。

请根据你的实际需求调整key和数据结构。

三、将打印结果追加打印到txt

在Python中,如果你想要将打印结果(通常是输出到控制台的文本)追加到txt文件中,你可以使用文件操作来实现这一点。以下是一个简单的示例,展示了如何将打印结果追加到txt文件中:

# 打开(或创建)一个文件用于追加内容,如果文件不存在则创建  
with open('output.txt', 'a') as file:  # 假设这是你想要打印到控制台的文本  text_to_print = "Hello, World!\n"  # 首先,你可以将文本打印到控制台  print(text_to_print, end='')  # 注意end=''是为了避免在控制台输出额外的换行符  # 然后,将相同的文本写入(追加)到文件中  file.write(text_to_print)  # 注意:使用with语句可以确保文件在操作完成后正确关闭

在这个例子中,open函数以追加模式('a')打开(或创建)了一个名为output.txt的文件。这意味着如果文件已经存在,新的内容将被追加到文件的末尾;如果文件不存在,将创建一个新文件。

print函数用于将文本输出到控制台,而file.write方法则用于将文本写入文件。注意,print函数默认会在文本末尾添加一个换行符,但在这个例子中,我们通过设置end=''来避免在控制台输出中添加额外的换行符,以保持与控制台输出的一致性(如果你希望控制台输出和文件输出完全一致,包括换行符的话,可以省略end='')。

另外,使用with语句可以确保文件在操作完成后被正确关闭,即使在写入文件时发生异常也是如此。这是一种处理文件时推荐的做法。

四、redis r.scan 自动跳过非utf-8的数据

在 Python 中使用 Redis 时,r.scan() 方法通常用于迭代地遍历 Redis 数据库中的键,但它本身并不直接处理数据的编码问题。r.scan() 返回的是键的列表,这些键是字节串(bytes)类型,而不是直接解码为字符串。因此,当你遇到非 UTF-8 编码的数据时,问题通常发生在尝试将这些字节串解码为字符串时。

要自动跳过非 UTF-8 编码的数据,你需要在迭代 r.scan() 返回的键时,对每个键进行解码尝试,并捕获可能发生的 UnicodeDecodeError 异常。如果捕获到该异常,则可以跳过该键或采取其他适当的措施。

以下是一个示例代码,展示了如何在迭代 Redis 键时跳过非 UTF-8 编码的键:

import redis  # 连接到 Redis  
r = redis.Redis(host='localhost', port=6379, db=0)  # 使用 scan 迭代键  
cursor = '0'  
while cursor != 0:  cursor, keys = r.scan(cursor=cursor, match='*', count=10)  for key in keys:  try:  # 尝试将键解码为 UTF-8 字符串  decoded_key = key.decode('utf-8')  # 如果成功解码,则处理该键(这里只是打印出来)  print(decoded_key)  except UnicodeDecodeError:  # 如果解码失败(即不是 UTF-8 编码),则跳过该键  print(f"跳过非 UTF-8 编码的键: {key}")  # 此时,所有非 UTF-8 编码的键都已被跳过,程序继续执行

在这个示例中,r.scan() 方法用于迭代 Redis 中的键。对于每个键,我们都尝试使用 .decode('utf-8') 方法将其从字节串解码为字符串。如果解码成功,我们就处理该键(在这个例子中是打印出来)。如果解码失败(即捕获到 UnicodeDecodeError 异常),我们就打印一条消息表示跳过了该键,并继续迭代下一个键。

请注意,这种方法假设你只对 UTF-8 编码的键感兴趣。如果你的 Redis 数据库中存储了多种编码的键,并且你需要根据键的编码来执行不同的操作,你可能需要更复杂的逻辑来确定每个键的编码并相应地处理它们。然而,在大多数情况下,将 Redis 中的键统一为 UTF-8 编码是一个好主意,这可以避免在处理数据时遇到编码问题。

小结

这里面我还有一个问题没有解决,欢迎大家交流

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xac in position 0: invalid start byte

--end---

相关文章:

Redis:查询是否包含某个字符/字符串之二

上一篇:Redis:查询是否包含某个字符/字符串之一-CSDN博客 下一篇:Redis:查询是否包含某个字符/字符串之三-CSDN博客 摘要: 要查询数据,就需要遍历key,遍历value,其中包含存储等辅助…...

算法笔记|Day23贪心算法

算法笔记|Day23贪心算法 ☆☆☆☆☆leetcode 455.分发饼干题目分析代码 ☆☆☆☆☆leetcode 376. 摆动序列题目分析代码 ☆☆☆☆☆leetcode 53. 最大子序和题目分析代码 ☆☆☆☆☆leetcode 455.分发饼干 题目链接:leetcode 455.分发饼干 题目分析 优先考虑饼干…...

[星瞳科技]OpenMV使用时有哪些常见错误和解决办法?

常见代码错误 ImportError:no module named xxx 这个错误是Import错误,没有stepper这个模块。 原因: 你没有把stepper.py这个文件拖到你的板子里。见:模块的使用 拖过去之后,需要重启,使模块生效 MemoryError:FB …...

深度学习入门(二):PyTorch使用-张量的类型转换,拼接操作,索引操作,形状操作

目录 1. 张量类型转换 1.1 张量转换为 numpy 数组 1.2 numpy 转换为张量 1.3 标量张量和数字的转换 1.4 小节 2. 张量拼接操作 2.1 torch.cat 函数的使用 2.2 torch.stack 函数的使用 2.3 小节 3. 张量索引操作 3.1 简单行、列索引 3.2 列表索引 3.3 范围索引 3.…...

使用C#禁止Windows系统插入U盘(除鼠标键盘以外的USB设备)

试用网上成品的禁用U盘的相关软件,发现使用固态硬盘改装的U盘以及手机等设备,无法被禁止,无奈下,自己使用C#手搓了一个。 基本逻辑: 开机自启;启动时,修改注册表,禁止系统插入USB存…...

18. 基于ES实战海量数据检索

18. 基于ES实战海量数据检索 一. 概述二. Elasticsearch 全文检索1. 分布式搜索引擎2. 搜索引擎种类3. 倒排索引三. elastic使用1. 官网介绍2. docker安装3. elasticsearch-head工具4. 分词与内置分词4.1 内置分词器(了解即可)4.2 `IK`中文分词器三. 整合SpringCloud1. 基础配置…...

SpringBoot和Redis的交互数据操作以及Redis的持久化/删除策略和缓存问题

目录 一、SpringBoot和Redis/MySQL的数据交互 二、Redis的持久化 1、持久化过程保存什么 2、RDB方式 (1)RDB手动 (2)RDB自动 (3)RDB的优点 (4)RDB缺点 3、AOF方式 &#…...

Butterworth filter的运行原理

想象一下,你正在录制一个舞蹈表演的视频,但在录制过程中,摄像机由于风的影响稍微晃动了一下。现在,录像中的舞者看起来不再那么流畅,动作变得有点颤抖。你希望能让舞者的动作重新看起来平滑和优雅,这时你就…...

掌握SQL的威力:批量更新与删除的艺术

标题:掌握SQL的威力:批量更新与删除的艺术 在数据库管理中,批量更新(UPDATE)和删除(DELETE)操作是常见的需求,特别是在处理大量数据时。SQL作为数据库查询和操作的标准语言&#xf…...

《新一代数据可视化分析工具应用指南》正式开放下载

2024年8月12日,由DataEase开源项目组编写的《新一代数据可视化分析工具应用指南》白皮书正式面向广大用户开放下载。 《新一代数据可视化分析工具应用指南》是DataEase开源项目组为了支持企业落地并推广BI工具、推进企业数据可视化建设而编著的指导手册。通过本白皮…...

数据结构与算法——BFS(广度优先搜索)

算法介绍: 广度优先搜索(Breadth-First Search,简称BFS)是一种遍历或搜索树和图的算法,也称为宽度优先搜索,BFS算法从图的某个节点开始,依次对其所有相邻节点进行探索和遍历,然后再…...

登录 k8s-Dashboard 显示 Your connection is not private

文章目录 一、背景二、解决方案 一、背景 部署好 kubernetes-Dashboard 后使用 master节点的 ipport 登录 Dashboard 显示 Your connection is not private 无论是 Edge 还是 Google Chrome 都是这样的情况 二、解决方案 点击网页空白处,英文输入法输入&#xf…...

【Bifrost】ubuntu24.04 远程构建及clion设置编码风格google

Bifrost 构建通过clion 远程到ubuntu24.04 构建感觉是不认识这种写法,这种至少是c++11 fix : 修改absl 的构建cmakelist,明确c++17 好像还是不行error: ‘uint8_t’ was not declared in this scope加入:#include <stdint.h>可以解决一部分。那么,这种呢?/home/zha…...

批量查询全国快递单号:高效追踪物流信息

在日常生活和工作中&#xff0c;我们经常会遇到需要查询多个快递单号物流信息的情况。如果手动逐一查询&#xff0c;不仅效率低下&#xff0c;而且容易出错。为了解决这个问题&#xff0c;我们可以借助固乔科技推出的【固乔快递查询助手】软件&#xff0c;轻松实现全国快递的批…...

DVWA | CSRF(LowMedium)攻击的渗透实践

目录 概述 Low Medium 概述 CSRF&#xff08;Cross-Site Request Forgery&#xff0c;跨站请求伪造&#xff09; 是一种网络攻击方式。 通过伪造当前用户的行为&#xff0c;让目标服务器误以为请求由当前用户发起&#xff0c;并利用当前用户权限实现业务请求伪造。 例如&a…...

Tmagic-editor低代码底层拖拽库Moveable示例学习

在前面咱们的自研低代码海报制作平台学习分享计划中分享了自己开发的基本拖拽组件&#xff0c;也只是做了最简单的基本实现。真要写产品&#xff0c;更多还是依赖相关的开源优秀库。 文章目录 参考基本拖拽基本缩放基本Scalable基本旋转基于原点的拖拽和旋转关于练习源码 参考 …...

公开测评:文件防泄密系统哪家好|4款文件防泄密软件推荐

在文件防泄密系统领域&#xff0c;有多款软件以其高效、安全和全面的功能脱颖而出&#xff0c;为企业数据保护提供了有力支持。以下是四款值得推荐的文件防泄密软件&#xff0c;它们各具特色&#xff0c;能够满足不同企业的数据安全需求。 1. 安企神软件 7天试用版https://wor…...

【wiki知识库】09.欢迎页面添加(统计浏览量)Vue修改

目录 ​编辑 一、今日目标 二、新增the-welcome组件 2.1 template 2.2 script 2.2.1 getStatistic 2.2.2 get30DayStatistic 一、今日目标 上篇文章链接&#xff1a;【wiki知识库】08.添加用户登录功能--前端Vue部分修改-CSDN博客 今天就要实现最后的东西了&#xff0c…...

ui自动化难点

位置坐标&#xff1a;可以通过滑动等方式实现 颜色显示&#xff1a;UIAuto.DEV (devsleep.com) --此工具可以解决很多属性上无法解决的问题 原理&#xff1a; 对系统控件的选择和点击实现该方法...

静态路由与默认路由和实验以及ARP工作原理

目录 1.静态路由和默认路由 1.1 静态路由 1.2 默认路由 1.3 主要区别总结 2.实验 2.1 实验 2.1.1 实验top 2.1.2 实验要求 2.2 实验配置 2.2.1 ip信息配置 2.2.2 配置静态 2.2.3配置默认 2.3 实验结果查看 3.为什么第一个ping会显示丢包&#xff1f; 3.1 ARP 工…...

美国洛杉矶大带宽服务器的运维与监控

美国洛杉矶的大带宽服务器因其优越的地理位置、高速的网络连接以及充足的带宽资源&#xff0c;在全球范围内享有很高的声誉。为了确保这些服务器的稳定运行和高效服务&#xff0c;运维与监控工作显得尤为重要。以下是一些关于美国洛杉矶大带宽服务器运维与监控方面的科普内容。…...

AtCoder Beginner Contest 367 A~D

本期封面原图 画师えびら A - Shout Everyday 题意 b点睡觉c点起床&#xff0c;问你a点是不是醒着的 思路 直接判断即可&#xff0c;注意处理跨天的情况 代码 #include <bits/stdc.h> #define mod 998244353 using namespace std; typedef long long ll; typedef …...

oracle 保留两位小数

在Oracle数据库中&#xff0c;保留两位小数可以通过多种函数实现&#xff0c;主要包括ROUND、TRUNC和TO_CHAR函数。每种函数都有其特定的使用场景和效果。 1. ROUND函数 ROUND函数用于对数值进行四舍五入操作&#xff0c;保留指定的小数位数。其基本语法为&#xff1a; ROUN…...

Aop切面技术之存储用户信息

一、背景 在我们日常项目中&#xff0c;常常会将用户的认证信息存入缓存中&#xff0c;方便我们在程序执行中&#xff0c;进行获取用户信息。本篇文章主要是介绍使用自定义注解和AOP切面技术进行实现&#xff0c;这也也是非常容易使用的。 二、代码详解 2.1 自定义注解 定义…...

FreeBSD 针对OpenSSH 高危漏洞发布紧急补丁

近日&#xff0c;FreeBSD 项目的维护者针对OpenSSH 高危漏洞发布了紧急补丁。该漏洞被追踪为 CVE-2024-7589&#xff0c;CVSS 得分为 7.4&#xff08;最高分为 10.0&#xff09;。通过利用该漏洞&#xff0c;黑客能够在权限提升的情况下远程执行任意代码。 根据上周发布的一份…...

【C语言小项目】五子棋游戏

目录 前言 一、游戏规则 1.功能分析 2.玩法分析 3.胜负判定条件 二、游戏实现思路 三、代码实现与函数封装 1.项目文件创建 2.头文件说明 3.函数封装 1&#xff09;菜单实现 2&#xff09;进度条实现 3&#xff09;main函数实现 4&#xff09;Game函数 5&#xff0…...

基于Java语言的能源管理系统-水电气热油数据采集系统

基于Java语言的能源管理系统-水电气热油数据采集系统 介绍 适用于高能耗企业、建筑、工厂、园区的水、电、气、热、油、空压机等能源数据采集、分析、报表&#xff1b; 基于SpringCloud的能源管理系统-能源管理平台源码-能源在线监测平台-双碳平台源码-SpringCloud全家桶-能管…...

人工智能在肿瘤亚型分类领域的研究进展|顶刊速递·24-08-13

小罗碎碎念 文献日推主题&#xff1a;人工智能在肿瘤亚型分类领域的研究进展 昨天晚上在研究鼻咽癌的病理学诊断指南&#xff0c;看到了下面这段话的时候&#xff0c;我问了自己一个问题——通过AI识别出肿瘤亚型的根本目的是什么&#xff1f;可以衔接哪些具体的下游任务&#…...

Taro+Vue 创建微信小程序

TaroVue 创建微信小程序 一、全局安装 tarojs/cli二、项目初始化三、现在去启动项目吧 一、全局安装 tarojs/cli npm install -g tarojs/cli //安装 npm info tarojs/cli //查看安装信息 如果正常显示版本说明成功了&#xff0c;就直接跳到第二步吧官网说&#xff1a;…...

智能安全守护,寺庙安全用电解决方案

在四川省蓬溪县城北&#xff0c;高峰山以其千年的历史沉淀和独特的文化风貌&#xff0c;默默诉说着道教与佛教交融的传奇。然而&#xff0c;2017年5月31日凌晨的一声巨响&#xff0c;打破了这里的宁静&#xff0c;一场突如其来的大火&#xff0c;让这座承载着无数信徒信仰与梦想…...

加热系统加入达温即停和保温功能

加热系统加入达温即停和保温功能 引言 ​ 我们前一节, 是通过控制io口, 直接控制加热的开关, 但是这太简单粗暴了, 如果只是那样, 和普通的家居电器,是没区别的, 我们想要更智能一点, 就是像咱们自己家的热水壶那样, 水烧滚了(水温达到100摄氏度), 就自动停止了. 加热功能&a…...

C++_2_ inline内联函数 宏函数(2/3)

C推出了inline关键字&#xff0c;其目的是为了替代C语言中的宏函数。 我们先来回顾宏函数&#xff1a; 宏函数 现有个需求&#xff1a;要求你写一个Add(x,y)的宏函数。 正确的写法有一种&#xff0c;错误的写法倒是五花八门&#xff0c;我们先来“见不贤而自省也。” // …...

ROS执行多个节点报错(遥控运动及SLAM建图)

今天在实体机器人中同时执行多个ROS节点: roslaunch rei_robot_base oryxbot_base.launchroslaunch robot_joy robot_joy.launchroslaunch oryxbot_slam oryxbot_slam_local.launch结果全部报错退出了 现在换一种执行方式: roscoreroslaunch rei_robot_base oryxbot_base.la…...

Spring Boot项目中实现文件的上传、下载和预览功能

在Spring Boot项目中实现文件的上传、下载和预览功能&#xff0c;可以通过使用Spring MVC的MultipartFile接口来处理文件上传&#xff0c;并使用HttpServletResponse或Resource来实现文件下载和预览。下面是如何实现这些功能的完整示例。 1. 引入依赖 确保在pom.xml中引入了S…...

【JAVA入门】Day21 - 时间类

【JAVA入门】Day21 - 时间类 文章目录 【JAVA入门】Day21 - 时间类一、JDK7前的时间相关类1.1 Date1.2 SimpleDateFormat1.3 Calendar 二、JDK8新增的时间相关类2.1 Date 相关类2.1.1 ZoneId 时区2.1.2 Instant 时间戳2.1.3 ZoneDateTime 带时区的时间 2.2 DateTimeFormat 相关…...

SQL server数据库备份和还原

新手小白都懂的sql server数据库备份和还原 一、备份 1.打开sql server数据库找到 2.展开找到对应的数据库文件 鼠标右击—任务–备份 3.复制名称 4.复制完点击添加 5.点击添加完之后再次点击查找路径 6.分别两个路径 原路径和新路径 &#xff08;新路径是找到原路径新建了一…...

B站搜索建库架构优化实践

前言 搜索是B站的重要基础功能&#xff0c;需要对包括视频、评论、图文等海量的站内优质资源建立索引&#xff0c;处理来自用户每日数亿的检索请求。离线索引数据的正确、高效产出是搜索业务的基础。我们在这里分享搜索离线架构整体的改造实践&#xff1a;从周期长&#xff0c;…...

XSS反射实战

目录 1.XSS向量编码 2.xss靶场训练&#xff08;easy&#xff09; 2.1第一关 2.2第二关 方法一 方法二 2.3第三关 2.4第四关 2.5第五关 2.6第六关 2.7第七关 第一种方法&#xff1a; 第二种方法&#xff1a; 第三个方法&#xff1a; 2.8第八关 1.XSS向量编码 &…...

远程消息传递的艺术:NSDistantObject在Objective-C中的妙用

标题&#xff1a;远程消息传递的艺术&#xff1a;NSDistantObject在Objective-C中的妙用 引言 在Objective-C的丰富生态中&#xff0c;NSDistantObject扮演着至关重要的角色&#xff0c;特别是在处理分布式系统中的远程消息传递。它允许对象之间跨越不同地址空间进行通信&…...

指向派生类的基类指针、强转为 void* 再转为基类指针、此时调用虚函数会发生什么?

指向派生类的基类指针、强转为 void* 再转为基类指针、此时调用虚函数会发生什么&#xff1f; 1、无论指针类型怎么转&#xff0c;类对象内存没有发生任何变化&#xff0c;还是vfptr指向虚函数表&#xff0c;下面是成员变量&#xff0c;这在编译阶段就已经确定好了&#xff1b…...

操作系统(Linux实战)-进程创建、同步与锁、通信、调度算法-学习笔记

1. 进程的基础概念 1.1 进程是什么&#xff1f; 定义&#xff1a; 进程是操作系统管理的一个程序实例。它包含程序代码及其当前活动的状态。每个进程有自己的内存地址空间&#xff0c;拥有独立的栈、堆、全局变量等。操作系统通过进程来分配资源&#xff08;如 CPU 时间、内…...

react的setState中为什么不能用++?

背景&#xff1a; 在使用react的过程中产生了一些困惑&#xff0c;handleClick函数的功能是记录点击次数&#xff0c;handleClick函数被绑定到按钮中&#xff0c;每点击一次将通过this.state.counter将累计的点击次数显示在页面上 困惑&#xff1a; 为什么不能直接写prevStat…...

2.2算法的时间复杂度与空间复杂度——经典OJ

本博客的OJ标题均已插入超链接&#xff0c;点击可直接跳转~ 一、消失的数字 1、题目描述 数组nums包含从0到n的所有整数&#xff0c;但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗&#xff1f; 2、题目分析 &#xff08;1&#xff09;numsS…...

【CentOS 】DHCP 更改为静态 IP 地址并且遇到无法联网

文章目录 引言解决方式标题1. **编辑网络配置文件**&#xff1a;标题2. **确保配置文件包含以下内容**&#xff1a;特别注意 标题3. **重启网络服务**&#xff1a;标题4. **检查配置是否生效**&#xff1a;标题5. **测试网络连接**&#xff1a;标题6. **检查路由表**&#xff1…...

Linux 操作系统 --- 信号

序言 在本篇内容中&#xff0c;将为大家介绍在操作系统中的一个重要的机制 — 信号。大家可能感到疑惑&#xff0c;好像我在使用 Linux 的过程中并没有接触过信号&#xff0c;这是啥呀&#xff1f;其实我们经常遇到过&#xff0c;当我们运行的进程当进程尝试访问非法内存地址时…...

黑马前端——days09_css

案例 1 页面框架文件 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compati…...

【Python爬虫】技术深度探索与实践

目录 引言 第一部分&#xff1a;Python爬虫基础 1.1 网络基础 1.2 Python爬虫基本流程 第二部分&#xff1a;进阶技术 2.1 动态网页抓取 2.2 异步编程与并发 2.3 反爬虫机制与应对 第三部分&#xff1a;实践案例 第四部分&#xff1a;法律与道德考量 第五部分&#x…...

智启万象|挖掘广告变现潜力,保障支付安全便捷

谷歌致力于为开发者提供 先进的广告变现与支付解决方案 一起回顾 2024 Google 开发者大会 了解如何利用谷歌最新工具和功能 提高变现收入&#xff0c;优化用户体验&#xff0c;保障交易安全 让变现更上一层楼 广告检查器是谷歌 AdMob 平台最新推出的高级测试工具&#xff0c;开…...

函数递归,匿名、内置行数,模块和包,开发规范

一、递归与二分法 一&#xff09;递归 1、递归调用的定义 递归调用&#xff1a;在调用一个函数的过程中&#xff0c;直接或间接地调用了函数本身 2、递归分为两类&#xff1a;直接与间接 #直接 def func():print(from func)func()func() # 间接 def foo():print(from foo)bar…...

Springboot3 整合swagger

一、pom.xml <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-api</artifactId><version>2.1.0</version></dependency> 二、application.yml # SpringDoc配置 # springdoc:swa…...