瑞_Redis_Redis的Java客户端

文章目录

    • 1 Redis的Java客户端
      • 1.1 Jedis快速入门
        • 1.1.1 入门案例
          • 1.1.1.1 项目构建
          • 1.1.1.2 引入依赖
          • 1.1.1.3 建立连接
          • 1.1.1.4 释放资源
          • 1.1.1.5 测试
          • 1.1.1.6 完整测试类代码
        • 1.1.2 Jedis连接池
          • 1.1.2.1 连接池工具类
          • 1.1.2.2 改造原始代码

🙊 前言:本文章为瑞_系列专栏之《Redis》的基础篇的Redis的Java客户端章节。由于博主是从B站黑马程序员的《Redis》学习其相关知识,所以本系列专栏主要是针对该课程进行笔记总结和拓展,文中的部分原理及图解等也是来源于黑马提供的资料,特此注明。本文仅供大家交流、学习及研究使用,禁止用于商业用途,违者必究!


主机操作系统:Windows10
VMware版本: VMware Workstation 16.2.4
Linux版本:CentOS 7 64位
远程连接工具:MobaXterm_Personal_23.2
Redis版本:redis-6.2.6.tar.gz
Redis客户端:resp-2022.2.0.0

相关链接:《瑞_VMware虚拟机安装Linux纯净版(含卸载,图文超详细)》
相关链接:《瑞_Redis_初识Redis(含安装教程)》
相关链接:《瑞_Redis_Redis客户端》
相关链接:《瑞_Redis_Redis命令》

Ray-Logo

1 Redis的Java客户端

  在Redis官网中提供了各种语言的客户端,地址:https://redis.io/docs/clients/

在这里插入图片描述


  标记为❤的就是推荐使用的java客户端,包括⬇️

  • Jedis和Lettuce:这两个主要是提供了Redis命令对应的API,方便我们操作Redis,而SpringDataRedis又对这两种做了抽象和封装,因此我们后期会直接以SpringDataRedis来学习。
  • Redisson:是在Redis基础上实现了分布式的可伸缩的java数据结构,例如Map.Queue等,而且支持跨进程的同步机制:Lock.Semaphore等待,比较适合用来实现特殊的功能需求。

在这里插入图片描述

Spring Data Redis 底层兼容了 Jedis 和 Lettuce



1.1 Jedis快速入门

  Jedis的官网地址:http://github.com/redis/jedis

1.1.1 入门案例

1.1.1.1 项目构建

  新建一个普通的 Maven 项目,项目名为jedis-demo,如下

在这里插入图片描述

1.1.1.2 引入依赖

  pom.xml 引入依赖如下:

        <!--jedis--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.0</version></dependency><!--单元测试--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.7.0</version><scope>test</scope></dependency>

在这里插入图片描述

瑞:随时时间的推移,该版本可能已经较为老旧(但适配JDK1.8)如果下载不到该依赖,可以参考下面的配置

  能下载到 jedis 3.7.0版本的镜像仓库的Maven配置

      <mirror><id>nexus-aliyun</id><mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf><name>Nexus aliyun</name><url>https://maven.aliyun.com/repository/public</url></mirror>
1.1.1.3 建立连接

  新建一个单元测试类JedisTest,内容如下:

