RedisTemplate使用详解

    • RedisTemplate介绍
    • StringRedisTemplate介绍
    • RedisConnectionFactory介绍
      • RedisConnectionFactory源码解析
    • RedisOperations介绍
      • RedisOperations源码解析
    • RedisTemplate使用连接池
      • 配置RedisTemplate连接池
      • 连接池配置
    • RedisTemplate应用场景
    • RedisTemplate主要特点
    • RedisTemplate使用案例
    • RedisTemplate源码解析
    • RedisTemplate中的设计模式
    • RedisTemplate中的连接池长连接无法生效的原因
    • RedisTemplate释放连接
    • RedisTemplate如何处理连接超时异常
    • Redis拓展

在这里插入图片描述

RedisTemplate介绍

RedisTemplate是Spring Data Redis的核心类,它提供了对Redis访问的支持。这个类在给定对象和Redis存储中的底层二进制数据之间执行自动序列化(Serialization)和反序列化(Deserialization)操作。

RedisTemplate的底层通过RedisConnectionFactory对多种Redis驱动进行集成,上层通过RedisOperations提供丰富的API,并结合Spring基于泛型的bean注入,为开发提供了极大的便利。一旦配置好,这个类就是线程安全的。

注意:虽然模板是通用的,但它取决于序列化程序/反序列化程序来正确地将给定对象与二进制数据相互转换。

在这里插入图片描述

StringRedisTemplate介绍

StringRedisTemplate是Spring Data Redis中一个重要的类,它是RedisTemplate以字符串为中心的扩展。由于针对Redis的大多数操作都是基于字符串的,因此StringRedisTemplate提供了一个专用的类来进行处理。

StringRedisTemplate继承自RedisTemplate类,它实现了BeanClassLoaderAware、Aware、InitializingBean、RedisOperations<K, V>接口。它是默认采用String的序列化策略,保存的key和value都是采用此策略序列化保存的。

另外,StringRedisTemplate与RedisTemplate两者的数据是不共通的,也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。

RedisConnectionFactory介绍

RedisConnectionFactory是一个接口,用于配置连接信息。在Spring Data Redis方案中,它通常被JredisConnectionFactory、LettuceConnectionFactory或SrpConnectionFactory等实现类所替代。

这个接口的作用是建立与Redis服务器的连接,并提供一种方式来配置和管理这些连接。在具体实现中,可能会使用不同的连接库和驱动程序,以适应不同的应用场景和需求。

此外,RedisConnectionFactory还可以与哨兵模式结合使用,以实现Redis服务器的故障转移和自动切换。在这种模式下,Redis服务器可以有多个哨兵进程,每个进程都独立运行并监控其他Redis实例的运行状态。当某个主服务器宕机时,哨兵进程会自动将一个从服务器升级为主服务器,并通过发布订阅模式通知其他从服务器进行切换。这种机制可以保证系统的可用性和稳定性。

RedisConnectionFactory源码解析

RedisConnectionFactory 是 Spring Data Redis 的核心接口之一,用于创建 RedisConnection 对象,实现与 Redis 服务器的连接。以下是 RedisConnectionFactory 接口的源码:

public interface RedisConnectionFactory {/*** 根据 key 获取 RedisConnection 对象* @param key RedisConnection 的 key* @return RedisConnection 对象*/RedisConnection getConnection(String key);/*** 根据 key 获取 RedisTemplate 对象* @param key RedisTemplate 的 key* @return RedisTemplate 对象*/<T> RedisTemplate<T> getRedisTemplate(String key);/*** 关闭 RedisConnectionFactory 对象,释放资源*/void destroy();
}

在 RedisConnectionFactory 接口的实现类中,通常会实现 createConnection() 方法来创建 RedisConnection 对象,以及 destroyConnection() 方法来关闭 RedisConnection 对象并释放资源。此外,还可以通过实现 getRedisTemplate() 方法来提供 RedisTemplate 对象,方便用户进行 Redis 操作。

RedisOperations介绍

RedisOperations是一个接口,定义了一些对Redis操作的方法,它主要提供对Redis键、事务、运行脚本等命令的支持。它不负责数据的读写,而是专注于对Redis命令的操作。

RedisOperations接口定义的方法在RedisTemplate类中得到了实现,通过这个类可以实现对Redis的各种操作。例如,通过RedisTemplate可以发送Redis命令,并对返回的结果进行处理。

