亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

redis初學(xué)者常見字符亂碼問題及解決方案

 更新時(shí)間:2023年09月07日 09:27:49   作者:太空眼睛  
這篇文章主要介紹了redis初學(xué)者常見字符亂碼問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

本文開發(fā)環(huán)境介紹

開發(fā)依賴版本
Spring Boot2.6.6

pom.xml依賴

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
    </dependency>
</dependencies>

redis保存數(shù)據(jù)后出現(xiàn)\xac\xed\x00\x05t\x00的問題

測(cè)試代碼

public class RedisTemplateTest extends DemoRedisTestBase {
    @SneakyThrows
    @Test
    void testSet() {
        String key = String.join(":", "user", RandomStringUtils.randomAlphabetic(10));
        Map<String, String> value = new HashMap<>();
        value.put("id", RandomStringUtils.randomAlphabetic(10));
        value.put("name", RandomStringUtils.randomAlphabetic(10));
        redisTemplate.opsForValue().set(key, objectMapper.writeValueAsString(value));
    }
}

查看寫入redis的數(shù)據(jù)

127.0.0.1:6379> keys *user*
1) "\xac\xed\x00\x05t\x00\x0fuser:mnaurYPzBt"

這是因?yàn)槟J(rèn)把keyvalue的值序列化成**byte[]**格式。

解決辦法

@Configuration
public class RedisTemplateBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        if(RedisTemplate.class.isAssignableFrom(bean.getClass())) {
            RedisTemplate redisTemplate = (RedisTemplate)bean;
            StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
            redisTemplate.setKeySerializer(stringRedisSerializer);
            redisTemplate.setValueSerializer(stringRedisSerializer);
        }
        return bean;
    }
}

再次運(yùn)行測(cè)試代碼,結(jié)果如下

127.0.0.1:6379> keys *user*
1) "user:PvwBNJFUKn"
2) "\xac\xed\x00\x05t\x00\x0fuser:mnaurYPzBt"
127.0.0.1:6379> get user:PvwBNJFUKn
"{\"name\":\"mfEESamnux\",\"id\":\"OFPcKTgwAm\"}"

寫一個(gè)帶有效期的數(shù)據(jù)

public class RedisTemplateTest extends DemoRedisTestBase {
    @SneakyThrows
    @Test
    void testSet() {
        String key = String.join(":", "user", RandomStringUtils.randomAlphabetic(10));
        Map<String, String> value = new HashMap<>();
        value.put("id", RandomStringUtils.randomAlphabetic(10));
        value.put("name", RandomStringUtils.randomAlphabetic(10));
        redisTemplate.opsForValue().set(key, objectMapper.writeValueAsString(value), 1L);
        String json = redisTemplate.opsForValue().get(key);
        System.out.println(json);
    }
}

指定了第3個(gè)參數(shù) 1L ,運(yùn)行查看數(shù)據(jù)

在這里插入圖片描述

發(fā)現(xiàn)沒有,寫入redis的數(shù)據(jù)最前面有一個(gè)不認(rèn)識(shí)的字符 \x00 ,其實(shí)是想當(dāng)然的用錯(cuò)了方法,正確設(shè)置過期時(shí)間的姿勢(shì)應(yīng)該是這樣

public class RedisTemplateTest extends DemoRedisTestBase {
    @SneakyThrows
    @Test
    void testSet() {
        String key = String.join(":", "user", RandomStringUtils.randomAlphabetic(10));
        Map<String, String> value = new HashMap<>();
        value.put("id", RandomStringUtils.randomAlphabetic(10));
        value.put("name", RandomStringUtils.randomAlphabetic(10));
        redisTemplate.opsForValue().set(key, objectMapper.writeValueAsString(value), 1L, TimeUnit.DAYS);
        String json = redisTemplate.opsForValue().get(key);
        System.out.println(json);
    }
}

應(yīng)該使用這個(gè)4個(gè)參數(shù)的方法才是設(shè)置過期時(shí)間,再運(yùn)行下

在這里插入圖片描述

這下就正確了

總結(jié)

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

相關(guān)文章

  • redis2.8配置文件中文翻譯版

    redis2.8配置文件中文翻譯版

    這篇文章主要介紹了redis2.8配置文件中文翻譯版,本文翻譯了配置文件中的參數(shù)說明,非常詳細(xì),需要的朋友可以參考下
    2015-06-06
  • Redis數(shù)據(jù)結(jié)構(gòu)之listpack和quicklist使用學(xué)習(xí)

    Redis數(shù)據(jù)結(jié)構(gòu)之listpack和quicklist使用學(xué)習(xí)

    這篇文章主要為大家介紹了Redis數(shù)據(jù)結(jié)構(gòu)之listpack和quicklist的使用學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Redis做數(shù)據(jù)持久化的解決方案及底層原理

    Redis做數(shù)據(jù)持久化的解決方案及底層原理

    Redis有兩種方式來實(shí)現(xiàn)數(shù)據(jù)的持久化,分別是RDB(Redis Database)和AOF(Append Only File),今天通過本文給大家聊一聊Redis做數(shù)據(jù)持久化的解決方案及底層原理,感興趣的朋友一起看看吧
    2021-07-07
  • SpringMVC集成redis配置的多種實(shí)現(xiàn)方法

    SpringMVC集成redis配置的多種實(shí)現(xiàn)方法

    這篇文章主要介紹了SpringMVC集成redis配置的多種實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Redis中一個(gè)String類型引發(fā)的慘案

    Redis中一個(gè)String類型引發(fā)的慘案

    著存儲(chǔ)的數(shù)據(jù)量越來越大,Redis的內(nèi)存的使用量也快速上升,結(jié)果遇到了大內(nèi)存Redis實(shí)例因?yàn)樯蒖DB而響應(yīng)變慢的問題。很顯然String類型并不是一種好的選擇,那有什么辦法可以降低內(nèi)存消耗嗎?帶著這個(gè)問題一起通過本文學(xué)習(xí)下吧
    2021-07-07
  • Redis數(shù)據(jù)庫(kù)安全詳解

    Redis數(shù)據(jù)庫(kù)安全詳解

    這篇文章主要為大家介紹了Redis數(shù)據(jù)庫(kù)安全詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Redis的數(shù)據(jù)復(fù)制過程詳解

    Redis的數(shù)據(jù)復(fù)制過程詳解

    Redis 的復(fù)制功能分為同步(sync)和命令傳播(command propagate)這兩個(gè)操作,這篇文章主要介紹了Redis的數(shù)據(jù)復(fù)制,需要的朋友可以參考下
    2022-12-12
  • redis基本安裝判斷、啟動(dòng)使用方法示例

    redis基本安裝判斷、啟動(dòng)使用方法示例

    這篇文章主要介紹了redis基本安裝判斷、啟動(dòng)使用方法,結(jié)合實(shí)例形式分析了Redis針對(duì)是否安裝的判斷、啟動(dòng)等使用方法,需要的朋友可以參考下
    2020-02-02
  • redis清空所有數(shù)據(jù)的三種方法

    redis清空所有數(shù)據(jù)的三種方法

    本文主要介紹了redis清空所有數(shù)據(jù)的三種方法,主要包括FLUSHALL,FLUSHDB,SCREPT FLUSH這三個(gè)指令,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Redis高并發(fā)問題的解決方法

    Redis高并發(fā)問題的解決方法

    這篇文章主要介紹了Redis高并發(fā)問題的解決辦法,具有很好的參考價(jià)值,感興趣的小伙伴們可以參考一下,具體如下:
    2018-05-05

最新評(píng)論