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

Java操作redis

目录

一:Jedis

二:使用Spring Data Redis


Redis 的 Java 客户端很多,官方推荐的有三种:

1.Jedis

2.Lettuce

3.Redisson

同时,Spring 对 Redis 客户端进行了整合,提供了 Spring Data Redis,在Spring Boot项目中还提供了对应的Starter,即 spring-boot-starter-data-redis。

一:Jedis

使用jedis操作redis有以下的优点和缺点

使用Jedis操作Redis的优点有:

1. 简单易用:Jedis是一个简单而直观的Java库,易于使用和理解。
2. 性能高:Jedis使用基于套接字的连接,并通过连接池来管理连接,因此在处理高并发请求时表现出色。
3. 多功能:Jedis支持Redis的所有数据类型和命令,可以用于各种不同的应用场景。
4. 可扩展性好:Jedis可以与其他框架和工具集成,如Spring和Hibernate等,以支持更复杂的应用需求。
5. 社区支持:Jedis是一个流行的Redis Java客户端,有一个活跃的社区,提供了许多示例代码和解决方案。

使用Jedis操作Redis的缺点包括:

1. 需要手动管理连接池:由于Jedis使用连接池来管理与Redis的连接,因此需要手动管理连接池的大小和连接的获取和释放。
2. 不支持异步操作:Jedis不支持异步操作,所有操作都是同步的,可能会阻塞线程。
3. 执行命令的方式有限:Jedis只支持将命令以字符串的形式传递给Redis,不支持类似构建器模式的方式来构建和执行命令。
4. 对象序列化的开销:Jedis将Java对象序列化为字节数组存储到Redis中,因此会产生额外的开销。

具体操作如下: 

1.导入Maven坐标

<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.8.0</version>
</dependency>

2.常用方法

注意:在jedis中每个方法名就其实就是在redis客户端操作的命令名称,并且在每次访问Redis数据库的时候,都需要创建一个Jedis对象。每个Jedis对象似于JDBC中Connection对象。

连接和关闭功能
new Jedis(host, port)创建Jedis连接对象,参数: host: 服务器地址 port:端口号6379
void close()关闭连接
对STRING操作的方法说明
set(String key,String value)添加字符串类型的键和值
String get(String key)通过键得到字符串的值
del(String ... keys)删除一个或多个键
对HASH操作的方法说明
hset(String key,String field,String value)添加一个hash类型的键,字段和值
Map<String,String> hgetall(String key)通过一个键得到所有的字段和值,返回Map
对LIST操作的方法说明
lpush(String key,String...values)从左边添加多个值到list中
List<String> lrange(String key,long start,long end)通过键得到指定范围的元素
对SET操作的方法说明
sadd(String key,String...values)添加一个或多个元素
Set<String> smembers(String key)通过键得到集合所有的元素
对ZSET操作的方法说明
zadd(String key, double score, String member)添加一个键,分数和值
Set<String> zrange(String key, long start, long end)查询一个指定范围的元素

 3.案例分析:

1.例如在Java中用jedis操作redis的String数据类型

