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

詳解Redis中數(shù)值亂碼的根本原因以及解決方式

 更新時(shí)間:2024年02月06日 11:21:37   作者:碼農(nóng)研究僧  
這篇文章給大家詳細(xì)分析了Redis中數(shù)值亂碼的根本原因以及解決方式,通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下

1. 問題所示

某些信息存儲在緩存中,對此修改緩存,想通過可視化的Redis Desktop來操作,但是發(fā)現(xiàn)都是二進(jìn)制的數(shù)據(jù),不好操作:

在這里插入圖片描述

于是想著以命令行的方式修改,但又怕改錯(cuò),畢竟都是難以讀懂的二進(jìn)制數(shù)據(jù),如圖所示:(由于信息比較隱私,此處打碼了)

在這里插入圖片描述

2. 原理分析

RedisTemplate 存儲的數(shù)據(jù)通常是二進(jìn)制的。Redis 是一個(gè)鍵值存儲系統(tǒng),它存儲的值可以是字符串、二進(jìn)制數(shù)據(jù)、甚至是序列化的對象。

RedisTemplate 是 Spring Data Redis 提供的一個(gè)類,用于在 Spring 應(yīng)用中與 Redis 進(jìn)行交互。

它提供了一種在 Java 對象和 Redis 數(shù)據(jù)之間進(jìn)行序列化和反序列化的機(jī)制。
默認(rèn)情況下,RedisTemplate 使用 JDK 的序列化機(jī)制將 Java 對象轉(zhuǎn)換為二進(jìn)制數(shù)據(jù),并存儲在 Redis 中。

3. 拓展

在使用Redis作為數(shù)據(jù)存儲時(shí),合理的鍵值序列化配置和RedisTemplate的使用方式對于應(yīng)用性能和數(shù)據(jù)可維護(hù)性至關(guān)重要。

默認(rèn)情況下,Spring Data Redis使用JdkSerializationRedisSerializer作為RedisTemplate的默認(rèn)序列化器

這意味著鍵和值都將以Java對象的二進(jìn)制形式進(jìn)行序列化,并以字節(jié)流的方式存儲在Redis中。

  • 不對值進(jìn)行額外序列化的理由:雖然值以二進(jìn)制形式存儲,但在Java代碼中獲取值時(shí)會(huì)進(jìn)行反序列化,因此這不會(huì)影響業(yè)務(wù)邏輯和數(shù)據(jù)的正確性。
    同時(shí),對值進(jìn)行額外的序列化可能會(huì)限制存儲的數(shù)據(jù)類型,例如將值序列化為字符串將僅能存儲字符串類型的值。
  • 額外序列化的場景
    如果需要存儲復(fù)雜的數(shù)據(jù)結(jié)構(gòu)或非字符串類型的值,可以選擇配置RedisTemplate使用其他序列化器,例如JSON序列化器或自定義序列化器。
  • 這樣可以更靈活地存儲各種類型的數(shù)據(jù),但需要注意在讀取時(shí)正確地反序列化。
  • 特殊值的處理
    對于包含特殊類型(如LocalDateTime、LocalDate、LocalTime等)的值,可能需要注意轉(zhuǎn)換為字符串或選擇合適的序列化方式。

通過理解Redis默認(rèn)行為和靈活運(yùn)用RedisTemplate,可以更好地應(yīng)對不同類型數(shù)據(jù)的存儲需求,從而優(yōu)化系統(tǒng)性能并提升開發(fā)效率

給出一個(gè)Demo代碼更加容易懂:

先引入這兩個(gè)依賴包:

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>2.6.5.RELEASE</version> <!-- 使用你項(xiàng)目中的實(shí)際版本 -->
</dependency>

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.7.0</version> <!-- 使用你項(xiàng)目中的實(shí)際版本 -->
</dependency>

對key進(jìn)行可視化:

import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

