redis学习(三)——java整合redis

Jedis

Jedis可以用于java连接redis数据库

新建一个maven项目,导入Jedis依赖

<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>RELEASE</version><scope>test</scope>
</dependency>
public class RedisTest {private Jedis jedis;@BeforeEachvoid setUp() {// 建立连接jedis = new Jedis("192.168.211.132", 6379);// 设置密码//jedis.auth("123456");// 选择库jedis.select(0);}@Testvoid testString() {// 插入数据,方法名称就是redis命令名称,非常简单String result = jedis.set("name", "李四");System.out.println("result = " + result);// 获取数据String name = jedis.get("name");System.out.println("name = " + name);}@AfterEachvoid tearDown() {// 释放资源if (jedis != null) {jedis.close();}}
}

运行结果:

在这里插入图片描述

如果运行报Failed to resolve org.junit.platform:junit-platform-launcher:1.8.2可能是由于IDEA版本的问题,可以试一下添加以下依赖

<!--        Failed to resolve org.junit.platform:junit-platform-launcher:1.8.2-->
<dependency><groupId>org.junit.platform</groupId><artifactId>junit-platform-launcher</artifactId><scope>test</scope>
</dependency>
Jedis连接池

Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,推荐使用Jedis连接池

public class JedisConnectionFactory {private static final JedisPool jedisPool;static {JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();// 最大连接jedisPoolConfig.setMaxTotal(8);// 最大空闲连接jedisPoolConfig.setMaxIdle(8);// 最小空闲连接jedisPoolConfig.setMinIdle(0);// 设置最长等待时间, msjedisPoolConfig.setMaxWaitMillis(200);jedisPool = new JedisPool(jedisPoolConfig, "192.168.211.132", 6379, 1000);}// 获取Jedis对象public static Jedis getJedis() {return jedisPool.getResource();}
}
springboot整合redis

首先新建一个springboot项目

导入依赖,这里我后面会用到lombok和test测试,一并导入

       <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>2.7.5</version></dependency>
<!--        redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.7.5</version></dependency>
<!--        连接池依赖--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>

application.yml配置文件,配置文件加中文可能会出现问题,如果报错可以去掉中文再试试。

spring:redis:host: 00# redis数据库地址port: 6379  # 端口lettuce:pool:max-active: 8 # 最大连接max-idle: 8 # 最大空闲连接min-idle: 0 # 最小空闲连接max-wait: 100 # 连接等待时间database: 1  # 使用的数据库
redisTemplate使用

新建一个springbootTest类,然后注入redisTemplate,之后就可以使用redisTemplate对redis数据库进行操作了。其中opsForValue()表示对String类型的数据进行操作,如果想对Hash进行操作,使用opsForHash()即可,其余同理。

@SpringBootTest
class DemoApplicationTests {@Autowiredprivate RedisTemplate redisTemplate;/*** 在未添加redisConfig类之前,redisTemplate插入redis数据库会有其他序列化前缀,*/@Testvoid testString() {Object name = redisTemplate.opsForValue().get("zhangsan");redisTemplate.opsForValue().set("aaa", "测试");System.out.println(redisTemplate.opsForValue().get("aaa"));System.out.println(name);}
}

可以看到输出结果,如果使用redisTemplate插入redis1的数据就可以查找到,但是原来就有的数据查不到

在这里插入图片描述

再进redis数据库里面查看可以发现插入数据库中的键和值并不和想象中的一样。这是因为redisTemplate会将Object进行序列化
在这里插入图片描述

自定义RedisTemplate序列化

我们可以自定义redisTemplate的序列化方式

新建一个redisConfig类,key和value都采用String序列化方式

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {// 创建TemplateRedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();// 设置连接工厂redisTemplate.setConnectionFactory(redisConnectionFactory);// 设置序列化工具GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();// key和 hashKey采用 string序列化redisTemplate.setKeySerializer(RedisSerializer.string());redisTemplate.setHashKeySerializer(RedisSerializer.string());// value和 hashValue采用 JSON序列化redisTemplate.setValueSerializer(jsonRedisSerializer);redisTemplate.setHashValueSerializer(jsonRedisSerializer);return redisTemplate;}
}

这里使用了jackson,需要导入一下依赖

<!--        jackson依赖--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency>

新建一个测试类试一下效果

/*** redisTemplate 序列化之后,可以自动将json字符串转化为实体类*/
@Test
void testStringBean() {redisTemplate.opsForValue().set("user:zhangsan", new User("zhangsan", "20", "男"));User user = (User)redisTemplate.opsForValue().get("user:zhangsan");System.out.println(user);
}

这里由于在序列化的时候还存储了实体类的类型,所以可以使用强转实现类型转换

在这里插入图片描述

在这里插入图片描述

使用StringRedisTemplate

StringRedisTemplate的key和value为String类型,可以在获取到json之后使用其他工具类或者手动实现序列化