在这里插入图片描述

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import redis.clients.jedis.Jedis;import java.util.Map;/*** Jedis快速入门测试** @author LiaoYuXing-Ray* @version 1.0* @createDate 2024/3/1 21:59**/
public class JedisTest {private Jedis jedis;@BeforeEachvoid setUp() {// 1.建立连接(IP换成你Redis服务的IP)jedis = new Jedis("192.168.13.128", 6379);// 2.设置密码(如果密码不一样请记得替换)jedis.auth("123456");// 3.选择库jedis.select(0);}
}
1.1.1.4 释放资源
@AfterEach
void tearDown() {if (jedis != null) {jedis.close();}
}

瑞:释放连接千万不能忘,否则容易造成内存泄漏,内存泄漏的积累可能会导致内存溢出,后果非常严重

1.1.1.5 测试
@Test
void testString() {// 存入数据String result = jedis.set("name", "虎哥");System.out.println("result = " + result);// 获取数据String name = jedis.get("name");System.out.println("name = " + name);
}@Test
void testHash() {// 插入hash数据jedis.hset("user:1", "name", "Jack");jedis.hset("user:1", "age", "21");// 获取Map<String, String> map = jedis.hgetAll("user:1");System.out.println(map);
}
1.1.1.6 完整测试类代码
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import redis.clients.jedis.Jedis;import java.util.Map;/*** Jedis快速入门测试** @author LiaoYuXing-Ray* @version 1.0* @createDate 2024/3/1 21:59**/
public class JedisTest {private Jedis jedis;@BeforeEachvoid setUp() {// 1.建立连接(IP换成你Redis服务的IP)jedis = new Jedis("192.168.13.128", 6379);// 2.设置密码(如果密码不一样请记得替换)jedis.auth("123456");// 3.选择库jedis.select(0);}@AfterEachvoid tearDown() {if (jedis != null) {jedis.close();}}@Testvoid testString() {// 存入数据String result = jedis.set("name", "瑞神");System.out.println("result = " + result);// 获取数据String name = jedis.get("name");System.out.println("name = " + name);}@Testvoid testHash() {// 插入hash数据jedis.hset("user:1", "name", "Jack");jedis.hset("user:1", "age", "21");// 获取Map<String, String> map = jedis.hgetAll("user:1");System.out.println(map);}
}

  运行结果如下⬇️

在这里插入图片描述

瑞:
  如果连接不上Linux中的Redis服务,可以参考《附:解决Liunx防火墙和开放端口号》
  其它Redis数据类型的命令不演示,有需要可以参考《瑞_Redis_Redis命令》

1.1.2 Jedis连接池

  Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此我们推荐大家使用Jedis连接池代替Jedis的直连方式。

  有关池化思想,并不仅仅是这里会使用,很多地方都有,比如说我们的数据库连接池,比如我们 tomcat 中的线程池,这些都是池化思想的体现。

1.1.2.1 连接池工具类

瑞:以下代码基于本文1.1.1章节的项目

  创建JedisConnectionFactory连接池工具类

在这里插入图片描述

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;/*** Jedis 连接池工具类** @author LiaoYuXing-Ray* @version 1.0* @createDate 2024/3/1 22:32**/
public class JedisConnectionFactory {private static final JedisPool jedisPool;static {// 配置连接池JedisPoolConfig poolConfig = new JedisPoolConfig();// 最大连接poolConfig.setMaxTotal(8);// 最大空闲连接poolConfig.setMaxIdle(8);// 最小空闲连接poolConfig.setMinIdle(0);// 设置最长等待时间,单位:mspoolConfig.setMaxWaitMillis(1000);// 创建连接池对象(记得替换为你Redis服务的IP,端口,密码)jedisPool = new JedisPool(poolConfig,"192.168.13.128",6379,1000,"123456");}// 获取Jedis对象public static Jedis getJedis(){return jedisPool.getResource();}
}

代码说明:

  • 1) JedisConnectionFacotry:工厂设计模式是实际开发中非常常用的一种设计模式,我们可以使用工厂,去降低代的耦合,比如Spring中的Bean的创建,就用到了工厂设计模式

瑞:工厂模式详情可以参考《瑞_23种设计模式_工厂模式》

  • 2)静态代码块:随着类的加载而加载,确保只能执行一次,我们在加载当前工厂类的时候,就可以执行static的操作完成对连接池的初始化
  • 3)最后提供返回连接池中连接的方法
