国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

redisTemplate.opsForValue().get(KEY)從Redis中取出的值為null 的解決方法

這篇具有很好參考價值的文章主要介紹了redisTemplate.opsForValue().get(KEY)從Redis中取出的值為null 的解決方法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

redisTemplate.opsForValue().get(KEY)從Redis中取出的值為null 的解決方法

最近,博主在整理畢設(shè)時就遇到一個問題:我往Redis中存手機驗證碼,我把手機號當(dāng)做key ,驗證碼當(dāng)做value 存儲到 Redis 中,但是在我在需要在登錄操作中取驗證碼時遇到一個問題:

困惑:

      @Resource
      private RedisTemplate<String,String> redisTemplate;

      String phone = user.getPhone();
      log.info("當(dāng)前獲取的手機號為:{}",phone);
      //從redis中獲取手機驗證碼
      String userPhoneKey = redisTemplate.opsForValue().get(phone);  

redisTemplate.opsForValue().get(KEY)從Redis中取出的值為null 的解決方法

我Redis 中明明存的有,但是就是取不到,顯示為null。

redisTemplate.opsForValue().get(KEY)從Redis中取出的值為null 的解決方法

我調(diào)試了好久,最后在一篇文章中找到了解決方法:
其實問題表象很詭異,但問題的原因很簡單,就是Redis中存數(shù)據(jù)和取數(shù)據(jù)時采用了不同的RedisTemplate導(dǎo)致的。
我之前的redisTemplate 的注入方法一個寫的是

      一個接口上寫的 @Resource
      @Resource
      private RedisTemplate<String,String> redisTemplate;
      
      一個接口上寫的 @Autowired
      @Autowired
      private RedisTemplate<String,String> redisTemplate;
      在SpringBoot中,針對Redis的自動配置類默認會初始化兩個RedisTemplate,

      初始化了兩個RedisTemplate的bean。
      第一個Bean類型為RedisTemplate<Object, Object>,Bean的名稱為redisTemplate,而且是當(dāng)容器中不存在對應(yīng)的Bean name時才會進行初始化。

      第二Bean類型為StringRedisTemplate,Bean的名稱為stringRedisTemplate,
      該類繼承自RedisTemplate<String, String>。
     
      **總結(jié):也就說一個Bean是針對Object對象處理的,一個是針對String對象進行處理的**

      導(dǎo)致出現(xiàn)坑的原因便是set時注入的是RedisTemplate<Object, Object>,

      而獲取時注入的是StringRedisTemplate。這么明顯的錯誤應(yīng)該很容易排查的
      如果直接是因為兩處類型不一致導(dǎo)致的,的確很好排查,

      看一下注入的RedisTemplate即可。但問題難以排查,還因為另外一個因素:
      @Resource和@Autowired注入的問題。
**原因:**

      采用了@Resource注入方式,如下
      @Resource
      private RedisTemplate<String, String> redisTemplate;

      采用的是@Autowired注入的:

      @Autowired
      private RedisTemplate<String, String> redisTemplate;

      區(qū)別:
      1:當(dāng)采用@Autowired時,根據(jù)類型注入,直接注入了RedisTemplate<String, String>的bean,
      因為它們的類型都是String的。
      2:當(dāng)使用@Resource注入時,默認采用的是根據(jù)名稱匹配,源碼中可以看到
          redisTemplate對應(yīng)的類型為RedisTemplate<Object, Object>。
      因此,兩處注入了不同的RedisTemplate,于是就導(dǎo)致了獲取時獲取不到值的問題。

解決方法:文章來源地址http://www.zghlxwxcb.cn/news/detail-507855.html


解決方法:

方案一,將@Resource的注入改為@Autowired。

方案二:將@Resource注入的bean名稱由redisTemplate改為stringRedisTemplate。當(dāng)然根據(jù)具體業(yè)務(wù)場景還有其他解決方案。

