当前位置: 首页 > news >正文

Redis基础(5):Redis的Java客户端

RedisJava客户端

前面已经提到了Redis的常用的五种数据结构,并且通过命令行的方式进行了操作,但是在日常使用Redis时,大部分情况下都是基于编码的方式完成的。Redis的官网(https://redis.io/clients)提供了各种语言的客户端:

Redis对于Java语言的支持也十分到位,其提供了很多Java语言的客户端:

Jedis简介

Jedis是一个十分经典的RedisJava客户端,其Redis的命令作为方法名称,学习成本较低(会用Redis就能使用Jedis),简单实用,但是Jedis实例是线程不安全的,多线程环境下需要和连接池配合使用。

Lettuce简介

Lettuce是基于Netty实现的,支持同步、异步和响应式编程的方式,并且线程是安全的,可以完美支持Redis哨兵模式、集群模式和管道模式。

Redisson简介

Redisson是基于Redis实现的分布式、可伸缩的Java数据结构集合。包含了诸如MapQueueLockSemaphoreAtomicLong等强大功能。

SpringDataRedis简介

SpringDataReidsJedisLettuce的结合体:它在两者基础上提供了统一的操作模板(如RedisTemplate)、序列化支持、事务管理及Spring生态集成,既保留了Jedis的简洁性和Lettuce的高并发性能,又通过抽象层简化了Redis的复杂操作,是开发比较推荐的RedisJava客户端

Jedis快速入门

Jedis的快速入门十分简单,主要分为三步(以Maven为例):1.引入依赖、2.建立Redis连接、3.进行Redis操作,接下来就根据这三步进行讲解:

1.引入依赖

由于使用了Maven作为构建工具,引入Jedis的依赖相当的简单,我们只需要在pom.xml文件中引入JedisMaven坐标即可:

<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.2.0</version>
</dependency>

上述代码只是我的版本选择,不一定需要这么高版本的Jedis依赖,根据自己的需求选择即可。

2.建立连接

由于在使用Jedis操作Redis之前,都必须建立和Redis的连接,所以说我们可以将建立Redis连接的代码封装成一个方法,在每次操作之前调用即可:

@BeforeEach
void setUp() {// 建立连接jedis = new Jedis("192.168.181.134", 6379);// 设置密码jedis.auth("your password");// 选择库jedis.select(0);
}

测试时,可以使用@BeforeEach注解自动在每一个测试方法执行前,先执行setUp方法和Redis建立连接。可以直接通过new直接初始化一个Jedis对象,需要传入的参数是Redis主机地址和端口号,如果Redis设置了密码,那么需要通过auth方法进行验证,这和命令行是一样的。

3.Redis操作

当连接建立好之后,就可以通过Jedis中的方法,通过Java代码操作Redis了,Jedis有一个好处就是方法名是以Redis中的命令命名的,所以说操作起来就会十分简单

void testString() {// 存入数据String result = jedis.set("username", "jack");System.out.println(result);// 获取数据String username = jedis.get("username");System.out.println(username);
}

通过set方法向Redis中存入了一条String类型的数据,其Valuejack,其Keyusername;并且通过get方法,我们也能通过Key取得对应的Value
建立了与Redis的连接之后,完成了对应的操作就需要进行资源释放,关闭和Redis的连接:

@AfterEach
void close() {jedis.close();
}

Jedis连接池

上文提到Jedis本身的线程是不安全的,并且在频繁的创建和销毁连接的时候会有性能损耗,所以说建议使用Jedis连接池替代本身Jedis直连的方式。其中Jedis连接池和关系型数据库连接池需要配置的选项差不多,主要需要配置的是:最大连接数最大空闲连接数最长等待时间等……,并且,我们可以将连接池配置的代码封装为一个工具类,之后就可以直接从这个工具类中获取Jedis的连接了:

package com.wzb.util;import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;public class JedisConnectionFactory {private static final JedisPool jedisPool;static {// 配置连接池JedisPoolConfig poolConfig = new JedisPoolConfig();// 设置连接池最大连接数poolConfig.setMaxTotal(8);// 设置连接池最大空闲连接数poolConfig.setMaxIdle(8);// 设置连接池最小空闲连接数poolConfig.setMaxIdle(4);// 设置连接池最大等待时间poolConfig.setMaxWaitMillis(1000);// 创建连接池对象jedisPool = new JedisPool(poolConfig, "192.168.181.134", 6379,1000, "your password"); // 连接池对象初始化需要连接池配置类、Redis主机、端口、超时时间(ms),密码}public static Jedis getConnection() {return jedisPool.getResource();}
}

Jedis本身自带了JedisPool连接池,所以说我们可以直接在类中对JedisPool进行配置,从而完成Jedis连接池的配置。并且我们在工具类中封装了static方法来获取Jedis连接,这个方法是调用的JedisPool中的getResource方法获取Jedis连接的,这个方法会从连接池中返回一个Jedis连接:

有了连接池之后,我们就可以修改原来的setUp方法,将直接new Jedis连接改为工具类中的getConnection方法,从连接池中获取连接:

@BeforeEach
void setUp() {// 建立连接jedis = JedisConnectionFactory.getConnection();// 选择库jedis.select(0);
}

但是在释放资源的时候,可以直接使用Jedis中的close方法,因为这个方法会先检查是否有连接池,如果有连接池,就不会直接销毁连接,而是将连接归还连接池: 

http://www.lryc.cn/news/580102.html

相关文章:

  • 马尔可夫链:随机过程的记忆法则与演化密码
  • 【github】想fork的项目变为私有副本
  • WPF学习笔记(23)Window、Page与Frame、ViewBox
  • WPF+HelixToolkit打造炫酷自定义3D贴图立方体盒子模型
  • 简单 Python 爬虫程序设计
  • latency 对功耗的影响
  • VSCode 安装使用教程
  • vue3引入海康监控视频组件并实现非分屏需求一个页面同时预览多个监控视频;
  • 玩转n8n工作流教程(一):Windows系统本地部署n8n自动化工作流(n8n中文汉化)
  • goole chrome变更默认搜索引擎为百度
  • DotNetBrowser 2.27.14 版本发布啦!
  • Ubuntu下的Tomcat服务器部署
  • 智慧园区新引擎 —— 基于Java的企业级智慧园区解决方案
  • Vue3-组件化-Vue核心思想之一
  • jsonCPP 开源库详解
  • 微软医疗AI诊断系统发布 多智能体协作实现疑难病例分析
  • 《汇编语言:基于X86处理器》第6章 复习题和练习,编程练习
  • js中的FileReader对象
  • 【网络与系统安全】域类实施模型DTE
  • Java技术深潜:从并发陷阱到云原生突围
  • RabbitMQ用法的6种核心模式全面解析
  • Response对象
  • Qt应用快速启动的重要性:从系统上电到界面渲染的全链路加速实践
  • 数据结构 之 【堆】(堆的概念及结构、大根堆的实现、向上调整法、向下调整法)(C语言实现)
  • 浏览器中的 preview 和 response 的值不一致和精度问题解决
  • Spring Cloud网关与CI文件配置请求安全性对比
  • MySQL/MariaDB数据库主从复制之基于二进制日志的方式
  • 影楼精修-智能修图Agent
  • Python-将多张图片合并成一张图片调整指定区域的颜色选框工具
  • 应急响应靶场——web3 ——知攻善防实验室