封装自定义的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>相关推荐
- java字符串替换 数组,Java工具类-拆分字符串组装数组,替换字符
Java工具类--拆分字符串组装数组,替换字符 >>>>>>>>>>>>>>>>>>> ...
- Redis存储缓存工具类简单封装
一.公共实体类 (1)User.java package cn.xiyou.entity;import java.io.Serializable;/*** User实体* * @author XIOA ...
- Redis使用及工具类
原地址:https://www.cnblogs.com/wyy123/p/6078593.html [学会安装redis] 从redis.io下载最新版redis-X.Y.Z.tar.gz后解压,然后 ...
- redis分布式锁工具类
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.redis.core. ...
- 「问题解决」java web项目打成jar包运行后工具类无法读取模板文件的解决方法
介绍语 本号主要是Java常用关键技术点,通用工具类的分享:以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+d ...
- 用第三方工具类,将JavaBean、List、MapString,Object转成JSON文本
导入第三方jar包: >commons-beanutils-1.7.0.jar >commons-collections-3.1.jar >commons-lang-2.5.jar ...
- java properties文件 安全_java 数据库读取工具类(读取config.properties配置文件)[包含线程安全] | 学步园...
java 数据库读取工具类(读取config.properties配置文件)[包含线程安全] 数据库读取工具类 package com.db; import java.sql.Connection; ...
- Arrays工具类和二维数组
一.数组的更多内容 1.1 Arrays工具类 JDK提供的java.util.Arrays工具类,包含了常用的数组操作,方便我们日常开发.Arrays类包含了:排序.查找.填充.打印内容等常见的操作 ...
- 将字符串,数组等任意格式转为json(JSON)数据,Arrays是数组工具类,将任意数组转字符串或数组操作
1:将字符串数据转json数组返回给前端,注意使用的类是alibaba的 import com.alibaba.fastjson.JSONArray; JSONArray.parse(String t ...
最新文章
- 谷歌最强 NLP 模型 BERT 解读
- 伯努利分布方差_统计知识(4)——分布
- LCS(最长公共子串)系列问题
- boost::uuid::string_generator相关的测试程序
- 人工智能、机器学习和深度学习的区别?
- IOS15.0的适配
- [转]LVS负载均衡(LVS简介、三种工作模式、十种调度算法)
- 一个USB HUB电路分享
- Nexus 3.31.1-01搭建 maven 私服 windows
- 【JAVA基础篇】反射
- JS的三大组成(ES,DOM,BOM)
- mysql dba环境验收_面对一个全新的环境,作为一个Mysql DBA,应该了解
- 自学python好找工作么-非计算机专业自学Python好找工作吗?
- MooseFs的使用与操作
- PyCharm2021设置成中文版
- 两台电脑服务器文件同步,多台电脑怎么实现数据同步
- GMP法规附录《计算机化系统》那些事儿
- 如何有效破解PDF文件的密码?
- 分了很多节的word文档,使用尾注插入的参考文献,最后怎么在参考文献之后加入致谢?
- 大数据分析技术种类与应用
热门文章
- 一个前端框架应该有的一些公共函数
- data.frame类型数据如何将第一列值替换为行号
- 关于HTML5标签不兼容(IE6~8)
- 《APUE》第6章笔记
- C#非泛型集合类-使用HashTable组织数据
- python有哪些常用的package_个人Python常用Package及其安装
- python科赫曲线绘制正方形_Python数据处理从零开始----第四章(可视化)(14)使用seaborn绘制热图...
- linux中断处理模式,Linux在保护模式下的中断处理分析.pdf
- [转载] 详解Java中静态方法
- [转载] 解析Java的JNI编程中的对象引用与内存泄漏问题