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

Redis序列化反序列化不一致導(dǎo)致String類型值多了雙引號(hào)問題

 更新時(shí)間:2024年08月20日 14:28:36   作者:c&0xff00  
這篇文章主要介紹了Redis序列化反序列化不一致導(dǎo)致String類型值多了雙引號(hào)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

問題背景

A服務(wù)寫入Redis的數(shù)據(jù),B服務(wù)讀出后,value值多了個(gè)雙引號(hào)。

如 “String” 獲取到的是 ““String””

問題原因

A服務(wù)添加了一個(gè)redisTemplate Bean配置:

@Configuration
public class RedisTemplateConfig {
    @Bean(name = "redisTemplate")
    public RedisTemplate setRedisTemplate(RedisConnectionFactory redisConnectionFactory, RedisProperties redisProperties) {
        StringRedisTemplate template = new StringRedisTemplate(redisConnectionFactory);
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        redisProperties.setPassword(SecretKeyClient.getPassword(
                System.getProperty("datakeeper.application.redis.community.key_name")));
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }
}

我們可以看到ValueSerializer用的是jackson2JsonRedisSerializer。

使用的時(shí)候通過@Resource注解引入:

    @Resource
    private RedisTemplate<String, String> redisTemplate;

@Resource默認(rèn)就是通過beanName注入的,所以此時(shí)注入的RedisTemplate就是我們上面配置的。

在B服務(wù)中:

也配置了這樣一個(gè)RedisTemplate:

@Configuration
public class RedisTemplateConfig {
    @Bean(name = "redisTemplate")
    public RedisTemplate setRedisTemplate(RedisConnectionFactory redisConnectionFactory, RedisProperties redisProperties) {
        StringRedisTemplate template = new StringRedisTemplate(redisConnectionFactory);
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        redisProperties.setPassword(SecretKeyClient.getPassword(
                System.getProperty("datakeeper.application.redis.community.key_name")));
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }
}

配置和A服務(wù)一模一樣。

但是,在使用RedisTemplate時(shí)采用的@Autowired注解:

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

我們知道@Autowired注解默認(rèn)是按照BeanClass即BeanType進(jìn)行注入的,此時(shí)注入的RedisTemplate卻不是我們上面配置的,而是SpringBoot自動(dòng)配置的。

在RedisAutoConfiguration中:

	@Bean
	@ConditionalOnMissingBean(name = "redisTemplate")
	public RedisTemplate<Object, Object> redisTemplate(
			RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
		RedisTemplate<Object, Object> template = new RedisTemplate<>();
		template.setConnectionFactory(redisConnectionFactory);
		return template;
	}

我們看到,我們配置的與SpringBoot默認(rèn)的redisTemplate不相同。

通過打斷點(diǎn)進(jìn)行對比:

SpringBoot默認(rèn)的:

我們自己定義的:

可以看到,在valueSerializer上,一個(gè)是StringRedisSerializer,一個(gè)是Jackson2JsonRedisSerializer。

所以,在序列化與反序列化的方式不同時(shí),產(chǎn)生這種亂碼,奇怪的雙引號(hào)問題也就可以解釋了。

解決方案

將序列化反序列化方式改成一致。

總結(jié)

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

相關(guān)文章

  • Redis集群節(jié)點(diǎn)通信過程/原理流程分析

    Redis集群節(jié)點(diǎn)通信過程/原理流程分析

    這篇文章主要介紹了Redis集群節(jié)點(diǎn)通信過程/原理,詳細(xì)介紹了Cluster(集群)的節(jié)點(diǎn)通信的流程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 基于Redis實(shí)現(xiàn)阻塞隊(duì)列的方式

    基于Redis實(shí)現(xiàn)阻塞隊(duì)列的方式

    本文主要講解基于?Redis?的方式實(shí)現(xiàn)異步隊(duì)列,基于?Redis?的?list?實(shí)現(xiàn)隊(duì)列的方式也有多種,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • windows環(huán)境下Redis+Spring緩存實(shí)例講解

    windows環(huán)境下Redis+Spring緩存實(shí)例講解

    這篇文章主要為大家詳細(xì)介紹了windows環(huán)境下Redis+Spring緩存實(shí)例教程,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Redis分布式緩存-Redis持久化詳解

    Redis分布式緩存-Redis持久化詳解

    RDB持久化將內(nèi)存數(shù)據(jù)快照到磁盤,用于故障恢復(fù);AOF持久化記錄每個(gè)寫命令,提供數(shù)據(jù)安全性,兩者各有優(yōu)缺點(diǎn),可根據(jù)需求選擇或結(jié)合使用
    2024-12-12
  • redis5.0以上基于密碼認(rèn)證的集群cluster方式

    redis5.0以上基于密碼認(rèn)證的集群cluster方式

    這篇文章主要介紹了redis5.0以上基于密碼認(rèn)證的集群cluster方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • redis分布式鎖的問題與解決方法

    redis分布式鎖的問題與解決方法

    這篇文章主要給大家介紹了關(guān)于redis分布式鎖的問題與解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • redis的bigkey掃描腳本深入介紹

    redis的bigkey掃描腳本深入介紹

    這篇文章主要給大家介紹了關(guān)于redis的bigkey掃描腳本的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • Redis慢查詢?nèi)罩九c監(jiān)視器問題

    Redis慢查詢?nèi)罩九c監(jiān)視器問題

    這篇文章主要介紹了Redis慢查詢?nèi)罩九c監(jiān)視器問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 大白話講解調(diào)用Redis的increment失敗原因及推薦使用詳解

    大白話講解調(diào)用Redis的increment失敗原因及推薦使用詳解

    本文主要介紹了調(diào)用Redis的increment失敗原因及推薦使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Redis 命令的詳解及簡單實(shí)例

    Redis 命令的詳解及簡單實(shí)例

    這篇文章主要介紹了Redis 命令的詳解及簡單實(shí)例的相關(guān)資料,這里提供基礎(chǔ)語法及使用實(shí)例,需要的朋友可以參考下
    2017-08-08

最新評論

岳阳县| 贵阳市| 莲花县| 延寿县| 青岛市| 南丹县| 始兴县| 日照市| 龙海市| 上杭县| 成武县| 丹东市| 河间市| 巫山县| 宁德市| 崇文区| 盐津县| 舞钢市| 司法| 富平县| 洛宁县| 金秀| 延川县| 获嘉县| 柯坪县| 宁陵县| 闵行区| 合阳县| 嘉善县| 黔西县| 泰州市| 庄河市| 耒阳市| 阿图什市| 宽甸| 永平县| 望江县| 南召县| 乌鲁木齐县| 沁水县| 玉山县|