欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談Spring Data Redis讀不到設(shè)進(jìn)去的值

 更新時(shí)間:2021年09月24日 09:25:10   作者:JavaEdge.  
本文主要介紹了Spring Data Redis怎么讀不到我剛才設(shè)進(jìn)去的值,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

目標(biāo)

精通 Spring Data Redis 操作流程。

Spring Data提供了對(duì)市場(chǎng)上主流數(shù)據(jù)庫(kù)支持:

Spring Data Commons
Spring Data JPA
Spring Data KeyValue
Spring Data LDAP
Spring Data MongoDB
Spring Data Redis
Spring Data REST
Spring Data for Apache Cassandra
Spring Data for Apache Geode
Spring Data for Apache Solr
Spring Data for Pivotal GemFire
Spring Data Couchbase (community module)
Spring Data Elasticsearch (community module)
Spring Data Neo4j (community module)

而在使用時(shí),難免會(huì)不動(dòng)聲色的寫出一堆 bug。

1 注意讀、取一致性

當(dāng)使用 Spring Data Redis 時(shí),我們有時(shí)候會(huì)在項(xiàng)目升級(jí)的過(guò)程中,發(fā)現(xiàn)存儲(chǔ)后的數(shù)據(jù)有讀取不到的情況;另外,還會(huì)出現(xiàn)解析出錯(cuò)的情況。

案例

使用了 Redis 提供的兩種 Template:

  • RedisTemplate
  • stringRedisTemplate

但當(dāng)使用后者去存一個(gè)數(shù)據(jù)后,發(fā)現(xiàn)使用前者取不到對(duì)應(yīng)數(shù)據(jù):

這不很顯然嗎?是因?yàn)檫@倆 Template 不同呀!

發(fā)散一下思維,試想若我們是不同項(xiàng)目的開(kāi)發(fā)。一個(gè)項(xiàng)目只負(fù)責(zé)存儲(chǔ),另外一個(gè)項(xiàng)目只負(fù)責(zé)讀取,兩個(gè)項(xiàng)目之間缺乏溝通。如此看來(lái),這種問(wèn)題是不是就很常見(jiàn)了?

解析

我們不可能直接將數(shù)據(jù)存取到 Redis,畢竟一些數(shù)據(jù)是對(duì)象類型,例如 String或自定義對(duì)象。因此需要在存取前對(duì)數(shù)據(jù)進(jìn)行序列化或反序列化。

帶著key去存取數(shù)據(jù)時(shí),會(huì)執(zhí)行

AbstractOperations#rawKey

在執(zhí)行存儲(chǔ) K.V 到 Redis或從 Redis 讀數(shù)據(jù)前,對(duì) key 進(jìn)行序列化操作:


可見(jiàn),若存在 keySerializer,則利用它序列化 key。
對(duì)于 StringRedisSerializer,它指定的 StringRedisSerializer:

public class StringRedisSerializer implements RedisSerializer<String> {

   private final Charset charset;
   
   @Override
   public byte[] serialize(@Nullable String string) {
      return (string == null ? null : string.getBytes(charset));
   }
 
}

若使用 RedisTemplate,則使用的JDK序列化:

public class JdkSerializationRedisSerializer implements RedisSerializer<Object> {

   @Override
   public byte[] serialize(@Nullable Object object) {
      if (object == null) {
         return SerializationUtils.EMPTY_ARRAY;
      }
      try {
         return serializer.convert(object);
      } catch (Exception ex) {
         throw new SerializationException("Cannot serialize", ex);
      }
   }
}

所以最后對(duì) K 的讀取處理,采用的JDK序列化:


反序列化結(jié)果的確不同。

那如何指定 RedisSerializer 的?

以 StringRedisSerializer 為例。StringRedisTemplate構(gòu)造器直接指定了KeySerializer為 RedisSerializer.string():


RedisSerializer.string():


修正

一定要注意一致性,例如讀寫的序列化方法需要一致:

  • 檢查自己所有的數(shù)據(jù)操作,是否使用了相同的 RedisTemplate
  • 即使相同,也要檢查所指定各種Serializer是否完全一致

