封装自定义的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():
點進去查看LettuceClientConfigurationBuilder類,未發現連接池的配置方法。
換個思路:看看LettuceClientConfigurationBuilder的子類。發現子類LettucePoolingClientConfigurationBuilder有一個poolConfig。
瞧,找到配置連接池的地方了。如圖:
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。
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>的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybatis进行CRUD操作时返回值不
- 下一篇: centos 6.2安装mysql_Ce