在具体实现上,RedisTemplate使用了不同的数据结构来实现对Redis命令的支持,例如使用List或Map等数据结构来存储命令,并在执行时将它们发送到Redis服务器。此外,RedisTemplate还提供了事务和管道等功能,以优化对Redis的访问。

RedisOperations是一个专注于对Redis命令操作的接口,通过RedisTemplate类可以实现对Redis的各种操作。

RedisOperations源码解析

RedisOperations 是 Spring Data Redis 的核心接口之一,它封装了对 Redis 的操作,包括对 Redis 的读写、删除等操作。以下是 RedisOperations 接口的源码:

public interface RedisOperations<K, V> {/*** 根据 key 获取 RedisConnection 对象* @param key RedisConnection 的 key* @return RedisConnection 对象*/RedisConnection getConnection(K key);/*** 根据 key 获取 RedisTemplate 对象* @param key RedisTemplate 的 key* @return RedisTemplate 对象*/<T> RedisTemplate<T> getRedisTemplate(K key);/*** 设置 key 的值为 value,并返回旧值。* @param key 键值对应的键* @param value 键值对应的值* @return 旧值*/V getAndSet(K key, V value);/*** 为 key 的值加上 delta。* @param key 需要进行操作的键值对应的键* @param delta 需要添加的值* @return 旧值*/Long increment(K key, long delta);
}

在 RedisOperations 接口的实现类中,通常会实现 doInRedis() 方法来执行具体的 Redis 操作,例如 set、get、delete 等操作。此外,还可以通过实现 getConnection() 和 getRedisTemplate() 方法来提供 RedisConnection 和 RedisTemplate 对象,方便用户进行 Redis 操作。

RedisTemplate使用连接池

RedisTemplate使用连接池来管理Redis连接。连接池可以重复利用连接,减少创建和销毁连接的开销,从而提高系统的性能和稳定性。在使用RedisTemplate时,需要配置RedisConnectionFactory来初始化连接池。

具体的配置方式可以参考Spring Data Redis的官方文档或相关教程。一般来说,需要设置连接池的参数,包括最大连接数、最小连接数、连接超时时间等。同时,还需要设置序列化程序和序列化参数,以便正确地将对象转换为二进制数据,并将二进制数据转换回对象。

在使用RedisTemplate时,可以通过execute等方法来发送Redis命令并处理返回结果。同时,RedisTemplate还提供了事务和管道等功能,以优化对Redis的访问。

使用RedisTemplate时需要配置连接池,以确保对Redis的访问更加高效和稳定。

配置RedisTemplate连接池

配置RedisTemplate连接池需要先配置RedisConnectionFactory,RedisConnectionFactory用于创建Redis连接。具体步骤如下:

  1. 导入相关依赖:
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
  1. 配置连接池参数:
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(100); // 设置最大连接数
poolConfig.setMaxIdle(10); // 设置最大空闲连接数
poolConfig.setMinIdle(1); // 设置最小空闲连接数
  1. 创建连接池:
JedisPool jedisPool = new JedisPool(poolConfig, "localhost", 6379);
  1. 配置连接工厂:
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
  1. 配置连接工厂参数:
JedisConnectionFactory connectionFactory = new JedisConnectionFactory();
connectionFactory.setHostName("localhost"); // 设置redis主机名
connectionFactory.setPort(6379); // 设置redis端口号
connectionFactory.setPoolConfig(poolConfig); // 设置连接池
  1. 创建连接工厂:
RedisConnectionFactory redisConnectionFactory = connectionFactory;
  1. 在RedisTemplate中使用连接工厂:
import org.springframework.data.redis.core.RedisTemplate;
  1. 配置RedisTemplate:
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);

连接池配置

连接池参数是指配置连接池时需要设置的参数,包括最大连接数、最小连接数、连接超时时间等。这些参数可以影响连接池的性能和稳定性。

