瑞_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,一经查实,立即删除!

相关文章

常用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 语句 …

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

对于一些个人或者企业来说&#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 下载、安…

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…

蓝桥杯刷题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…

种花

分情况&#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 什么是对象的属…

project.config.json 文件内容错误] project.config.json: libVersion 字段需为 string, string

家人们&#xff0c;遇到了一个新的报错 于是从网上找了各种方法&#xff0c;有说把开发者工具关闭重启的&#xff0c;有说开发者工具下载重新下载的&#xff0c;有说开发者工具路径安装得在C盘的&#xff0c;均没有效果 解决方法&#xff1a; 1、运行项目&#xff0c;在开发者…

好的测试数据管理,到底要怎么做?

你的组织是否实施了测试数据管理&#xff1f;如果你的组织处理关键或敏感的业务数据&#xff0c;测试数据管理肯定会让组织受益。与测试数据相关的问题占所有软件缺陷的 15%&#xff0c;这一事实强调了测试数据的重要性。本文将准确讨论测试数据经理职责、测试数据经理需要什么…

java-ssm-jsp广播剧制作订阅系统

java-ssm-jsp广播剧制作订阅系统 获取源码——》公主号&#xff1a;计算机专业毕设大全

13.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-如果没有工具就创造工具

内容参考于&#xff1a; 易道云信息技术研究院VIP课 上一个内容 &#xff1a;12.游戏网络通信存在的问题 现在把游戏网络的架构看了一个小小的大概&#xff0c;可以用它的接口发数据接收数据了&#xff0c;如果真正想用它这一套东西&#xff0c;真正核心不在于它的接口而在于…

2024GAS《声学大讲堂》

由中国电子音响行业协会主办&#xff0c;上海市浦东新区先进音视频技术协会承办的GAS《声学大讲堂》2021年开播&#xff0c;三年来GAS《声学大讲堂》开设了“沉浸声音频与艺术”、“智能车载音频”、“智能可穿戴”、“智能耳机”、“智能音箱”、“专业音响”、“助听/辅听设备…

R语言安装和简单入门HelloWorld用法

R语言安装和简单入门HelloWorld用法 #R语言安装地址 https://www.r-project.org/ click->CRAN mirror->选择China下列表&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/CRAN/ 选择Download R for Windows 选择base Download R-4.3.2 for Windows 下载文件R-4.3.2-…