日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

封装自定义的redis切库工具类ByteArrayRedisTemplate,读取byte数组反序列化成List<Object>

發布時間:2025/3/11 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 封装自定义的redis切库工具类ByteArrayRedisTemplate,读取byte数组反序列化成List<Object> 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

封裝自定義的redis切庫工具類ByteArrayRedisTemplate,讀取byte數組反序列化成List<Object>(使用lettuce連接池)

    • 代碼環境
      • 框架:springboot
      • 依賴:spring-boot-starter-data-redis
    • 步驟1:注入LettuceConnectionFactory連接池代碼思路
      • 參數1:RedisStandaloneConfiguration配置實例代碼
      • 參數2:LettuceClientConfiguration配置實例思路
      • 參數2:LettuceClientConfiguration配置關鍵代碼
    • 步驟2:封裝自定義的redis切庫工具
      • 實現一個自定義的RedisTemplate需要什么?
      • 切庫關鍵代碼
    • 步驟3:redis中讀取List序列化的byte數組
      • 實例化ByteArrayRedisTemplate

代碼環境

框架:springboot

依賴:spring-boot-starter-data-redis

步驟1:注入LettuceConnectionFactory連接池代碼思路

首先注入bean的方法中返回LettuceConnectionFactory對象:

//偽代碼 LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(RedisStandaloneConfiguration類型 standaloneConfig,LettuceClientConfiguration類型 clientConfig);

需要兩個參數:
1)RedisStandaloneConfiguration是單機配置。
2)LettuceClientConfiguration是LettuceClient連接池配置。
下文詳細講解。

參數1:RedisStandaloneConfiguration配置實例代碼

RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();redisStandaloneConfiguration.setDatabase(database);redisStandaloneConfiguration.setHostName(host);redisStandaloneConfiguration.setPort(port);if (StringUtils.isNotEmpty(password)) {redisStandaloneConfiguration.setPassword(password);}

RedisStandaloneConfiguration可改其他配置:RedisSentinelConfiguration是哨兵配置,RedisClusterConfiguration是集群模式。

參數2:LettuceClientConfiguration配置實例思路

查看LettuceClientConfiguration源碼,發現LettuceClientConfiguration是一個接口。沒辦法直接new一個了。

不急,源碼看一下。
有沒有配置連接池的方法。LettuceClientConfiguration中發現有個builder():

static LettuceClientConfigurationBuilder builder() {return new LettuceClientConfigurationBuilder();}

點進去查看LettuceClientConfigurationBuilder類,未發現連接池的配置方法。

換個思路:看看LettuceClientConfigurationBuilder的子類。發現子類LettucePoolingClientConfigurationBuilder有一個poolConfig。

瞧,找到配置連接池的地方了。如圖:


poolConfig方法如下,想想怎么實現一下?

public LettucePoolingClientConfigurationBuilder poolConfig(GenericObjectPoolConfig poolConfig)

GenericObjectPoolConfig類可以new一個實例設置一下連接池參數。
接著思考,需要一個LettucePoolingClientConfigurationBuilder實例來調poolConfig。
LettucePoolingClientConfigurationBuilder怎么構造呢?注意仔細看下面圖片,LettucePoolingClientConfigurationBuilder是接口LettucePoolingClientConfiguration中的類。

注意:LettucePoolingClientConfiguration接口有一個builder()方法可以返回一個LettucePoolingClientConfigurationBuilder。

那么,直接

LettucePoolingClientConfiguration.builder()

就可以得到LettucePoolingClientConfigurationBuilder。

LettucePoolingClientConfigurationBuilder有了。就可以設置連接池配置。

LettucePoolingClientConfigurationBuilder.poolConfig(GenericObjectPoolConfig poolConfig)

連一起就是:

//偽代碼 LettucePoolingClientConfiguration.builder().poolConfig(GenericObjectPoolConfig poolConfig)

注意:返回的仍然是LettucePoolingClientConfigurationBuilder。可以繼續配置其他數據。例如

//配置超時時間 .commandTimeout(Duration.ofMillis(timeout))

但是,得到的是LettucePoolingClientConfigurationBuilder。

那我需要的是一個LettuceClientConfiguration接口啊,怎么聯系起來。看看它的子類,有一個子類接口:LettucePoolingClientConfiguration。可以用它LettucePoolingClientConfiguration來替代。

看看LettucePoolingClientConfigurationBuilder類中有沒有什么方法可以返回LettucePoolingClientConfiguration。巧了,看下圖藍色框框:build()方法。

參數2:LettuceClientConfiguration配置關鍵代碼

//偽代碼 LettucePoolingClientConfiguration.builder().poolConfig(GenericObjectPoolConfig poolConfig).build();

返回一個LettucePoolingClientConfiguration。是LettuceClientConfiguration的子類接口。
然后就可以實現一個LettuceConnectionFactory了。

步驟2:封裝自定義的redis切庫工具

實現一個自定義的RedisTemplate需要什么?

1)LettuceConnectionFactory連接池。上一節已經注入實現。這里直接作為自定義的redisUtil中的生成generateRedisTemplate的方法,作為參數傳入。
2)設置key、value的序列化方式。傳入參數keySerializer,valueSerializer。

RedisTemplate redisTemplate = new RedisTemplate();redisTemplate.setKeySerializer(keySerializer); redisTemplate.setHashKeySerializer(keySerializer); redisTemplate.setValueSerializer(valueSerializer); redisTemplate.setHashValueSerializer(valueSerializer);

keySerializer類型是:RedisSerializer<?> , valueSerializer類型是:RedisSerializer<?> 。

3)注意:返回RedisTemplate實例前需要執行redisTemplate.afterPropertiesSet()來初始化bean。

切庫關鍵代碼

//切庫 lettuceConnectionFactory.setDatabase(database); lettuceConnectionFactory.afterPropertiesSet(); lettuceConnectionFactory.resetConnection();//傳入LettuceConnectionFactory連接池對象 redisTemplate.setConnectionFactory(lettuceConnectionFactory); redisTemplate.afterPropertiesSet();

步驟3:redis中讀取List序列化的byte數組

利用上一節實現的自定義的RedisTemplate來實例化一個ByteArrayRedisTemplate<String, byte[]>。

實例化ByteArrayRedisTemplate<String, byte[]>關鍵步驟

keySerializer類型傳入參數:RedisSerializer.string() , valueSerializer類型傳入參數:RedisSerializer.byteArray()。

使用byteArrayRedisTemplate實例讀取數據代碼示例

例如:redis中數據類型是List< UserEventAction>實例進行序列化成的byte[]。

byte[] tmp = byteArrayRedisTemplate.opsForValue().get(prefix + userKey); //讀取后對數據進行反序列化后進行強轉 List<UserEventAction> obj = (List<UserEventAction>) SerializeUtil.unserialize(tmp);

總結

以上是生活随笔為你收集整理的封装自定义的redis切库工具类ByteArrayRedisTemplate,读取byte数组反序列化成List<Object>的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。