1. 最大连接数(maxTotal) :指定连接池的最大连接数,即连接池中允许同时存在的最大连接数量。当连接池已满时,新的请求会被阻塞等待,直到有可用的连接。适当设置最大连接数可以防止连接池被耗尽。
2. 最大空闲连接数(maxIdle) :指定连接池中允许的最大空闲连接数量,当连接池中的连接数超过最大空闲连接数时,多余的连接将被关闭。适当设置最大空闲连接数可以避免连接池中连接数过多,占用过多的系统资源。
3. 最小空闲连接数(minIdle) :指定连接池中的最小空闲连接数量,当连接池中的空闲连接数低于这个数值时,连接池将尝试创建新的连接。
4. 连接超时时间(maxWaitTime) :指定连接池等待可用连接的最大时间,超过这个时间将抛出异常。
5. 连接超时单位(maxWaitTimeUnit) :指定连接池等待可用连接的时间单位,如毫秒或秒。

以上是常见的连接池参数,根据不同的应用场景和需求,需要适当调整这些参数。在实际应用中,需要根据系统资源和性能需求来权衡这些参数的设置。以下是更多的配置参数

配置参数配置含义
testWhileIdle在连接闲置时是否进行有效性检测。
minEvictableIdleTimeMillis一个连接在指定的时间内没有被使用,那么该连接将被回收。
timeBetweenEvictionRunsMillis空闲连接的检测周期。
numTestsPerEvictionRun每个idle eviction run中检测的空闲连接数量。

RedisTemplate应用场景

RedisTemplate是Spring Data Redis的核心类,主要用于对Redis的访问。它封装了Jedis和Lettuce的Redis操作,简化了对Redis的操作。

RedisTemplate的应用场景非常广泛,例如在项目启动时,可以使用RedisTemplate初始化Redis缓存,将数据提前加载到缓存中,避免在项目中查询数据库,从而提高性能。此外,RedisTemplate还支持高级特性,如pipelining、事务、LUA Scripting、Redis Sentinel、Redis Cluster等等,这些特性可以进一步扩展Redis的功能和性能。

在实际项目中,RedisTemplate通常被用于以下场景:

  1. 数据缓存 :将频繁查询的数据存储在Redis中,减少对数据库的访问次数,提高系统的响应速度和性能。
  2. 消息队列 :使用Redis作为消息队列,实现微服务之间的解耦和通信。通过Redis的发布订阅模式,可以实现消息的广播和订阅。
  3. 分布式锁 :使用Redis作为分布式锁的实现,确保多个微服务之间的线程安全。通过Redis的setnx命令,可以实现在分布式环境下获取锁的操作。
  4. 计数器 :使用Redis实现计数器功能,对访问次数、点击率等需要进行计数的操作进行统计。
  5. 会话管理 :将用户会话数据存储在Redis中,实现用户状态的保持和跨请求的处理。
  6. 分布式事务 :使用Redis实现分布式事务,确保分布式环境下的数据一致性和可靠性。
  7. 缓存雪崩 :使用Redis实现缓存雪崩的防御机制,通过设置缓存过期时间和缓存失效时间,避免缓存雪崩的发生。

RedisTemplate是Redis操作的核心类,可以用于各种不同的应用场景中,实现对Redis的灵活操作和管理。

RedisTemplate主要特点

RedisTemplate其主要特点包括:

  1. 类型安全:RedisTemplate天生具有类型安全的特性,所有Redis操作都是泛型的。
  2. 操作简单:RedisTemplate支持多种Redis数据类型,同时提供了灵活的操作API,使得对Redis的操作变得非常简单。
  3. 可扩展性高:RedisTemplate保证了Redis的高可靠性和可扩展性,这使得它成为了企业级应用接入Redis服务的首选工具。

RedisTemplate使用案例

RedisTemplate在Redis操作中具有广泛的应用,下面以一个简单的示例来说明其使用方法。

假设我们有一个需要频繁查询用户信息的系统,为了提高性能,我们希望将用户信息存储在Redis中。我们可以使用RedisTemplate来实现这个需求。

首先,我们需要在配置类中初始化RedisTemplate:

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);return template;}
}

然后,我们可以在服务类中使用RedisTemplate来查询用户信息:

@Service
public class UserService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;public User getUser(String userId) {String key = "user:" + userId;return (User) redisTemplate.opsForValue().get(key);}
}

在这个示例中,我们将用户信息存储在Redis中,并使用RedisTemplate的opsForValue()方法来获取和操作数据。在实际应用中,我们可以根据需要使用其他Redis数据类型和操作方法来实现更复杂的业务需求。

RedisTemplate源码解析