public class Demo {
    public static void main(String[] args) {

        // 創(chuàng)建 Redis 連接配置
        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
        jedisConnectionFactory.setHostName("localhost");
        jedisConnectionFactory.setPort(6379);
        // jedisConnectionFactory.setPassword(RedisPassword.of("your-redis-password"));

        // 手動(dòng)調(diào)用 afterPropertiesSet()
        jedisConnectionFactory.afterPropertiesSet();

        // 創(chuàng)建 RedisTemplate 實(shí)例
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        //設(shè)置String類型的key設(shè)置序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //設(shè)置Hash類型的key設(shè)置序列化器
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.setConnectionFactory(jedisConnectionFactory);
        redisTemplate.afterPropertiesSet();

        // 存儲字符串
        redisTemplate.opsForValue().set("message", "Hello, Redis!");

        // 獲取字符串
        String message = (String) redisTemplate.opsForValue().get("message");
        System.out.println("Message: " + message);

        // 存儲哈希
        HashOperations<String, String, String> hashOperations = redisTemplate.opsForHash();
        hashOperations.put("user", "id", "1");
        hashOperations.put("user", "name", "碼農(nóng)研究僧");

        // 獲取哈希
        String userId = hashOperations.get("user", "id");
        String userName = hashOperations.get("user", "name");
        System.out.println("User ID: " + userId);
        System.out.println("User Name: " + userName);
    }
}

如果不對key可視化,只需要?jiǎng)h除這兩行代碼即可:

//設(shè)置String類型的key設(shè)置序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
//設(shè)置Hash類型的key設(shè)置序列化器
redisTemplate.setHashKeySerializer(new StringRedisSerializer());

截圖如下:

在這里插入圖片描述

以上就是詳解Redis中數(shù)值亂碼的根本原因以及解決方式的詳細(xì)內(nèi)容,更多關(guān)于Redis數(shù)值亂碼的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決Redis設(shè)置密碼重啟后失效的問題

    解決Redis設(shè)置密碼重啟后失效的問題

    今天小編就為大家分享一篇解決Redis設(shè)置密碼重啟后失效的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Redis鍵遷移(move、dump、restore、migrate)的三種實(shí)現(xiàn)

    Redis鍵遷移(move、dump、restore、migrate)的三種實(shí)現(xiàn)

    鍵遷移就是把數(shù)據(jù)由一個(gè)Redis遷移到另一個(gè)Redis,本文主要介紹了Redis鍵遷移(move、dump、restore、migrate)的三種實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • Redis?哨兵模式的實(shí)現(xiàn)詳解

    Redis?哨兵模式的實(shí)現(xiàn)詳解

    本文主要介紹了Redis?哨兵模式的實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Redis實(shí)現(xiàn)全局唯一Id的使用示例

    Redis實(shí)現(xiàn)全局唯一Id的使用示例

    全局唯一ID有多個(gè)方法可供選擇,其中一種是使用Redis,本文就來介紹一下Redis實(shí)現(xiàn)全局唯一Id的使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • 深入理解Redis哈希槽

    深入理解Redis哈希槽

    Redis哈希槽是RedisCluster中實(shí)現(xiàn)數(shù)據(jù)分片和負(fù)載均衡的核心機(jī)制,本文就來介紹一下Redis哈希槽,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • Redis進(jìn)行緩存操作的實(shí)現(xiàn)

    Redis進(jìn)行緩存操作的實(shí)現(xiàn)

    本文主要介紹了Redis進(jìn)行緩存操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • Jackson2JsonRedisSerializer和GenericJackson2JsonRedisSerializer區(qū)別

    Jackson2JsonRedisSerializer和GenericJackson2JsonRedisSerializ

    本文主要介紹了Jackson2JsonRedisSerializer和GenericJackson2JsonRedisSerializer區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Windows操作系統(tǒng)下Redis服務(wù)安裝圖文教程

    Windows操作系統(tǒng)下Redis服務(wù)安裝圖文教程

    這篇文章主要介紹了Windows操作系統(tǒng)下Redis服務(wù)安裝圖文教程,文中給大家提供了redis的下載地址,安裝程序步驟,需要的朋友可以參考下
    2018-03-03
  • Centos 7 如何安裝Redis(推薦)

    Centos 7 如何安裝Redis(推薦)

    這篇文章主要介紹了Centos 7 如何安裝Redis,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Redis 使用跳表實(shí)現(xiàn)有序集合的方法

    Redis 使用跳表實(shí)現(xiàn)有序集合的方法

    Redis有序集合底層為什么使用跳表而非其他數(shù)據(jù)結(jié)構(gòu)如平衡樹、紅黑樹或B+樹的原因在于其特殊的設(shè)計(jì)和應(yīng)用場景,跳表提供了與平衡樹類似的效率,同時(shí)實(shí)現(xiàn)更簡單,調(diào)試和修改也更加容易,感興趣的朋友一起看看吧
    2024-09-09

最新評論