    @Autowiredprivate StringRedisTemplate stringRedisTemplate;private static final ObjectMapper mapper = new ObjectMapper();
/*** 使用stringredisTemplate 获取对象为字符串,可以通过json工具转化为实体类,无法自动转化*/
@Test
void testStringRedisTemplate() throws Exception{System.out.println(stringRedisTemplate.opsForValue().get("lisi"));User u = new User("lisi","15", "男");stringRedisTemplate.opsForValue().set("user:lisi", mapper.writeValueAsString(u));String s = stringRedisTemplate.opsForValue().get("user:lisi");System.out.println(s);User user = mapper.readValue(s,User.class);System.out.println(user);
}

在这里插入图片描述

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

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

相关文章

Linux 云服务器磁盘挂载简介

云服务器磁盘挂载 一、挂载须知 一般涉及工具或命令&#xff1a;fdisk/gdisk/parted等挂载&#xff08;mounting&#xff09;是指由操作系统使一个存储设备&#xff08;诸如硬盘、CD-ROM或共享资源共享资源上的计算机文件和目录可供用户通过计算机的文件系统访问的一个过程。…

H5营销观察:H5破圈传播有什么秘诀

在移动互联网时代&#xff0c;流量越加碎片化&#xff0c;场景变得相对短促和兴趣导向&#xff0c;一个营销H5产生的每一次点击、每一次互动、每一次流量停留背后都会有相应的动机&#xff0c;也是营销流量效果的成因。 今天&#xff0c;我们一起来探究下什么样的内容更容易传播…

使用 curl 发送 POST 请求的几种方式

HTTP 的 POST 请求通常是用于提交数据&#xff0c;可以通过这篇文章来了解各种提交方式&#xff1a;四种常见的 POST 提交数据方式。做 Web 后端开发时&#xff0c;不可避免地要自己给自己发请求来调试接口&#xff0c;这里要记录的内容是如何使用命令行工具 curl 来进行各种方…

视频相关学习笔记

YUV 和rgb一样是一种表示色彩的格式&#xff0c;Y表示亮度&#xff0c;UV表示色度&#xff08;U是蓝色投影&#xff0c;V是红色投影&#xff09;&#xff0c;只有Y就是黑白的&#xff0c;所以这个格式的视频图片可以兼容黑白电视&#xff0c;所以彩色电视使用的都是YUV 存储方…

使用 DDPO 在 TRL 中微调 Stable Diffusion 模型

引言 扩散模型 (如 DALL-E 2、Stable Diffusion) 是一类文生图模型&#xff0c;在生成图像 (尤其是有照片级真实感的图像) 方面取得了广泛成功。然而&#xff0c;这些模型生成的图像可能并不总是符合人类偏好或人类意图。因此出现了对齐问题&#xff0c;即如何确保模型的输出与…

深入理解强化学习——强化学习的历史:试错学习

分类目录&#xff1a;《深入理解强化学习》总目录 让我们现在回到另一条通向现代强化学习领域的主线上&#xff0c;它的核心则是试错学习思想。我们在这里只对要点做概述&#xff0c;《深入理解强化学习》系列后面的文章会更详细地讨论这个主题。根据美国心理学家R.S.woodworth…

卡尔曼滤波(Kalman Filter)原理及Python实现

Kalman-Filter-Example 项目地址 https://github.com/zhengjie9510/kalman-filter-example 理论公式 详细理论可参考DR_CAN关于卡尔曼滤波器的视频讲解。https://www.bilibili.com/video/BV1dV411B7ME 卡尔曼滤波公式分为预测和更新两部分。 预测公式为&#xff1a; x_hat…

CVE-2022-32991靶场复现

靶场环境&#xff1a; 题目提示了该CMS的welcome.php中存在SQL注入攻击。 CVE官方给出的提示&#xff1a; welcome.php页面存在SQL注入&#xff0c;并且这个参数是eid 打开靶场环境&#xff1a; 页面是一个登陆注册的界面 用户注册&#xff1a; 1 010.com 123456 123456 点击Re…

国家数据局正式揭牌,数据专业融合型人才迎来发展良机

文章目录 每日一句正能量摘要《数据要素安全流通》《Python数据挖掘&#xff1a;入门、进阶与实用案例分析》《数据保护&#xff1a;工作负载的可恢复性 》《Data Mesh权威指南》《分布式统一大数据虚拟文件系统 Alluxio原理、技术与实践》《云原生数据中台&#xff1a;架构、方…

论文阅读(一)城市干道分段绿波协调控制模型研究

[1]酆磊,赵欣,李林等.城市干道分段绿波协调控制模型研究[J].武汉理工大学学报(交通科学与工程版),2021,45(06):1034-1038. 主要内容:该文介绍了基于绿波带宽和关联度的城市干道分段绿波协调控制模型。通过将主干道划分为不同子区域,并根据路段特点进行精准化控制,实现了分段…

【数据库】聚集函数

聚集函数 聚集函数一览AVG() 函数COUNT() 函数MAX() 函数MIN() 函数SUM() 函数 组合聚集函数 聚集函数一览 我们需要汇总数据而不是实际检索&#xff0c;此时我们使用聚集函数进行处理&#xff1b; 聚集函数一览表如下&#xff1a; 函数说明AVG()返回平均值COUNT()返回数量总…

计算机网络之数据链路层(全)

[复习提示] 王道&#xff1a;本章是历年考试中考查的重点。要求在了解数据链路层基本概念和功能的基础上&#xff0c;重点掌握滑动窗口机制、三种可靠传输协议、各种MAC协议、HDLC协议和PPP协议&#xff0c;特别是CSMA/CD协议和以太网帧格式&#xff0c;以及局域网的争用期和最…

Oracle(6) Control File

一、oracle控制文件介绍 1、ORACLE控制文件概念 Oracle控制文件是Oracle数据库的一个重要元素&#xff0c;用于记录数据库的结构信息和元数据。控制文件包含了数据库的物理结构信息、数据字典信息、表空间和数据文件的信息等。在Oracle数据库启动时&#xff0c;控制文件会被读…

华为机试题:HJ6 质数因子

目录 第一章、算法题1.1&#xff09;题目描述1.2&#xff09;文的盲的解题思路与答案1.3&#xff09;牛客链接 友情提醒: 先看文章目录&#xff0c;大致了解文章知识点结构&#xff0c;点击文章目录可直接跳转到文章指定位置。 第一章、算法题 1.1&#xff09;题目描述 题目…

虚拟机安装openEuler系统

openEuler操作系统简介&#xff1a; openEuler是一款开源操作系统。当前openEuler内核源于Linux&#xff0c;支持鲲鹏及其他多种处理器&#xff0c;能够充分释放计算芯片的潜能&#xff0c;是由全球开源贡献者构建的高效、稳定、安全的开源操作系统&#xff0c;适用于数据库、大…

Python学习笔记第六十九天(Matplotlib 直方图)

Python学习笔记第六十九天 Matplotlib 直方图绘制直方图结合 Pandas绘制直方图Series 对象绘制直方图 后记 Matplotlib 直方图 我们可以使用 pyplot 中的 hist() 方法来绘制直方图。 hist() 方法是 Matplotlib 库中的 pyplot 子库中的一种用于绘制直方图的函数。 hist() 方法…

机架式服务器介绍

大家都知道服务器分为机架式服务器、刀片式服务器、塔式服务器三类&#xff0c;今天小编就分别讲一讲这三种服务器&#xff0c;第一篇先来讲一讲机架式服务器的介绍。 机架式服务器定义&#xff1a;机架式服务器是安装在标准机柜中的服务器&#xff0c;一般采用19英寸的标准尺寸…

棋盘格测距-单目相机(OpenCV/C++)

一、文章内容简述&#xff1a; 1’ 通过cv::findChessboardCorners寻找棋盘格角点 2‘ 用cv::solvePnP计算旋转向量rvec和平移向量tvec 3’ 通过公式计算相机到棋盘格的距离 float distance sqrt(tvec.at<double>(0,0) * tvec.at<double>(0,0) tvec.at<do…

【Java】电子病历编辑器源码(云端SaaS服务)

电子病历编辑器极具灵活性&#xff0c;它既可嵌入到医院HIS系统中&#xff0c;作为内置编辑工具供多个模块使用&#xff0c;也可以独立拿出来&#xff0c;与第三方业务厂商展开合作&#xff0c;为他们提供病历书写功能&#xff0c;充分发挥编辑器的功能。 电子病历基于云端SaaS…

虚拟机kafka

一、kafka安装 &#xff08;1&#xff09;解压 &#xff08;2&#xff09;修改名字为kafka212 &#xff08;3&#xff09;进入/opt/soft/kafka212/config目录&#xff0c;配置文件server.properties 21 broker.id0 36 advertised.listenersPLAINTEXT://192.168.91.11:9092 …