/*** @author: dlwlrma* @data 2024年06月14日 16:18* @Description: TODO:用java操作redis 使用jedis操作String数据类型*/
public class jedis {/**** @author dlwlrma* @date 2024/6/14 16:31* TODO: 使用jedis操作String类型数*/@Testpublic void testJedis(){//1.建立连接 输入在linux上的redis的ip地址,端口号为固定端口号:6379Jedis jedis = new Jedis("192.168.81.129", 6379);//2.使用jedis对象调用方法向redis中存储字符串数据String set = jedis.set("NBA", "斯蒂芬库里");System.out.println("set = " + set);//3.获取数据String nba = jedis.get("NBA");System.out.println("nba = " + nba);//4.释放资源jedis.close();}
}

2.在Java中用jedis操作redis的hash数据类型


import org.junit.Test;
import redis.clients.jedis.Jedis;import java.util.Map;/*** @author: dlwlrma* @data 2024年06月14日 16:18* @Description: TODO:用java操作redis 使用jedis*/
public class jedis {/**** @author dlwlrma* @date 2024/6/14 16:31* TODO: 使用jedis操作hash类型数据*/@Testpublic void testHash(){//1.建立连接 输入在linux上的redis的ip地址,端口号为固定端口号:6379Jedis jedis = new Jedis("192.168.81.129", 6379);//2.使用jedis操作hash类型数据Long hset = jedis.hset("第一号", "鼠标", "3");Long hset2 = jedis.hset("第二号", "水杯", "5");//返回的是操作的个数System.out.println("hset = " + hset);//3.获取存入的hash数据Map<String, String> map = jedis.hgetAll("第一号");//遍历map集合map.forEach((filed,value)->{System.out.println(filed+"---------"+value);});Map<String, String> map2 = jedis.hgetAll("第二号");//遍历map集合map2.forEach((filed1,value1)->{System.out.println(filed1+"---------"+value1);});//4.释放资源jedis.close();}}

二:使用Spring Data Redis

官网网址:Spring Data Redis

1.导入相应的maven坐标

<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>2.4.8</version>
</dependency>

2.Spring Data Redis中提供了一个高度封装的类:RedisTemplate,针对类似 Jedis 客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:

  • ValueOperations:简单K-V操作(String类型)

  • SetOperations:set类型数据操作

  • ZSetOperations:zset类型数据操作

  • HashOperations:针对hash类型的数据操作

  • ListOperations:针对list类型的数据操作

3.案例分析:

注意:在进行代码测试的时候,在springboot项目中要编写一个redis的配置类,是为了防止在redis客户端访问时出现一下情况:

配置类如下:(注意:一定要放在和APP,即springboot启动类同一级目录上,即建立一个config的包,存放一些项目的配置类) 

import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;/**** @author dlwlrma* @date 2024/6/14 16:45* @param* @return null* TODO:这是表明为redis的配置类,解决的是redis底层默认的以JdkSerializationRedisSerializer的序列化操作转换为以StringRedisSerializer的序列化*      可以在redis的客户端可以看到存入的中文数据*/
@Configuration
public class RedisConfig extends CachingConfigurerSupport {/*1.RedisConnectionFactory 是获取RedisConnection对象的,RedisConnection相当于jdbc中的连接对象Connection表示和Redis进行连接*/@Beanpublic RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {//创建Redis模板对象RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();//默认的Key序列化器为:JdkSerializationRedisSerializer//StringRedisSerializer支持字符串类型的转化,而且默认使用UTF-8编码//下面代码的意思是使用StringRedisSerializer序列化器替换默认的Key序列化器JdkSerializationRedisSerializerredisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(new StringRedisSerializer());redisTemplate.setConnectionFactory(connectionFactory);return redisTemplate;}}

在springboot的资源下,去配置redis