到了這里,關(guān)于redisTemplate.opsForValue().get(KEY)從Redis中取出的值為null 的解決方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • http請求頭Content-Type的值為text/plain報錯415解決方案

    問題描述:http請求報錯415,經(jīng)過了解主要是請求頭Content-Type的值為text/plain,為了方便演示,創(chuàng)建一個測試類 測試類 如果請求的請求頭是text/plain,則會報錯,錯誤碼415 具體報錯 解決方案很簡單,直接用字符串接收參數(shù)就行,示例代碼

    2024年02月15日
    瀏覽(19)
  • 全網(wǎng)多種方法解決數(shù)據(jù)庫有數(shù)據(jù),但mybatis查詢出來的值為Null、為空或不存在的問題

    全網(wǎng)多種方法解決數(shù)據(jù)庫有數(shù)據(jù),但mybatis查詢出來的值為Null、為空或不存在的問題

    今天在查詢組件詳情時,卻報出如下錯誤: 接下里,我便詳細分析出現(xiàn)該錯誤的原因。 首先 debug (斷點),如下圖所示: debug 結(jié)果是 appCustomComponent: null ,于是,找到 mybatis-plus 的打印的 mysql 語句,如下所示:

    2024年02月15日
    瀏覽(28)
  • 07、如何取出對象數(shù)組里的固定 key 值來拼成一個對象(以及對象與數(shù)組之間的轉(zhuǎn)化)

    07、如何取出對象數(shù)組里的固定 key 值來拼成一個對象(以及對象與數(shù)組之間的轉(zhuǎn)化)

    其一、從后端拿到的數(shù)據(jù)為: let arr = [1, 3, 7, 24] 其二、目標(biāo)數(shù)據(jù)為(即:后臺需要下發(fā)的數(shù)據(jù)): {vlan_1: 1, vlan_3: 1, vlan_7: 1, vlan_24: 1} 其一、定義一個動態(tài)的 key 值來滿足業(yè)務(wù)需求: vlan_X : A、代碼展示: B、結(jié)果展示: 其二、通過 map 操作,獲取目標(biāo)對象: A、代碼展示: B、結(jié)果

    2024年02月06日
    瀏覽(30)
  • 如何獲取data中的值?如何取出,存儲數(shù)據(jù)?跳轉(zhuǎn)外部鏈接?與非本機聯(lián)調(diào)?修改頭部標(biāo)題?動態(tài)更改樣式?動態(tài)獲取設(shè)備寬高?(微信小程序)

    如何獲取data中的值?如何取出,存儲數(shù)據(jù)?跳轉(zhuǎn)外部鏈接?與非本機聯(lián)調(diào)?修改頭部標(biāo)題?動態(tài)更改樣式?動態(tài)獲取設(shè)備寬高?(微信小程序)

    工具:微信開發(fā)者工具 1.如何獲取data中的值? 使用 this.data. 2.如何修改data中的值?使用 this.setData({key: value}),其中key為data中修改的數(shù)據(jù),value為要修改的值 3.如何存儲數(shù)據(jù)? 1.簡單數(shù)據(jù)wx.setStorage({ key: ‘key’,data: value} 2.對象類數(shù)據(jù)wx.setStorage({ key: ‘key’,data: {}} 4.跳轉(zhuǎn)外部

    2024年02月10日
    瀏覽(86)
  • redis redisTemplate解析器(JdkSerializationRedisSerializer、StringRedisSerializer)

    使用redisTemplate操作redis默認使用JdkSerializationRedisSerializer解析器會導(dǎo)致命名空間為二進制碼。

    2024年02月13日
    瀏覽(14)
  • Redis【實踐篇】之RedisTemplate基本操作

    Redis【實踐篇】之RedisTemplate基本操作

    在SpringBoot中,可以使用RedisTemplate來操作Redis數(shù)據(jù)庫。RedisTemplate是Spring Data Redis提供的一個強大的Redis客戶端,它支持各種Redis數(shù)據(jù)結(jié)構(gòu),并提供了許多方便的方法來操作這些數(shù)據(jù)結(jié)構(gòu)。下面是一些RedisTemplate的用法示例: 在此示例中,創(chuàng)建了一個RedisTemplate對象,并設(shè)置了key和

    2024年02月16日
    瀏覽(32)
  • Redis關(guān)于Hash類型數(shù)據(jù)的操作,使用redisTemplate

    因為在redis的Hash數(shù)據(jù)類型里,有內(nèi)層外層兩個key,而且有內(nèi)層外層兩個map集合,所以暫時先稱外層key為大key,內(nèi)層key為小key,外層map為大map,內(nèi)層map為小map,內(nèi)層value值為value。 1.根據(jù)大key和小key還有value的值,設(shè)置一個value: 2.根據(jù)大key和小key獲取到value值: 3.根據(jù)大key獲取小

    2024年02月11日
    瀏覽(25)
  • Spring Boot 整合 Redis,使用 RedisTemplate 客戶端

    Spring Boot 整合 Redis,使用 RedisTemplate 客戶端

    1.1.1 添加依賴 redis 的依賴: 1.1.2 yml 配置文件 1.1.3 Config 配置文件 1.1.4 使用示例 注入 RedisTemplate,即可操作 Redis,簡單示例如下: 1.2.1 RedisTemplate 簡介 RedisTemplate 是 Spring Data Redis 項目的一部分,旨在簡化在Java應(yīng)用程序中使用 Redis 的過程。它提供了一組簡單的方法,可以在

    2024年02月09日
    瀏覽(28)
  • Redis哨兵集群搭建及RedisTemplate的哨兵模式配置詳解

    Redis哨兵集群搭建及RedisTemplate的哨兵模式配置詳解

    本文詳細介紹了Redis哨兵集群的原理、架構(gòu)和工作流程,包括哨兵的功能作用、故障恢復(fù)機制、選舉新的master等內(nèi)容。同時,提供了哨兵集群架構(gòu)示意圖和實例準(zhǔn)備、配置、啟動、測試的步驟。此外,還介紹了如何在Spring的RedisTemplate中配置哨兵模式,實現(xiàn)Redis主從集群的自動切換和節(jié)點感知。

    2024年02月14日
    瀏覽(27)
  • 【Java Web】利用Spring整合Redis,配置RedisTemplate

    1. 在config中加入RedisConfig配置類 2. 寫個測試類測試一下 3. 注意事項 Redis不滿足事務(wù)的原子性,原子性是指事務(wù)要么被全部執(zhí)行,要么都不執(zhí)行。但是Redis不支持回滾,就可能會出現(xiàn)有些語句執(zhí)行成功,有些執(zhí)行失敗,因此具備原子性; Redis事務(wù)的三個階段: 開始事務(wù) 命令入

    2024年02月09日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包