最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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à)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

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

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

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

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

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

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

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

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

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

對(duì)rawKey方法向下追蹤…

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

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

繼續(xù)向下跟蹤…

最終?。。。?/strong>

原來(lái)是使用了JDK自帶的ObjectOutPutStream將我們的String對(duì)象序列化成了byte[],

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

RedisTemplate對(duì)Key的序列化了解了后,我們?cè)诳纯磳?duì)Value的序列化是怎么一回事?

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

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

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

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

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

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

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

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

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

于是乎我們對(duì)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);
    // 如果手動(dòng)將Value轉(zhuǎn)換成了JSON,就不要再用JSON序列化器了。
    // redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
    redisTemplate.setValueSerializer(stringRedisSerializer);
    return redisTemplate;
}

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

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

總結(jié)

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

相關(guān)文章

  • Redis實(shí)現(xiàn)分布式鎖的實(shí)例講解

    Redis實(shí)現(xiàn)分布式鎖的實(shí)例講解

    在本篇文章里小編給大家整理了一篇關(guān)于Redis實(shí)現(xiàn)分布式鎖的實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-12-12
  • Redis?數(shù)據(jù)傾斜產(chǎn)生的原因及問題詳解

    Redis?數(shù)據(jù)傾斜產(chǎn)生的原因及問題詳解

    數(shù)據(jù)傾斜是指在Redis分布式集群(如Redis?Cluster或Codis)中,數(shù)據(jù)(內(nèi)存占用)或訪問請(qǐng)求(QPS)沒有均勻地分布到各個(gè)節(jié)點(diǎn)上,導(dǎo)致部分節(jié)點(diǎn)負(fù)載過(guò)高,而其他節(jié)點(diǎn)相對(duì)空閑的現(xiàn)象,文章詳細(xì)介紹了Redis數(shù)據(jù)傾斜的概念、原因、診斷方法以及解決方案,感興趣的朋友一起看看吧
    2026-01-01
  • Redis?持久化原理分析和使用建議詳解

    Redis?持久化原理分析和使用建議詳解

    本文主要介紹了Redis提供的三大持久化機(jī)制,即AOF日志、RDB快照以及混合持久化機(jī)制,結(jié)合圖文實(shí)例給大家講解的非常詳細(xì),感興趣的朋友一起看看吧
    2025-02-02
  • 詳解Redis分布式鎖的原理與實(shí)現(xiàn)

    詳解Redis分布式鎖的原理與實(shí)現(xiàn)

    在單體應(yīng)用中,如果我們對(duì)共享數(shù)據(jù)不進(jìn)行加鎖操作,會(huì)出現(xiàn)數(shù)據(jù)一致性問題,我們的解決辦法通常是加鎖。下面我們一起聊聊使用redis來(lái)實(shí)現(xiàn)分布式鎖
    2022-06-06
  • Redis實(shí)現(xiàn)商品秒殺的示例代碼

    Redis實(shí)現(xiàn)商品秒殺的示例代碼

    本文主要介紹了Redis實(shí)現(xiàn)商品秒殺的示例代碼,詳細(xì)介紹了Redis的List、Set和Hash類型,以及使用Redis事務(wù)保證原子性的方式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • redis分布式鎖實(shí)現(xiàn)示例

    redis分布式鎖實(shí)現(xiàn)示例

    本文主要介紹了redis分布式鎖實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • Redis遍歷海量數(shù)據(jù)的實(shí)現(xiàn)示例

    Redis遍歷海量數(shù)據(jù)的實(shí)現(xiàn)示例

    本文主要介紹了 Redis遍歷海量數(shù)據(jù)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • Redis分布式鎖python-redis-lock使用方法

    Redis分布式鎖python-redis-lock使用方法

    這篇文章主要介紹了Redis分布式鎖python-redis-lock使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 一文快速搞懂Redis的幾種數(shù)據(jù)類型方式

    一文快速搞懂Redis的幾種數(shù)據(jù)類型方式

    這篇文章主要介紹了一文快速搞懂Redis的幾種數(shù)據(jù)類型方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Redis高級(jí)玩法之利用SortedSet實(shí)現(xiàn)多維度排序的方法

    Redis高級(jí)玩法之利用SortedSet實(shí)現(xiàn)多維度排序的方法

    Redis的SortedSet是可以根據(jù)score進(jìn)行排序的,以手機(jī)應(yīng)用商店的熱門榜單排序?yàn)槔?,根?jù)下載量倒序排列。接下來(lái)通過(guò)本文給大家分享Redis高級(jí)玩法之利用SortedSet實(shí)現(xiàn)多維度排序的方法,一起看看吧
    2019-07-07

最新評(píng)論

洛扎县| 和平区| 海原县| 布拖县| 区。| 乌兰浩特市| 中江县| 淮滨县| 宁津县| 于都县| 綦江县| 土默特右旗| 西峡县| 禄丰县| 化州市| 双江| 特克斯县| 蒙山县| 云南省| 城步| 资兴市| 平和县| 绥宁县| 明光市| 绥化市| 惠东县| 兰西县| 喀什市| 吕梁市| 陇川县| 洛浦县| 甘孜| 江源县| 罗山县| 汉川市| 商南县| 通化市| 安泽县| 内丘县| 克东县| 宁武县|