 配置application.yml

spring:#Redis相关配置redis:host: 192.168.81.129 #注意:这是我在linux系统下的ip地址port: 6379database: 0 #操作的是0号数据库

3.1使用spring data redis操作的方式进行String类型数据的操作

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;import java.util.concurrent.TimeUnit;@SpringBootTest
public class SpringDataRedisTest {//自动注入@Autowiredprivate RedisTemplate redisTemplate;/*** 操作String类型的数据*/@Testpublic void test01String(){/**** @author dlwlrma* @date 2024/6/14 16:01* TODO :需求:*            1.存入数据和取出数据*            2.存值并设置过期时间*            3.如果存在值则不执行任何操作**///根据redisTemplate模板类获取操作String类型的ops接口对象ValueOperations ops = redisTemplate.opsForValue();//1.存入String类型的数据ops.set("username","zhangsan");Object username = ops.get("username");System.out.println("username = " + username);//2.存值并设置过期时间//使用valueOperations调用方法设置过期时间//TimeUnit.MINUTES 为枚举类型,意味着是秒的单位//若key一样则会覆盖value的值(key唯一)ops.set("地点","上海",10, TimeUnit.MINUTES);Object object = ops.get("地点");System.out.println("object = " + object);//3.如果存在值则不执行任何操作//setIfAbsent 表示如果值不存在则存储,如果存在则不存储Boolean absent = ops.setIfAbsent("age", "18");System.out.println("absent = " + absent);//setIfPresent: 表示如果存在则执行代码将数据覆盖之前的value值,如果不存在则不执行代码Boolean present = ops.setIfPresent("age","男");System.out.println("present = " + present);}/*** 操作hash类型的数据*/

3.2使用spring data redis操作的方式进行hash类型数据的操作

/*** 操作hash类型的数据*/@Testpublic void test02Hash(){/**** @author dlwlrma* @date 2024/6/15 15:47* TODO:需求:1.存储几个哈希类型的数据*           2.获取哈希类型的数据*           3.根据键获取哈希类型中的所有字段*           4.获得hash结构中的所有值*///获取执行hash操作的接口对象HashOperations hashOperations = redisTemplate.opsForHash();//1.存储几个哈希类型的数据hashOperations.put("大学","数计学院","1个");hashOperations.put("大学","艺术学院","1个");hashOperations.put("大学","法学学院","1个");//2.获取哈希类型的数据Object o = hashOperations.get("大学", "数计学院");System.out.println("o = " + o);Object o1 = hashOperations.get("大学", "艺术学院");System.out.println("o1 = " + o1);//3.根据键获取哈希类型中的所有字段Set keys = hashOperations.keys("大学");//返回值类型为set集合类,因此用增强for遍历集合for (Object key : keys) {System.out.println("key = " + key);}//4.获得hash结构中的所有值List list = hashOperations.values("大学");for (Object object : list) {System.out.println("object = " + object);}}

3.3使用spring data redis操作的方式进行list类型数据的操作

/*** 操作List类型的数据*/@Testpublic void testList(){/**** @author dlwlrma* @date 2024/6/15 15:59* TODO:需求: 1.向列表中添加数据*           2.查询列表中所有数据*///获取执行list操作的接口对象ListOperations listOperations = redisTemplate.opsForList();//1.向列表中添加数据(添加多个数据)Long pushAll = listOperations.leftPushAll("字母","A","B","C","d","e","f");//2.查询列表中所有数据List range = listOperations.range("字母", 0, -1);//返回结果为list集合类,用增强for循环for (Object object : range) {System.out.println("object = " + object);}}

 3.4使用spring data redis操作的方式进行set类型数据的操作

/*** 操作Set类型的数据*/@Testpublic void testSet(){/**** @author dlwlrma* @date 2024/6/15 16:18* TODO: 1.向set集合中添加数据*       2.获取指定set集合的所有的元素*       3.删除指定set集合的数据*///获取取执行set操作的接口对象SetOperations setOperations = redisTemplate.opsForSet();//        //1.向set集合中添加数据
//        setOperations.add("年龄","18","20");//2.获取指定set集合的所有的元素//该方法类似于在redis客户端操作获取所有元素的命令: smembers 键Set members = setOperations.members("年龄");//返回的set集合,用增强for循环for (Object member : members) {System.out.println("member = " + member);}//3.删除指定set集合的数据Long l = setOperations.remove("年龄", "18","60");System.out.println("l = " + l);}

 3.5使用spring data redis操作的方式进行zset类型数据的操作 

 /*** 操作ZSet类型的数据*/@Testpublic void testZset(){/**** @author dlwlrma* @date 2024/6/15 16:39* TODO: 1.向zset中添加数据*       2.从zset中取出数据*       3.对某个值的分数进行加20*       4.删除数据*///获取执行zset的接口对象ZSetOperations zSetOperations = redisTemplate.opsForZSet();//1.向zset中添加数据zSetOperations.add("myzset","杜伊",10);zSetOperations.add("myzset","张三",25);zSetOperations.add("myzset","李四",5);zSetOperations.add("myzset","王五",30);//2.从zset中取出数据Set<String> myzset = zSetOperations.range("myzset", 0, -1);//根据分数值从小到大开始排序for (String object : myzset) {System.out.println("object = " + object);}//3.对某个值的分数进行加50//incrementScor() 中的三个参数表示: 键 字段值 加的分数Double score = zSetOperations.incrementScore("myzset","李四",50);System.out.println("score = " + score);//4.删除数据Long l = zSetOperations.remove("myzset", "杜伊", "王五");System.out.println("l = " + l);//5.取值Set<ZSetOperations.TypedTuple> set = zSetOperations.rangeWithScores("myzset",0,-1);for (ZSetOperations.TypedTuple typedTuple : set) {Object value = typedTuple.getValue();Double score1 = typedTuple.getScore();System.out.println(value +"------------"+score1);}}

  3.6使用spring data redis操作的方式进行通用类型数据的操作 

/*** 通用操作,针对不同的数据类型都可以操作*/@Testpublic void testCommon(){/**** @author dlwlrma* @date 2024/6/15 17:04* TODO: 需求:1.获取Redis中所有的key*            2.判断某个key是否存在*            3.删除指定key*            4.获取指定key对应的value的数据类型*///1.获取Redis中所有的key//*表示通配符Set<String> keys = redisTemplate.keys("*");for (String key : keys) {System.out.println("key = " + key);}//2.判断某个key是否存在Boolean b = redisTemplate.hasKey("字母");System.out.println("b = " + b);//3.删除指定keyBoolean b1 = redisTemplate.delete("第二号");System.out.println("b1 = " + b1);//4.获取指定key对应的value的数据类型DataType type = redisTemplate.type("age");System.out.println(type.name());}

总结:

Jedis是一个Java的Redis客户端,而Spring Data Redis是一个针对Redis的数据访问和集成框架。

Jedis的优点:
1. 简单易用:Jedis提供了直接与Redis进行交互的方法和API,使用起来非常简单和直观。
2. 功能全面:Jedis支持Redis的所有功能和命令,可以满足大多数开发需求。
3. 性能高效:Jedis使用线程池和连接池来管理与Redis的连接,可以实现高并发的数据访问。

Jedis的缺点:
1. 功能相对有限:Jedis只提供了与Redis交互的基本方法和API,对于高级的数据操作和查询可能需要自己编写复杂的代码。
2. 手动管理连接:Jedis需要手动管理与Redis的连接,包括连接的获取、释放和异常处理,增加了开发的复杂性。

Spring Data Redis的优点:
1. 简化开发:Spring Data Redis提供了丰富的功能和API,可以通过简洁的代码实现复杂的数据操作和查询,大大简化了开发工作。
2. 集成方便:Spring Data Redis与Spring框架紧密集成,可以方便地与其他Spring组件(如Spring Boot)一起使用。
3. 自动管理连接:Spring Data Redis可以自动管理与Redis的连接,包括连接的获取、释放和异常处理,减少了开发的复杂性。

Spring Data Redis的缺点:
1. 学习曲线较陡:Spring Data Redis提供了丰富的功能和注解,但相对于Jedis而言,学习和理解其使用方法可能需要一些时间和精力。
2. 性能相对较低:由于Spring Data Redis提供了更高级的功能和抽象,可能会带来一些性能损失,尤其在高并发场景下。

综上所述,Jedis适合对Redis的基本功能进行简单操作的场景,而Spring Data Redis适合需要更高级功能和更方便集成的场景。选择哪个取决于具体的开发需求和项目情况。

相关文章:

Java操作redis

目录 一&#xff1a;Jedis 二&#xff1a;使用Spring Data Redis Redis 的 Java 客户端很多&#xff0c;官方推荐的有三种&#xff1a; 1.Jedis 2.Lettuce 3.Redisson 同时&#xff0c;Spring 对 Redis 客户端进行了整合&#xff0c;提供了 Spring Data Redis&#xff0c;在S…...

【数据结构(邓俊辉)学习笔记】图03——拓扑排序

文章目录 0. 概述1. 零入度算法1. 1 拓扑排序1. 2 算法 2. 零出度算法2.1 算法2.2 实现2.3. 复杂度 0. 概述 学习下拓扑排序 1. 零入度算法 1. 1 拓扑排序 首先理解下拓扑排序 其实老师经常干这事&#xff0c;如编讲义&#xff0c;将已经知道的知识点串起来变成讲课序列。那…...

C#参数使用场景简要说明

C#参数使用场景简要说明 1、传值参数 方法、类成员的初始化 2、输出参数 方法返回值不能满足&#xff0c;需要多个返回值时&#xff1b; 3、引用参数 方法需要修改变量需带回原变量时&#xff1b; 4、具名参数 代码可读性高&#xff0c;参数可交换位置 5、方法扩展&#xff08…...

线性代数|机器学习-P10最小二乘法的四种方案

文章目录 1. 概述2. SVD奇异值分解3. 最小二乘法方程解4. 最小二乘法图像解释5. Gram-Schmidt 1. 概述 当我们需要根据一堆数据点去拟合出一条近似的直线的时候&#xff0c;就会用到 最小二乘法 .根据矩阵A的情况&#xff0c;有如下四种方法 在r n m 时&#xff0c;SVD奇异…...

【Android面试八股文】你能描述一下JVM中的类加载过程吗?

文章目录 一、Java类的生命周期二、JVM类加载过程1. 加载(Loading)2. 链接(Linking)a. 验证(Verification)b. 准备(Preparation)b.1 准备阶段的初始值b.2 用户定义的初值b.3 常量的初始化c. 解析(Resolution)3. 初始化(Initialization)3.1 什么是 `<clinit>`…...

MYSQL八、MYSQL的SQL优化

一、SQL优化 sql优化是指&#xff1a;通过对sql语句和数据库结构的调整&#xff0c;来提高数据库查询、插入、更新和删除等操作的性能和效率。 1、插入数据优化 要一次性往数据库表中插入多条记录&#xff1a; insert into tb_test values(1,tom); insert into tb_tes…...

鸿蒙轻内核M核源码分析系列二一 02 文件系统LittleFS

1、LFS文件系统结构体介绍 会分2部分来介绍结构体部分&#xff0c;先介绍LittleFS文件系统的结构体&#xff0c;然后介绍LiteOS-M内核中提供的和LittleFS相关的一些结构体。 1.1 LittleFS的枚举结构体 在openharmony/third_party/littlefs/lfs.h头文件中定义LittleFS的枚举、…...

【ARMv8/ARMv9 硬件加速系列 3 -- SVE 指令语法及编译参数详细介绍】

文章目录 SVE 汇编语法SVE 单通道谓词SVE 测试代码 SVE 软件和库支持SVE 编译参数配置-marcharmv8-alseprofilememtagsve2-aessve2-bitpermcryptosve2sve2-sha3sve2-sm4 SVE 汇编语法 在介绍 SVE 汇编指令语法之前&#xff0c;先介绍下如何判断自己所使用的芯片是否实现了SVE功…...

Java版+ SaaS应用+接口技术RESTful API 技术开发的智慧医院HIS系统源码 专注医院管理系统研发 支持二开

Java版 SaaS应用接口技术RESTful API WebSocket WebService技术开发的智慧医院HIS系统源码 专注医院管理系统研发 支持二开 医院住院管理系统&#xff08;Hospital Information System简称HIS&#xff09;是一门医学、信息、管理、计算机等多种学科为一体的边缘科学&#xff…...

工业机器人远程运维,增强智慧工厂运营管理

1、需求背景 随着工业自动化技术的普及和工业机器人应用的增加&#xff0c;制造业对于生产线稳定性和效率的要求不断提高。然而&#xff0c;传统的现场监控方式存在着地理位置限制、实时监控难度大以及诊断能力有限等问题&#xff0c;迫切需要一种更具灵活性和效率的监控方式。…...

理解Python的元类

1.type()函数 type 函数是一个内置函数&#xff0c;用来获取一个对象的类型。它可以接受一个参数&#xff0c;返回这个参数的数据类型。type也可以用来创建类&#xff0c;type就是元类 x333 list["ab"] tuple (1, "a", True, 3.14) dict {name: Alice,…...

web前端黑马下载:探索学习资源的海洋

web前端黑马下载&#xff1a;探索学习资源的海洋 在数字化时代&#xff0c;Web前端技术日益成为互联网行业的核心驱动力。为了跟上这一趋势&#xff0c;众多学习者纷纷投身于Web前端的学习之中。而在这个过程中&#xff0c;“黑马”作为一个备受瞩目的品牌&#xff0c;其Web前…...

最新版jd-gui下载

对于java开发的工程师来说&#xff0c;jd-gui应该是经常会用到的工具了 官网的jd-gui目前只支持到JAVA13&#xff0c;更新版本JAVA编译出来的JAR包就反编译不出来了 此版本支持到了JAVA23 如果需要win以外的其他版本&#xff0c;可以查看我的其他上传 如果不想花积分&#…...

(051)FPGA时钟--->(001)时钟介绍

(001)时钟介绍 1 目录 (a)FPGA简介 (b)Verilog简介 (c)时钟简介 (d)时钟介绍 (e)结束 1 FPGA简介 (a)FPGA(Field Programmable Gate Array)是在PAL (可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。它是作为专用集成电…...

Java程序员英语单词通关:

Java程序员英语单词通关&#xff1a; abstract - 抽象的 boolean - 布尔值 break - 打断 byte - 字节 case - 情况&#xff0c;实例 catch - 捕获 char - 字符 class - 类 continue - 继续 default - 默认&#xff0c;通常 do - 做&#xff0c;运行 double - 双精度…...

数据库开发-Mysql03

目录 1. 多表查询 1.1 概述 1.1.1 数据准备 1.1.2 介绍 1.1.3 分类 1.2 内连接 1.3 外连接 1.4 子查询 1.4.1 介绍 1.4.2 标量子查询 1.4.3 列子查询 1.4.4 行子查询 1.4.5 表子查询 1.5 案例 2. 事务 2.1 介绍 2.2 操作 2.3 四大特性 3. 索引 3.1 介绍 3…...

0-1 背包问题(动态规划 查询背包元素)

描述 给定n种物品和一个背包&#xff0c;物品i的重量是Wi​&#xff0c;其价值为Vi​&#xff0c;问如何选择装入背包的物品&#xff0c;使得装入背包的物品的总价值最大&#xff1f; 在选择装入背包的物品时&#xff0c;对每种物品i只能有两种选择&#xff0c;装入或者不装入…...

elasticsearch快照生成与恢复

Elasticsearch快照生成与恢复的场景主要涉及到数据的备份与恢复需求。当需要对Elasticsearch集群中的数据进行备份&#xff0c;或者在数据丢失、损坏等情况下需要恢复数据时&#xff0c;就可以使用快照功能。 快照生成的方法通常包括以下步骤&#xff1a; 1、创建一个快照仓库…...

178.二叉树:最大二叉树(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…...

跨境电商中的IP隔离是什么?怎么做?

一、IP地址隔离的概念和原理 当我们谈论 IP 地址隔离时&#xff0c;我们实际上是在讨论一种网络安全策略&#xff0c;旨在通过技术手段将网络划分为不同的区域或子网&#xff0c;每个区域或子网都有自己独特的 IP 地址范围。这种划分使网络管理员可以更精细地控制哪些设备或用…...

【C++】stack、queue和deque的使用

&#x1f497;个人主页&#x1f497; ⭐个人专栏——C学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读 一、stack 1. stack介绍 2. stack使用 二、queue 1. queue介绍 2. queue使用 三、deque 1. deque介绍 2. deque的…...

通过SSH远程登录华为设备

01 进入系统编辑视图 system-view Enter system view, return user view with return command. 02 创建本地RSA密钥对 [HUAWEI]rsa local-key-pair creat The key name will be:HUAWEI_Host The range of public key size is (2048 ~ 2048). NOTE: Key pair generation will ta…...

算法day27

第一题 515. 在每个树行中找最大值 首先是遍历每层的节点&#xff0c;将每一层最大值的节点的值保留下来&#xff0c;最后将所有层的最大值的表返回&#xff1b;具体的遍历每层节点的过程如上一篇故事&#xff1b; 综上所述&#xff0c;代码如下&#xff1a; /*** Definition …...

记录一次CTF图片拼图安装工具montage+gaps成功步骤以及踩坑全过程

安装图片拼接工具montage&#xff1a; 1.安装 使用pip install montage无法安装montage工具的师傅可以尝试下面的方法 #Debian apt-get install graphicsmagick-imagemagick-compat#Ubuntu apt-get install graphicsmagick-imagemagick-compat#Alpine apk add imagemagick6#…...

深入剖析人才管理的关键要素:“选、用、育、留”四大核心要素

在当今这个日新月异的商业时代&#xff0c;企业的成功不再仅仅取决于资金、技术或市场策略&#xff0c;而更多地依赖于企业所拥有的人才资源。有效的人才管理策略&#xff0c;尤其是“选、用、育、留”四大核心要素&#xff0c;已成为推动企业持续发展的关键。 一、选&#xff…...

【C++】类的默认成员函数

类的默认成员函数 类的六个默认成员函数构造函数构造函数的概念构造函数的特性 析构函数析构函数的概念析构函数的特性 构造函数与析构函数的调用顺序拷贝构造拷贝构造的概念拷贝构造的特性赋值运算符重载运算符重载赋值运算符重载前置与后置重载输入输出流重载 const修饰成员实…...

归并排序!

归并排序 https://articles.zsxq.com/id_g23e5o3lg87e.html 目录 归并排序算法思想命名由来算法描述sortList函数mergeSort函数 源代码 算法思想 通过将当前乱序的数组分成两个部分&#xff0c;分别进行「递归调用」&#xff0c;利用两个指针将数据元素以此比较&#xff0c;选…...

深入探讨:Spring与MyBatis中的连接池与缓存机制

深入探讨&#xff1a;Spring与MyBatis中的连接池与缓存机制 引言 在现代应用程序开发中&#xff0c;性能优化是一个永恒的话题。而在企业级Java应用开发中&#xff0c;Spring和MyBatis是两种非常流行的框架&#xff0c;它们的连接池和缓存机制对应用程序的性能有着至关重要的…...

[C#]使用C#部署yolov10的目标检测tensorrt模型

【测试通过环境】 win10 x64vs2019 cuda11.7cudnn8.8.0 TensorRT-8.6.1.6 opencvsharp4.9.0 .NET Framework4.7.2 NVIDIA GeForce RTX 2070 Super cuda和tensorrt版本和上述环境版本不一样的需要重新编译TensorRtExtern.dll&#xff0c;TensorRtExtern源码地址&#xff1a;T…...

Linux CFS 调度器 (1):概述

文章目录 1. 前言2. CFS 调度器2.1 概述2.2 一些实现细节2.3 运行队列&#xff1a;红黑树2.4 一些特征2.5 调度策略2.6 调度器类别2.7 扩展&#xff1a;组调度 3. 参考资料 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff…...