RedisTemplate是Spring Data Redis的核心类,用于对Redis的访问。在RedisTemplate的源码中,主要实现了对Redis的基本操作和高级特性,包括数据读取、数据存储、数据删除、事务处理等。

RedisTemplate的源码主要分为以下几个部分:

  1. 构造函数:RedisTemplate的构造函数接受一个RedisConnectionFactory对象作为参数,用于创建Redis连接。同时,还可以设置序列化方式、连接超时时间等参数。
  2. 命令操作:RedisTemplate提供了一系列命令操作方法,如opsForValue()、opsForList()、opsForSet()等,用于对Redis的不同数据类型进行操作。这些方法返回不同类型的操作对象,如ValueOperations、ListOperations、SetOperations等,这些对象封装了对Redis的命令操作。
  3. 事务处理:RedisTemplate支持事务处理,通过事务管理器实现。事务管理器可以在一个事务中执行多个Redis命令,并保证这些命令的原子性。如果任何一个命令执行失败,整个事务将回滚。
  4. Pipelining:RedisTemplate支持管道化操作,即将多个Redis命令打包成一个管道,一次性发送到Redis服务器,并一次性接收服务器的响应。这样可以减少网络通信的开销,提高操作效率。
  5. 序列化和反序列化:RedisTemplate通过序列化和反序列化将Java对象转换为二进制数据存储到Redis中,或将二进制数据转换为Java对象读取出来。默认情况下,使用JDK自带的序列化机制进行序列化和反序列化。
  6. 异常处理:RedisTemplate对常见的Redis异常进行了封装和处理,使得在使用Redis时更加方便和安全。

总体来说,RedisTemplate的源码实现了对Redis的基本操作和高级特性,并提供了方便、安全、高效的接口供开发者使用。

RedisTemplate中的设计模式

RedisTemplate在实现过程中主要使用了以下几种设计模式:

  1. 模板方法模式:在RedisTemplate中,定义了一个模板方法,例如get,它包含了操作Redis的通用逻辑,如判断key是否存在等。具体的操作则留给子类去实现。子类需要实现exists和getValue两个抽象方法,分别用于判断key是否存在和获取key对应的值。这样,不同的子类可以根据自己的需求来实现具体的操作,使得代码更加灵活和可扩展。

RedisTemplate中的连接池长连接无法生效的原因

RedisTemplate中的连接池长连接无法生效的原因可能有以下几种:

  1. Redis连接池未正确设置。在使用Redis连接池时,需要正确地设置其参数,例如最大连接数、最小连接数、连接超时时间等。如果参数设置不正确,可能会导致连接池无法正常运行。
  2. 连接信息未正确存入Redis连接池。在使用Redis连接池获取连接时,需要将连接信息正确地存入Redis连接池,以便Redis连接池能够得到充分的利用。如果连接信息未正确存入,可能会导致连接池无法正常工作。
  3. Redis服务器异常。如果Redis服务器出现异常,例如网络故障、Redis进程崩溃等,可能会导致Redis连接池无法正常工作。
  4. 连接泄漏。如果在程序中使用完Redis连接后,没有正确地归还给连接池,可能会导致连接池中的连接数量超过最大限制,进而导致连接池无法正常工作。
  5. Redis客户端异常。如果Redis客户端出现异常,例如内存不足、线程阻塞等,可能会导致Redis连接池无法正常工作。

为了解决这些问题,可以采取以下措施:

  1. 正确设置Redis连接池的参数,包括最大连接数、最小连接数、连接超时时间等。
  2. 在使用Redis连接池获取连接时,确保将连接信息正确地存入Redis连接池。
  3. 定期检查Redis服务器的状态和性能,及时发现和处理问题。
  4. 在程序中使用完Redis连接后,要正确地归还给连接池,避免连接泄漏。
  5. 定期检查Redis客户端的状态和性能,及时发现和处理问题。

RedisTemplate释放连接

在使用RedisTemplate进行Redis操作后,需要手动释放连接,以避免连接泄漏。可以通过调用RedisConnectionUtils.unbindConnection(redisTemplate.getConnectionFactory())方法来释放连接。同时,在使用Redis连接池时,也需要正确设置其参数,包括最大连接数、最小连接数、连接超时时间等,以确保连接池能够正常运行。在使用RedisTemplate进行回调操作时,需要注意在同一条连接下执行多个Redis命令,以确保操作的原子性和一致性。

