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.pswp.cn/news/160478.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160478.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160478.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

redis運維(十六) 有序集合

一 有序集合 把握一點&#xff1a; 各種redis 命令都提供各種語言對應的API 接口,后續API是關鍵 ① 概念 1、sorted set --> 有序集合2、redis有序集合也是集合類型的一部分&#xff0c;所以它保留了集合中元素不能重復的特性3、但是不同的是,有序集合給每個元素多設置…

什么是數字孿生?

數字孿生是指通過數字化技術手段&#xff0c;將現實世界中的實體物理系統或過程與其數字化模型相連接&#xff0c;實現實體物理系統或過程的虛擬仿真、監測、預測和優化等功能的一種技術。數字孿生技術可以將物理系統的運行狀態、性能參數、故障信息等實時反饋到數字模型中&…

轉型做視頻了,博客就是稿子,繼續堅持寫博客,同時發布視頻,能寫博客說明思路清晰了,能再講明白,理解就更透徹了,緊跟上時代發展。

1&#xff0c;今天特別記錄下&#xff0c;B站給開通了《合集》功能 最近使用視頻制作了幾個視頻。播放量還不錯&#xff0c;最好的已經到了 2.6K了。 然后粉絲也漲到了 200個。 添加鏈接描述 緊跟時代&#xff1a;從寫博客到錄視頻&#xff0c;粉絲大漲&#xff0c;突破200個&…

vue開發一、在Vue中引入ElementUI二、在Vue中使用阿里圖標庫

目錄 一、在Vue中引入ElementUI1. 安裝ElementUI2. 引入ElementUI3. 使用ElementUI組件 二、在Vue中使用阿里圖標庫1. 在阿里圖標庫中選擇圖標2. 下載圖標3. 引入圖標4. 使用圖標 總結 一、在Vue中引入ElementUI ElementUI是一種基于Vue的第三方UI庫&#xff0c;提供了許多常用…

接口自動化測試 —— 工具、請求與響應

一、工具&#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; 我們這樣來理解 首先 大家對電腦或多或少都應該有不少的了解吧 那么我們這些軟件 都是通過變成一個一個文件保存在電腦中 我們才可以…

【2023C卷最新題目】20天拿下華為OD筆試之【貪心】2023C-找座位/2023B-座位調整-全網注釋最詳細分類最全的華為OD真題題解

文章目錄 題目描述與示例題目描述輸入輸出說明示例一輸入輸出 示例二輸入輸出說明 解題思路代碼PythonJavaC時空復雜度 相同問題不同描述2023C-找座位題目描述輸入描述輸出描述示例一輸入輸出 示例二輸入輸出 華為OD算法/大廠面試高頻題算法練習沖刺訓練 題目描述與示例 題目描…

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)…

編程語言發展史:C語言的誕生及其影響

預計更新 第一部分&#xff1a;早期編程語言 1.1布爾代數和機器語言 1.2匯編語言的出現和發展 1.3高級語言的興起 第二部分&#xff1a;主流編程語言 1.1 C語言的誕生及其影響 1.2 C語言的發展和應用 1.3 Java語言的出現和發展 1.4 Python語言的興起和特點 1.5 JavaScript語言…

基于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…