到此這篇關(guān)于淺談Spring Data Redis讀不到設(shè)進(jìn)去的值的文章就介紹到這了,更多相關(guān)Spring Data Redis讀不到值 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring定時(shí)任務(wù)注解@Scheduled詳解

    Spring定時(shí)任務(wù)注解@Scheduled詳解

    這篇文章主要介紹了Spring定時(shí)任務(wù)注解@Scheduled詳解,@Scheduled注解是包org.springframework.scheduling.annotation中的一個(gè)注解,主要是用來(lái)開(kāi)啟定時(shí)任務(wù),本文提供了部分實(shí)現(xiàn)代碼與思路,需要的朋友可以參考下
    2023-09-09
  • java、spring、springboot中整合Redis的詳細(xì)講解

    java、spring、springboot中整合Redis的詳細(xì)講解

    這篇文章主要介紹了java、spring、springboot中整合Redis的詳細(xì)講解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 如何用nacos搭建微服務(wù)注冊(cè)配置中心

    如何用nacos搭建微服務(wù)注冊(cè)配置中心

    這篇文章主要介紹了如何用nacos搭建微服務(wù)注冊(cè)配置中心問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • SpringBoot上傳文件并配置本地資源映射來(lái)訪問(wèn)文件的實(shí)例代碼

    SpringBoot上傳文件并配置本地資源映射來(lái)訪問(wèn)文件的實(shí)例代碼

    這篇文章主要介紹了SpringBoot上傳文件并配置本地資源映射來(lái)訪問(wèn)文件的實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Spring?Boot使用Hibernate-Validator校驗(yàn)參數(shù)時(shí)的長(zhǎng)度校驗(yàn)方法詳解

    Spring?Boot使用Hibernate-Validator校驗(yàn)參數(shù)時(shí)的長(zhǎng)度校驗(yàn)方法詳解

    這篇文章主要給大家介紹了關(guān)于Spring?Boot使用Hibernate-Validator校驗(yàn)參數(shù)時(shí)的長(zhǎng)度校驗(yàn)方法的相關(guān)資料,在Spring Boot中可以使用Spring Boot Validation來(lái)對(duì)參數(shù)名稱進(jìn)行校驗(yàn),需要的朋友可以參考下
    2023-08-08
  • Activiti如何啟動(dòng)流程并使流程前進(jìn)

    Activiti如何啟動(dòng)流程并使流程前進(jìn)

    這篇文章主要介紹了Activiti如何啟動(dòng)流程并使流程前進(jìn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 詳細(xì)講解Java輸入語(yǔ)句的寫法

    詳細(xì)講解Java輸入語(yǔ)句的寫法

    作為初步進(jìn)入java開(kāi)發(fā)學(xué)習(xí)的小白來(lái)說(shuō),學(xué)習(xí)java語(yǔ)言一開(kāi)始的時(shí)候得一步步的學(xué)習(xí),比如說(shuō)java輸入語(yǔ)句應(yīng)該這么去實(shí)現(xiàn)呢,這篇文章主要給大家介紹了關(guān)于Java輸入語(yǔ)句的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • 如何查看java進(jìn)程內(nèi)存占用情況

    如何查看java進(jìn)程內(nèi)存占用情況

    這篇文章主要介紹了如何查看java進(jìn)程內(nèi)存占用情況問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringBoot?@GroupSequenceProvider注解實(shí)現(xiàn)bean多屬性聯(lián)合校驗(yàn)的示例代碼

    SpringBoot?@GroupSequenceProvider注解實(shí)現(xiàn)bean多屬性聯(lián)合校驗(yàn)的示例代碼

    這篇文章主要介紹了SpringBoot?@GroupSequenceProvider注解實(shí)現(xiàn)bean多屬性聯(lián)合校驗(yàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • maven多模塊pom配置實(shí)例詳解

    maven多模塊pom配置實(shí)例詳解

    這篇文章主要介紹了maven多模塊pom配置實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01

最新評(píng)論