RedisTemplate实例在调用完成后,会自动回收连接。在执行完Redis操作后,RedisTemplate会调用Connection的close方法来关闭连接。同时,如果使用连接池的话,RedisTemplate会将连接归还给连接池,以便连接可以被重复利用。因此,在使用RedisTemplate进行Redis操作时,不需要手动回收连接。但是,需要注意的是,在使用完Redis连接后,应该将连接及时归还给连接池,以避免连接泄漏。

RedisTemplate如何处理连接超时异常

RedisTemplate在处理连接超时异常时,会根据配置的超时时间进行判断。如果在指定的超时时间内无法连接到Redis服务器,RedisTemplate会抛出RedisConnectionException异常。因此,在使用RedisTemplate进行Redis操作时,需要根据实际情况配置合适的超时时间,以避免连接超时异常的发生。同时,如果出现了连接超时异常,可以通过查看异常信息来进一步排查和解决问题。

Redis拓展

【Redis常用数据结构底层实现与验证-String】

【通过Redis实现数据的交集、并集、补集】

【redis设置与获取过期时间一网打尽】

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/160478.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis运维(十六) 有序集合

一 有序集合 把握一点&#xff1a; 各种redis 命令都提供各种语言对应的API 接口,后续API是关键 ① 概念 1、sorted set --> 有序集合2、redis有序集合也是集合类型的一部分&#xff0c;所以它保留了集合中元素不能重复的特性3、但是不同的是,有序集合给每个元素多设置…

转型做视频了,博客就是稿子,继续坚持写博客,同时发布视频,能写博客说明思路清晰了,能再讲明白,理解就更透彻了,紧跟上时代发展。

1&#xff0c;今天特别记录下&#xff0c;B站给开通了《合集》功能 最近使用视频制作了几个视频。播放量还不错&#xff0c;最好的已经到了 2.6K了。 然后粉丝也涨到了 200个。 添加链接描述 紧跟时代&#xff1a;从写博客到录视频&#xff0c;粉丝大涨&#xff0c;突破200个&…

接口自动化测试 —— 工具、请求与响应

一、工具&#xff1a; 1.工具介绍 postman &#xff1a;很主流的API测试工具&#xff0c;也是工作里面使用最广泛的研发工具。 JMeter&#xff1a; ApiPost&#xff1a; 2.安装postman&#xff1a; 安装好直接打开&#xff0c;不用注册。 二、通信模式&#xff1a; 1、…

【Java 进阶篇】从Java对象到JSON:Jackson的魔法之旅

在现代的软件开发中&#xff0c;处理数据的能力是至关重要的。而当我们谈及数据格式时&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;通常是首选。为了在Java中轻松地将对象转换为JSON&#xff0c;我们需要一种强大而灵活的工具。这时&#xff0c;Jackso…

【Java 进阶篇】Redis:打开缓存之门

介绍 Redis&#xff08;Remote Dictionary Server&#xff09;是一个高性能的键值对存储系统&#xff0c;被广泛用作缓存、消息中间件和数据库。它以其快速的读写能力、支持多种数据结构和丰富的功能而闻名。在这篇博客中&#xff0c;我们将深入了解Redis的概念、安装以及基本…

MQTT协议消息代理服务远程连接

目录 1. Linux 搭建 Mosquitto 2. Linux 安装Cpolar 3. 创建MQTT服务公网连接地址 4. 客户端远程连接MQTT服务 5. 代码调用MQTT服务 6. 固定连接TCP公网地址 7. 固定地址连接测试 Mosquitto是一个开源的消息代理&#xff0c;它实现了MQTT协议版本3.1和3.1.1。它可以在不…

第二十章:多线程

进程 线程的特点 1.进程是资源分配的最小单位&#xff0c;线程是最小的执行单位 2.一个进程可以有多个线程 3.线程共享进程资源 package twentyth; public class ThreadTest extends Thread { public void run() { for (int i 1; i < 10; i) {//继承重…

Unity开发之C#基础-File文件读取

前言 今天我们将要讲解到c#中 对于文件的读写是怎样的 那么没接触过特别系统编程小伙伴们应该会有一个疑问 这跟文件有什么关系呢&#xff1f; 我们这样来理解 首先 大家对电脑或多或少都应该有不少的了解吧 那么我们这些软件 都是通过变成一个一个文件保存在电脑中 我们才可以…

