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

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

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

1. 問題所示

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

在這里插入圖片描述

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

在這里插入圖片描述

2. 原理分析

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

RedisTemplate 是 Spring Data Redis 提供的一個類,用于在 Spring 應用中與 Redis 進行交互。

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

3. 拓展

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

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

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

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

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

給出一個Demo代碼更加容易懂:

先引入這兩個依賴包:

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

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.7.0</version> <!-- 使用你項目中的實際版本 -->
</dependency>

對key進行可視化:

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"));

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

        // 創(chuàng)建 RedisTemplate 實例
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        //設置String類型的key設置序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //設置Hash類型的key設置序列化器
        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可視化,只需要刪除這兩行代碼即可:

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

截圖如下:

在這里插入圖片描述

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

相關文章

  • 關于Redis的讀寫一致問題

    關于Redis的讀寫一致問題

    在項目使用Redis過程中,當數(shù)據(jù)更新時,我們要保證緩存和數(shù)據(jù)庫的一致性,否則會導致很多臟數(shù)據(jù)出現(xiàn),此時我們就要思考如何去進行數(shù)據(jù)更新,本文就給大家講講關于redis的讀寫一致問題,需要的朋友可以參考下
    2023-08-08
  • Linux中Redis安裝部署的操作步驟

    Linux中Redis安裝部署的操作步驟

    公司一直在使用redis集群,尋思著自己也部署一套練練手,下面這篇文章主要給大家介紹了關于Linux中Redis安裝部署的操作步驟,需要的朋友可以參考下
    2022-04-04
  • Redis實現(xiàn)布隆過濾器緩存去重的"智能門衛(wèi)"(實例詳解)

    Redis實現(xiàn)布隆過濾器緩存去重的"智能門衛(wèi)"(實例詳解)

    布隆過濾器(Bloom Filter)本質(zhì)是一個基于哈希函數(shù)的概率型數(shù)據(jù)結構,核心作用是快速判斷一個元素是否存在于集合中,今天給大家介紹Redis實現(xiàn)布隆過濾器緩存去重的"智能門衛(wèi)",感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • Redis數(shù)據(jù)結構之listpack和quicklist使用學習

    Redis數(shù)據(jù)結構之listpack和quicklist使用學習

    這篇文章主要為大家介紹了Redis數(shù)據(jù)結構之listpack和quicklist的使用學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • 淺談Redis的事件驅動模型

    淺談Redis的事件驅動模型

    本文主要介紹了淺談Redis的事件驅動模型,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • 記錄一次并發(fā)情況下的redis導致服務假死的問題解決

    記錄一次并發(fā)情況下的redis導致服務假死的問題解決

    由于Redis需要依賴于操作系統(tǒng)環(huán)境,如果系統(tǒng)資源受限,比如過量的進程在擠占系統(tǒng)資源、系統(tǒng)死鎖等情況,本文主要介紹了記錄一次并發(fā)情況下的redis導致服務假死的問題解決,感興趣的可以了解一下
    2023-09-09
  • Redis集群利用Redisson實現(xiàn)分布式鎖方式

    Redis集群利用Redisson實現(xiàn)分布式鎖方式

    這篇文章主要介紹了Redis集群利用Redisson實現(xiàn)分布式鎖方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Redis?key的過期時間和永久有效的實現(xiàn)

    Redis?key的過期時間和永久有效的實現(xiàn)

    在Redis中,鍵可以設置過期時間或被永久保存,`EXPIRE`和`PEXPIRE`命令分別用于設置鍵的過期時間,具有一定的參考價值,感興趣的可以了解一下
    2024-09-09
  • Redis與RabbitMQ的區(qū)別對比和結合應用

    Redis與RabbitMQ的區(qū)別對比和結合應用

    RabbitMQ和Redis是兩種流行的消息隊列(Message Queue)和緩存系統(tǒng),在應用程序開發(fā)中起著不同的角色和功能,Redis憑借內(nèi)存存儲和豐富數(shù)據(jù)結構實現(xiàn)高速緩存和分布式鎖,RabbitMQ通過消息隊列實現(xiàn)系統(tǒng)解耦和異步處理,二者結合可應對電商秒殺等高并發(fā)場景
    2025-10-10
  • 使用SpringBoot?+?Redis?實現(xiàn)接口限流的方式

    使用SpringBoot?+?Redis?實現(xiàn)接口限流的方式

    這篇文章主要介紹了SpringBoot?+?Redis?實現(xiàn)接口限流,Redis?除了做緩存,還能干很多很多事情:分布式鎖、限流、處理請求接口冪等,文中給大家提到了限流注解的創(chuàng)建方式,需要的朋友可以參考下
    2022-05-05

最新評論

台北市| 潜江市| 苏州市| 五大连池市| 咸宁市| 中方县| 鸡泽县| 祁连县| 秦安县| 钟祥市| 兴城市| 镇远县| 富裕县| 宾川县| 兰西县| 德州市| 会理县| 孝感市| 昂仁县| 南昌县| 商水县| 郧西县| 孝义市| 泗阳县| 韶关市| 鄢陵县| 珠海市| 新丰县| 客服| 新泰市| 灌阳县| 海阳市| 西华县| 城市| 巴林右旗| 藁城市| 临夏市| 威远县| 鄂托克旗| 南充市| 马公市|