SpringBoot:泛型对象存取与转换<JedisPool>

操作redis时候泛型、对象操作的比较频繁不可能都转成字符串然后再查询转换比较复杂了,这个时候我们需要对存取转换进行封装便于快速开发

1、导入依赖

<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.8.1</version>
</dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>1.7.2.RELEASE</version>
</dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.4.2</version>
</dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version>
</dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope>
</dependency>

2、Redis服务通用类

@Service
public class RedisService {@AutowiredJedisPool jedisPool;/*** 设置对象* @param key 键* @param value 值* @param exTime 过期时间* @param <T> 返回类型* @return*/public <T> boolean set(String key,T value,int exTime) {Jedis jedis = null;try {jedis = jedisPool.getResource();String str = beanToString(value);if (str == null || str.length() <= 0) {return false;}//设置过期时间if(exTime <= 0) {jedis.set(key, str);} else {jedis.setex(key, exTime, str);}return true;} finally {returnToPool(jedis);}}/*** 根据key获取对象返回* @param key* @param clazz* @param <T>* @return*/public <T> T get(String key,Class<T> clazz) {Jedis jedis = null;try {jedis = jedisPool.getResource();String str = jedis.get(key);T t = stringToBean(str,clazz);return t;}finally {returnToPool(jedis);}}/*** bean 转 String* @param value* @param <T>* @return*/public static <T> String beanToString(T value) {if(value == null) {return null;}Class<?> clazz = value.getClass();if(clazz == int.class || clazz == Integer.class) {return ""+value;}else if(clazz == String.class) {return (String)value;}else if(clazz == long.class || clazz == Long.class) {return ""+value;}else {return JSON.toJSONString(value);}}/*** string转bean* @param str* @param clazz* @param <T>* @return*/public static <T> T stringToBean(String str, Class<T> clazz) {if(str == null || str.length() <= 0 || clazz == null) {return null;}if(clazz == int.class || clazz == Integer.class) {return (T)Integer.valueOf(str);}else if(clazz == String.class) {return (T)str;}else if(clazz == long.class || clazz == Long.class) {return (T)Long.valueOf(str);}else {return (T) JSON.parseArray(str,clazz);}}/*** 关闭连接* @param jedis*/private void returnToPool(Jedis jedis) {if(jedis != null) {jedis.close();}}/*** 判断key是否存在* */public <T> boolean exists(String key) {Jedis jedis = null;try {jedis = jedisPool.getResource();return jedis.exists(key);}finally {returnToPool(jedis);}}
}

3、实体类实现序列化接口 

public class Test implements Serializable {}

4、测试

/*** <b>Function: </b> todo** @program: BaseTest* @Package: com.kingbal.king.dmp* @author: dingcho* @date: 2024/01/09* @version: 1.0* @Copyright: 2024 www.kingbal.com Inc. All rights reserved.*/
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class BaseTest {@Autowiredprivate RedisService redisService;@Testpublic void testGetList() {List<Test> testList = null;String key = "test:list";long start = System.currentTimeMillis();if(redisService.exists(key)) {System.out.println("redis 读取 "+ key+" 数据");testList = (List<Test>) redisService.get(key, Test.class);}else{System.out.println("redis 读写入"+ key+" 数据");testList = Lists.newArrayList();....redisService.set(key, testList, -1);}System.out.println(testList.size());log.error("耗时 >> " + (System.currentTimeMillis() - start));}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/618924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络技术基础入门全套实验-厦门微思网络CCNA实验手册

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 微思简介&#xff08;https://www.xmws.cn) 微思成立于2002年&#xff0c;是一个诚信敬业、积极向上、充满活力、专注技术服务的企业。 微思获得了八…

为什么修改了.gitignore文件不生效,Git常见问题解决

Git 是基于 Linux内核开发的版本控制工具。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,一般不需要服务器端软件支持(注:这得分是用什么样的服务端,使用http协议或者git协议等不太一样。并且在push和pull的时候和服务器端还是有交互的。),…

电子学会2023年12月青少年软件编程(图形化)等级考试试卷(四级)真题,含答案解析

青少年软件编程(图形化)等级考试试卷(四级) 分数:100 题数:24 一、单选题(共10题,共30分) 1. 运行下列程序,输入“abcdef”,程序结束后,变量“字符串”是?( )

Linux--部署 Tomcat 及其负载均衡

1.案例前置知识点 1&#xff09;Tomcat简介 名称由来&#xff1a;Tomcat最初是由 Sun的软件构架师詹姆斯邓肯戴维森开发的。后来他帮助将其变 为开源项目&#xff0c;并由Sun贡献给Apache软件基金会。由于大部分开源项目OReilly都会出一本相关的 书&#xff0c;并且将其封面设…

SpringMVC视图

文章目录 1、ThymeleafView2、转发视图3、重定向视图4、视图控制器view-controller5、总结 SpringMVC中的视图是View接口&#xff0c;视图的作用渲染数据&#xff0c;将模型Model中的数据展示给用户SpringMVC视图的种类很多&#xff0c;默认有转发视图和重定向视图当工程引入js…

2024几个测试接口的好工具,效率加倍~

作为一名后端程序员&#xff0c;一定要对自己写的接口负责&#xff0c;保证接口的正确和稳定性。因此&#xff0c;接口测试也是后端开发中的关键环节。 但我相信&#xff0c;很多朋友是懒得测试接口的&#xff0c;觉得这很麻烦。一般自己写的接口自己都不调用&#xff0c;而是…

onlyoffice(windows+linux)服务搭建详解以及api集成和踩坑说明

目录 onlyoffice介绍: 1、windows环境搭建onlyoffice服务 1、需要下载相关软件 1.1、Erlang安装步骤 1.2、RabbitMQ安装步骤 1.3、PostgreSQL安装步骤 1.4、ONLYOFFICE安装步骤 2、linux环境搭建onlyoffice服务 onlyoffice介绍: ONLYOFFICE 文档 是一个开源办公套件,…

在Linux上搭建Maven仓库

目录 一、下载安装包二、安装maven三、修改配置文件settings.xml四、配置环境变量五、测试maven是否可用 一、下载安装包 我在这里为大家准备好了apache-maven-3.5.0-bin.tar.gz&#xff0c;百度网盘下载链接如下&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1bGun…

NodeJs 第十一章 express

Express 是基于 Node.js 平台&#xff0c;快速、开放、极简的 web 开发框架 基本使用 安装 npm install express --save示例代码 const express require(express) const app express() const port 3000app.get(/, (req, res) > {res.send(Hello World!) })app.listen(…

NSR原理描述

相关概念 HA&#xff08;High Availability&#xff09;&#xff1a;高可靠性/高实用性的简称&#xff0c;这里指主备板间的备份通道。NSF&#xff08;Non-Stop Forwarding&#xff09;&#xff1a;不间断转发。NSR&#xff08;Non-Stop Routing&#xff09;&#xff1a;不间断…

详细分析Mybatis中的<foreach>标签

目录 前言1. 基本语法2. Demo3. 实际例子 前言 对于Java专栏&#xff1a;Java专栏 对于Mybatis的相关知识可看我之前的文章&#xff1a;Mybatis从入门到精通&#xff08;全&#xff09; 对于其余Java框架可看我之前的文章&#xff1a;java框架 零基础从入门到精通的学习路线 附…

24年春招要来了,大学生第一次实习去大厂重要么?

春招要来了&#xff0c;大学生第一次实习去大厂重要么? 1.错峰实习。2.继任直招。3.优化简历&#xff0c;匹配优先。4. 善用新技术 先说一个暴论: 实习一定要去大厂&#xff0c;尤其是非头部院校的同学&#xff0c;你就算进去打螺丝&#xff0c;也要进大厂 关于我&#xff1a…

无需任何三方库,在 Next.js 项目在线预览 PDF 文件

前言&#xff1a; 之前在使用Vue和其它框架的时候&#xff0c;预览 PDF 都是使用的 PDFObject 这个库&#xff0c;步骤是&#xff1a;下载依赖&#xff0c;然后手动封装一个 PDF 预览组件&#xff0c;这个组件接收本地或在线的pdf地址&#xff0c;然后在页面中使用组件的车时候…

Linux部署 .netcore网站

1.下载ubuntu镜像&#xff0c;ubuntu-18.04.6-desktop-amd64.iso&#xff0c; 2.安装VM虚拟机 16.2.3 build 版本 3.安装镜像 4.开启ssh&#xff0c;<网上搜 balabala> 5.先安装ssh,然后重启ssh,检查ssh状态&#xff0c;都是正常&#xff0c;但是fianlshell总是无法登录。…

微店获得微店商品详情 API(micro.item_get)

要获取微店商品详情&#xff0c;你需要使用微店的 API&#xff08;应用程序接口&#xff09;。在微店的 API 中&#xff0c;有一个名为 micro.item_get 的接口&#xff0c;可以用于获取商品详情。 要使用 micro.item_get API&#xff0c;你需要按照以下步骤进行操作&#xff1…

基于bp神经网络的共享单车需求量预测

目录 摘要 BP神经网络参数设置及各种函数选择 参数设置 训练函数 传递函数 学习函数 性能函数 显示函数 前向网络创建函数 BP神经网络训练窗口详解 训练窗口例样 训练窗口四部详解 基于BP神经网络的租金预测 代码下载:基于bp神经网络的共享单车需求量预测(代码完整是,数据齐…

【python】08.面向对象编程基础

面向对象编程基础 活在当下的程序员应该都听过"面向对象编程"一词&#xff0c;也经常有人问能不能用一句话解释下什么是"面向对象编程"&#xff0c;我们先来看看比较正式的说法。 "把一组数据结构和处理它们的方法组成对象&#xff08;object&#…

Redis入门-redis的五大数据类型+三种特殊的数据类型

前言&#xff1a;Redis有五大基本类型与三种特殊类型的介绍 Redis有五大基本类型&#xff1a;字符串&#xff08;string&#xff09;、哈希&#xff08;hash&#xff09;、列表&#xff08;list&#xff09;、集合&#xff08;set&#xff09;和有序集合&#xff08;sorted se…

大模型实战营Day4 XTuner大模型单卡低成本微调实战

FINETUNE简介 LLM下游应用中&#xff0c;增量预训练和指令跟随是经常会用到的两种微调模式 指令跟随微调 使用场景&#xff1a;让模型学会对话模板&#xff0c;根据人类指令进行对话 训练数据&#xff1a;高质量的对话&#xff0c;问答数据 为什么需要指令微调&#xff1f; 因为…

前端重置密码报错记录

昨天晚上&#xff0c;我写了重置密码的前端&#xff0c;测试的时候报错 今天上午&#xff0c;我继续试图解决这个问题&#xff0c;我仔细检查了一遍&#xff0c;前端没有问题 可以正常接收输入的数据并且提交 但是后端接收到的数据为空&#xff0c;后端接口也没有问题 但后端收…