1.1.2.2 改造原始代码

  对JedisTest类进行如下改造,测试方法不变

    @BeforeEachvoid setUp() {// 1.建立连接(IP换成你Redis服务的IP)
//        jedis = new Jedis("192.168.13.128", 6379);// 代码改造jedis = JedisConnectionFactory.getJedis();// 2.设置密码(如果密码不一样请记得替换)jedis.auth("123456");// 3.选择库jedis.select(0);}@AfterEachvoid tearDown() {if (jedis != null) {// 代码未修改,但是执行逻辑变为向连接池归还连接对象jedis.close();}}

在这里插入图片描述

  代码说明:

  在我们完成了使用工厂设计模式来完成代码的编写之后,我们在获得连接时,就可以通过工厂来获得。而不用直接去new对象,降低耦合,并且使用的还是连接池对象。

  当我们使用了连接池后,我们关闭连接其实并不是关闭,而是将Jedis连接对象还回连接池




本文是博主的粗浅理解,可能存在一些错误或不完善之处,如有遗漏或错误欢迎各位补充,谢谢

  如果觉得这篇文章对您有所帮助的话,请动动小手点波关注💗,你的点赞👍收藏⭐️转发🔗评论📝都是对博主最好的支持~


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

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

相关文章

基于单片机的声光控制节能灯设计

摘 要:在当今社会,节约用电是低碳生活的基本行为之一,但是一些公众场所电力浪费现象依然存在,特别是长明灯、常亮屏等屡见不鲜,造成了严重的电力浪费。针对这种电力浪费现象,该文基于STC89C52单片机设计了一种声光控制节能灯,利用光敏电阻、光信息及语音信号控制电路收集…

常用sql语句及其优化

文章目录 介绍常用sql语句1. 数据查询1.1 SELECT 语句1.2 DISTINCT 关键字1.3 WHERE 子句1.4 ORDER BY 子句1.5 LIMIT 关键字 2. 数据更新2.1 INSERT INTO 语句2.2 UPDATE 语句2.3 DELETE FROM 语句 3. 数据管理3.1 CREATE TABLE 语句3.2 ALTER TABLE 语句3.3 DROP TABLE 语句 …

蓝桥辅导之管道

蓝桥辅导之管道 核心思想&#xff1a;二分 二分时间 若t时刻成立 则之后也一定成立将mid时刻时每个阀门的水的流动区间加入对组 合并区间 最终判断是否覆盖全管道l1 && r m; #include <iostream>#include <cstring>#include <algorithm>#define…

批量自动加好友神器!微信快速扩友秘籍!

对于一些个人或者企业来说&#xff0c;传统的人工添加好友方式往往会出现效率低下&#xff0c;费时费力的问题。那么&#xff0c;有没有一种快速、便捷、安全的方式来解决这个问题呢&#xff1f;答案当然是肯定的&#xff0c;那就是通过使用微信管理系统来解决这一问题。 在微…

基于java+springboot景区行李寄存管理系统设计和实现

基于javaspringboot景区行李寄存管理系统设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取…

5GC SBA架构

协议标准&#xff1a;Directory Listing /ftp/Specs/archive/23_series/23.501/ (3gpp.org) NF描述说明NSSFNetwork Slice Selection Function网络切片选择&#xff0c;根据UE的切片选择辅助信息、签约信息等确定UE允许接入的网络切片实例。NEF Network Exposure Function网络开…

疾控中心的污水采样瓶用的是什么材质

疾控中心的污水采样瓶采用的材质是聚乙烯或聚丙烯塑料。这种材质的污水采样瓶具有耐腐蚀、耐高压、无毒无味、重量轻、易于携带等优点。此外&#xff0c;这种材质的污水采样瓶还可以在高温下消毒&#xff0c;不会变形或破裂。 疾控中心的污水采样瓶通常有不同的容积和形状&…

Harbor高可用(haproxy和keepalived)

Harbor高可用&#xff08;haproxy和keepalived&#xff09; 文章目录 Harbor高可用&#xff08;haproxy和keepalived&#xff09;1.Harbor高可用集群部署架构1.1 主机初始化1.1.1 设置网卡名和ip地址1.1.2 设置主机名1.1.3 配置镜像源1.1.4 关闭防火墙1.1.5 禁用SELinux1.1.6 设…

SpringBoot 自定义映射规则resultMap association一对一

介绍 例&#xff1a;学生表&#xff0c;班级表&#xff0c;希望在查询学生的时候一起返回该学生的班级&#xff0c;而一个实体类封装的是一个表&#xff0c;如需要多表查询就需要自定义映射。 表结构 班级表 学生表 SQL语句 SELECT a.id,a.name,a.classes,b.id classes…

Charles抓包 - 安装、激活、证书配置

最近刚好又遇到了抓包的需求&#xff0c;之前一直使用 Fiddler 抓包&#xff0c;这几年一直听大家都在用 Charles 抓包&#xff0c;正好一起了解下&#xff08;一般建议掌握一种抓包方式即可&#xff0c;都可以解决同种需求场景&#xff09; 抓包 Fiddler抓包 Charles 下载、安…

[机器视觉]halcon应用实例 多ROI模板匹配

本示例是单ROI的功能扩展示例&#xff0c;多ROI.后面有空了将出用户自定义ROI。 比单ROI增加ROI区域的连接和合并。还有for的实例应用。步骤同单ROI一样。不懂的可以看一下单ROI文章。[机器视觉]halcon应用实例 单ROI模板匹配-CSDN博客 有需要的可以【点赞】【关注】【收藏】…

2024年新提出的算法|LEA爱情进化算法(Love Evolution Algorithm)

Love Evolution Algorithm: a stimulus–value–role theory-inspired evolutionary algorithm for global optimization 爱情进化算法Love Evolution Algorithm&#xff0c;LEA&#xff0c;于2024年2月发表在中科院3区SCI期刊 The Journal of Supercomputing。 1、简介 本文提…

幸运星数(爷再也不想用pow了)

解法&#xff1a; 暴力 #include <iostream> #include <vector> using namespace std; #define endl \nint main() {ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int n;long long sum 0, a;cin >> n;for (int i 1; i < n; i) {a 1;for (in…

#python升级#CentOS 7 python升级到3.11.6

在 CentOS 7 上升级 Python 版本可能会比较复杂&#xff0c;因为 CentOS 7 默认安装的是 Python 2.7&#xff0c;并且系统很多组件依赖于它。不过&#xff0c;可以通过以下步骤尝试升级到 Python 3.11.6&#xff1a; 安装必要的依赖&#xff1a; sudo yum install gcc openssl-…

洛谷P1015回文数

题目描述 若一个数&#xff08;首位不为零&#xff09;从左向右读与从右向左读都一样&#xff0c;我们就将其称之为回文数。 例如&#xff1a;给定一个十进制数 5656&#xff0c;将 5656 加 6565&#xff08;即把 5656 从右向左读&#xff09;&#xff0c;得到 121121 是一个…

蓝桥杯刷题2

1. 修建灌木 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);int n scan.nextInt();for (int i 1;i < n1;i){int distance Math.max(i-1,n-i);System.out.println(distance*2);}scan.close…

