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

redis鍵值出現(xiàn)\xac\xed\x00\x05t\x00&的問題及解決

 更新時(shí)間:2023年07月31日 09:29:08   作者:Abstracted  
這篇文章主要介紹了redis鍵值出現(xiàn)\xac\xed\x00\x05t\x00&的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

redis鍵值出現(xiàn)\xac\xed\x00\x05t\x00&的問題

在使用redis存放鍵值對時(shí),發(fā)現(xiàn)存放的key和value多了\xac\xed\x00\x05t\x00&的前綴,筆者存放的是字符串,結(jié)果如下圖所示,出現(xiàn)非預(yù)期的前綴。

出現(xiàn)該問題的原因是 

redis template向redis存放使用java對象序列化的值,序列化方式和string的一般方式不同。

明明指定的另一個引文字符串作為key,但是實(shí)際存儲后卻多出來一串奇異字符串,這讓筆者好奇心頓時(shí)升起來了,決定debug調(diào)試一下

從set()方法進(jìn)入一路對execute()的重載方法向下跟蹤,最終來到了一個T result = action.doInRedis(connToExpose);代碼處

step into 進(jìn)入doInRedis方法,

可以看到在一開始傳入的匿名對象就是這個ValueDeserializingRedisCallback抽象類的一個匿名子類,并實(shí)現(xiàn)了set方法的最后一步,將數(shù)據(jù)存入redis。

來看看我的字符串key是怎么轉(zhuǎn)化成byte數(shù)組的。

對rawKey方法向下追蹤…

1.獲取Key的序列化器,然后對我們的key進(jìn)行序列化

進(jìn)入serialize(key)方法,執(zhí)行了JdkSerializationRedisSerializer類中的serialize方法。

繼續(xù)向下跟蹤…

最終?。。?!

原來是使用了JDK自帶的ObjectOutPutStream將我們的String對象序列化成了byte[],

來看看我們把byte數(shù)組轉(zhuǎn)回字符串key發(fā)現(xiàn)在我原本的key之前確實(shí)拼接了亂碼的字符串。

RedisTemplate對Key的序列化了解了后,我們在看看對Value的序列化是怎么一回事?

最終結(jié)果是同樣的使用JDK自帶的對象輸出流對其進(jìn)行序列化

在Key和Value都序列化后,將數(shù)據(jù)存入Redis。

最終總結(jié)可以發(fā)現(xiàn)一切原因都是這個默認(rèn)的JdkSerializationRedisSerializerJDKRedis序列化器的序列化方式不能讓人接受。

知道了問題所在,這個問題就已經(jīng)解決了一半了。

我們能不能不使用這個默認(rèn)的JDKRedis序列化器,自己實(shí)現(xiàn)一個或者換一個呢?

很幸運(yùn),Spring已經(jīng)為我們提供了許多類型的序列化器了

一般我們常用的序列化器是Jackson2JsonRedisSerializerStringRedisSerializer這兩種。

看名字就知道Jackson2JsonRedisSerializer是將對象序列化成JSON形式的序列化器了。

  • Jackson2JsonRedisSerializer:常用來直接序列化Value對象為JSON字符串。內(nèi)部使用ObjectMapper
  • StringRedisSerializer:常用來序列化Key,也可以用來序列化Value。

于是乎我們對RedisTemplate進(jìn)行配置

/**
 * 如果key和value都使用的StringRedisSerializer序列化器,則推薦使用StringRedisTemplate
 *
 * 配置Redis的Key和Value的序列化器
 * @param redisTemplate 從容器中獲取RedisTemplate
 * @return 修改后的RedisTemple
 */
@Bean
public RedisTemplate<Object, Object> redisStringTemplate(RedisTemplate<Object, Object> redisTemplate) {
    StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
    redisTemplate.setKeySerializer(stringRedisSerializer);
    // 如果手動將Value轉(zhuǎn)換成了JSON,就不要再用JSON序列化器了。
    // redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
    redisTemplate.setValueSerializer(stringRedisSerializer);
    return redisTemplate;
}

查驗(yàn)結(jié)果

key和value的序列化和反序列化都正常了。

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • redis-cli常用命令使用詳解

    redis-cli常用命令使用詳解

    這篇文章主要介紹了redis-cli常用命令使用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • redis-cli創(chuàng)建redis集群的實(shí)現(xiàn)

    redis-cli創(chuàng)建redis集群的實(shí)現(xiàn)

    本文主要介紹了redis-cli創(chuàng)建redis集群的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • Redis 搭建哨兵集群的操作步驟

    Redis 搭建哨兵集群的操作步驟

    在 主從架構(gòu)Redis搭建主從集群 中,一個slave節(jié)點(diǎn)掛了無影響,但是master節(jié)點(diǎn)掛了,就無法進(jìn)行寫操作了,影響高可用,Redis 提供了哨兵(Sentinel)機(jī)制來實(shí)現(xiàn)主從集群的自動故障恢復(fù),本文給大家介紹了Redis 搭建哨兵集群的操作步驟,需要的朋友可以參考下
    2023-08-08
  • Redis可視化客戶端小結(jié)

    Redis可視化客戶端小結(jié)

    因?yàn)?Redis 官方只提供了命令行版的 Redis 客戶端 redis-cli,以至于我們在使用的時(shí)候會比較麻煩,而且命令行版的客戶端看起來也不夠直觀,下面是我這些年使用過的一些 Redis 可視化客戶端,分享給大家
    2021-06-06
  • 關(guān)于Redis單線程的正確理解

    關(guān)于Redis單線程的正確理解

    很多同學(xué)對Redis的單線程和I/O多路復(fù)用技術(shù)并不是很了解,所以我用簡單易懂的語言讓大家了解下Redis單線程和I/O多路復(fù)用技術(shù)的原理,對學(xué)好和運(yùn)用好Redis打下基礎(chǔ),感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • linux下安裝redis圖文詳細(xì)步驟

    linux下安裝redis圖文詳細(xì)步驟

    大家好,本篇文章主要講的是linux下安裝redis圖文詳細(xì)步驟,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 淺談redis內(nèi)存數(shù)據(jù)的持久化方式

    淺談redis內(nèi)存數(shù)據(jù)的持久化方式

    這篇文章主要介紹了淺談redis內(nèi)存數(shù)據(jù)的持久化方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • 一文帶你了解Redis的三種集群模式

    一文帶你了解Redis的三種集群模式

    Redis?的常用的集群方式主要有以下三種,分別是主從復(fù)制模式、哨兵模式、Redis-Cluster集群模式,那么下面我們就分別了解一下這三種集群模式的優(yōu)點(diǎn)與缺點(diǎn)
    2023-06-06
  • 基于Redis 實(shí)現(xiàn)網(wǎng)站PV/UV數(shù)據(jù)統(tǒng)計(jì)

    基于Redis 實(shí)現(xiàn)網(wǎng)站PV/UV數(shù)據(jù)統(tǒng)計(jì)

    PV和UV是兩個重要的指標(biāo),本文主要介紹了基于Redis 實(shí)現(xiàn)網(wǎng)站PV/UV數(shù)據(jù)統(tǒng)計(jì),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • Redis SETEX命令實(shí)現(xiàn)鍵值對管理

    Redis SETEX命令實(shí)現(xiàn)鍵值對管理

    本文主要介紹了Redis SETEX命令實(shí)現(xiàn)鍵值對管理,SETEX命令用于設(shè)置具有過期時(shí)間的鍵值對,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06

最新評論