Spring Boot创建和使用(重要)

Spring的诞生是为了简化Java程序开发的&#xff01; Spring Boot的诞生是为了简化Spring程序开发的&#xff01; Spring Boot就是Spring框架的脚手架&#xff0c;为了快速开发Spring框架而诞生的&#xff01;&#xff01; Spring Boot的优点&#xff1a; 快速集成框架&#x…

2023年G2电站锅炉司炉证考试题库及G2电站锅炉司炉试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年G2电站锅炉司炉证考试题库及G2电站锅炉司炉试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大纲…

MySQL 事务的底层原理和 MVCC(一)

在事务的实现机制上&#xff0c;MySQL 采用的是 WAL&#xff08;Write-ahead logging&#xff0c;预写式日志&#xff09;机制来实现的。 在使用 WAL 的系统中&#xff0c;所有的修改都先被写入到日志中&#xff0c;然后再被应用到系统中。通常包含 redo 和 undo 两部分信息。 …

【Java开发】 Springboot集成Mybatis-Flex

1 Mybatis-Flex 介绍 1.1简介 Mybatis-Flex 是一个优雅的 Mybatis 增强框架&#xff0c;它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库&#xff0c;其内置的 QueryWrapper 亮点帮助我们极大的减少了 SQL 编写的工作的同时&#xff…

cocos2dx ​​Animate3D(二)

Twirl 扭曲旋转特效 // 持续时间(时间过后不会回到原来的样子) // 整个屏幕被分成几行几列 // 扭曲中心位置 // 扭曲的数量 // 振幅 static Twirl* create(float duration, const Size& gridSize, const Vec2& position, unsigned int twirls, float amplitude)…

基于springboot实现摄影跟拍预定管理系统【项目源码+论文说明】计算机毕业设计

基于springboot实现摄影跟拍预定管理系统演示 摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要…

【2018年数据结构真题】

方法一 给定一个含n(n>1)个整数的数组&#xff0c;请设计一个在时间上尽可能高效的算法&#xff0c;找出数组中未出现的最小正整数。例如&#xff0c;数组{-5&#xff0c;3&#xff0c;2&#xff0c;3}中未出现的最小正整数是1&#xff1b;数组{1&#xff0c;2&#xff0c;…

AIGC变革BI行业,永洪发布vividime全球化品牌

大数据产业创新服务媒体 ——聚焦数据 改变商业 国内BI商业智能市场&#xff0c;一直有着“内永洪&#xff0c;外Tableau”的说法。成立于2012年的永洪科技经过十多年的发展&#xff0c;早已崛起为国内大数据行业的一支劲旅。 ChatGPT火爆出圈之后&#xff0c;AIGC快速渗透&am…

【C++】vector的介绍与使用

&#x1f9d1;‍&#x1f393;个人主页&#xff1a;简 料 &#x1f3c6;所属专栏&#xff1a;C &#x1f3c6;个人社区&#xff1a;越努力越幸运社区 &#x1f3c6;简 介&#xff1a;简料简料&#xff0c;简单有料~在校大学生一枚&#xff0c;专注C/C/GO的干货分…

【Java 进阶篇】Redis 数据结构:轻松驾驭多样性

引言 Redis是一款强大的键值对存储系统&#xff0c;其数据结构的多样性是其引以为傲的特点之一。在这篇博客中&#xff0c;我们将深入探讨Redis的主要数据结构&#xff0c;包括字符串、哈希表、列表、集合和有序集合&#xff0c;并通过实例代码演示它们的用法。 1. 字符串&am…

在中国企业出海的大浪潮下,亚马逊云科技提供遍及全球的基础设施和技术支持

中国技术出海是中国企业更高层次更高质量的全球化。在人类文明发展史上&#xff0c;凝聚中国古人智慧结晶的造纸术、印刷术、火药、指南针等&#xff0c;曾为中国技术出海写下过浓墨重彩的一笔。在今天&#xff0c;如金山办公、店匠科技、ADVANCE.AI等公司又以技术立业&#xf…

msvcp140.dll是什么?msvcp140.dll丢失的有哪些解决方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp140.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题&#xff0c;我们需要采取一些措施来修复丢失的msvcp140.dll文件。本文将详细介绍5个解决msvcp140.dl…