软件设计师软考题目解析12 --每日五题

想说的话&#xff1a;要准备软考了。0.0&#xff0c;其实我是不想考的&#xff0c;但是吧&#xff0c;由于本人已经学完所有知识了&#xff0c;只是被学校的课程给锁在那里了&#xff0c;不然早找工作去了。寻思着反正也无聊&#xff0c;就考个证玩玩。 本人github地址&#xf…

种花

分情况&#xff1a; 第一盆k种选择&#xff0c;之后全部k-1种选择 每次相乘结果对1e97取模 #include <iostream> #include <vector> #include <algorithm> using namespace std; #define endl \n const int N 1e9 7;int main() {ios::sync_with_stdio(f…

微信小程序iOS禁止上下拉显示白边

先上图暴露出问题 iOS端这个页面明明正好显示的&#xff0c;非要能下拉上拉给显示出来点白边。这样不就不好看了嘛。。 想了想是不是支持页面下拉导致的&#xff0c;加入以下代码到json文件中。 {"enablePullDownRefresh": false,"usingComponents": {} }…

java009 - Java面向对象基础

1、类和对象 1.1 什么是对象 万物皆对象&#xff0c;客观存在的事物皆为对象。 1.2 什么是面向对象 1.3 什么是类 类是对现实生活中一类具有共同属性和行为的事物抽象。 特点&#xff1a; 类是对象的数据类型类是具有相同属性和行为的一组对象的集合 1.4 什么是对象的属…