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

Redis Java 客户端 之 Jedis

Jedis is “Redis Client for Java”


Redis客户端官方文档:https://redis.io/docs/latest/develop/clients/
Jedis的官方网址:https://github.com/redis/jedis

在这里插入图片描述

文章目录

  • Jedis is "Redis Client for Java"
    • 一、快速入门
      • 1.引入依赖
      • 2.建立连接
      • 3.测试String、Hash
      • 4.释放资源
    • 二、Jedis连接池
      • 1.编写连接池配置
      • 2.修改连接方式
      • 3.归还连接(非关闭连接)
    • 三、(可略过)提供SLF4J日志实现
      • 1. 添加一个具体的日志实现依赖
      • 2.移除冲突的日志实现
      • 3.添加日志配置文件
      • 4. 清理并重新构建项目

一、快速入门


优点:以Redis命令作为方法名称,学习成本低,简单实用。

缺点:Jedis实例是线程不安全的,多线程环境下需要基于链接池实用。

1.引入依赖

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

2.建立连接

	private Jedis jedis;
	
    @BeforeEach
    void setUp() {
        // 1.建立连接
        jedis = new Jedis("127.0.0.1", 16379);
        // 2.设置密码
        jedis.auth("123456");
        // 3.选择库
        jedis.select(0);
    }

3.测试String、Hash

	@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", "查理布朗");
        jedis.hset("user:1", "age", "18");
        // 取出hash数据
        Map<String, String> map = jedis.hgetAll("user:1");
        System.out.println("map = " + map);
    }

4.释放资源

	@AfterEach
    void tearDown() {
        // 释放资源
        if (jedis != null) {
            jedis.close();
        }
    }

二、Jedis连接池

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

1.编写连接池配置

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisConnectionFactory {

    private static final JedisPool jedisPool;

    static {
        // 1.配置连接池
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(8); // 最大连接数:最多允许创建8个连接
        poolConfig.setMaxIdle(8); // 最大空闲连接数:最多允许8个空闲连接
        poolConfig.setMinIdle(0); // 最小空闲连接数:如果一直没有连接,释放连接
        poolConfig.setMaxWaitMillis(1000); // 最大等待时间(默认值为-1,一直等待):最多等待1000毫秒
        // 2.创建连接池对象:ages={ 连接池配置, host, port, timeout, password, database }
        jedisPool = new JedisPool(poolConfig, "127.0.0.1", 16379, 1000, "123456", 0);
    }

    public static Jedis getJedis() {
    	// 从连接池获取连接
        return jedisPool.getResource();
    }

}

2.修改连接方式

    private Jedis jedis;
    
    @BeforeEach
    void setUp() {
        // 建立连接
        jedis = JedisConnectionFactory.getJedis();
    }

3.归还连接(非关闭连接)

此处调用jedis.close()方法,是归还资源,并非关闭连接

    @AfterEach
    void tearDown() {
        if (jedis != null) {
        	// 归还连接 *[1]
            jedis.close();
        }
    }

Jedis.class中的close()方法源码解释:

    public void close() {
    	// 当连接池非空
        if (this.dataSource != null) {
            JedisPoolAbstract pool = this.dataSource;
            this.dataSource = null;
            if (this.isBroken()) {
                pool.returnBrokenResource(this);
            } else {
            	// 归还连接
                pool.returnResource(this);
            }
        } else {
        	// 关闭连接
            super.close();
        }

    }

三、(可略过)提供SLF4J日志实现

在这里插入图片描述

这个警告信息表明 SLF4J(Simple Logging Facade for Java)在运行时无法找到 org.slf4j.impl.StaticLoggerBinder 类,因此它默认使用了无操作(NOP)的日志实现。这意味着日志信息将不会被输出到任何地方。

要解决这个问题,你需要为 SLF4J 提供一个具体的日志实现库。以下是解决步骤:


1. 添加一个具体的日志实现依赖

SLF4J 是一个日志门面,需要与具体的日志实现库配合使用。常见的日志实现包括 ​Logback、Log4j 2 和 ​java.util.logging (JUL)。推荐使用 ​Logback,因为它性能优越且与 SLF4J 集成良好。

使用 Logback(推荐)
在 pom.xml 中添加以下依赖:

<dependencies>
    <!-- SLF4J API -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.36</version>
    </dependency>
    
    <!-- Logback 经典实现 -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.11</version> 
    </dependency>
    
    <!-- 其他依赖 -->
    <!-- ... -->
</dependencies>

​注意logback-classic 已经包含了 slf4j-api,因此无需重复添加 slf4j-api,除非你有特殊需求。


2.移除冲突的日志实现

确保你的项目中 ​只 有一个 SLF4J 的实现。如果有多个实现存在,SLF4J 会无法确定使用哪一个,从而导致警告。

检查依赖树
使用以下命令查看项目的依赖树,以识别是否有多个 SLF4J 实现:

mvn dependency:tree

查找是否有多个如 logback-classiclog4j-slf4j-implslf4j-jdk14 等依赖。如果发现多个,需要排除不需要的实现。

排除多余的依赖
假设你选择了 Logback,但项目中引入了 log4j-slf4j-impl,可以在 pom.xml 中排除它。例如:

<dependency>
    <groupId>某个组</groupId>
    <artifactId>某个依赖</artifactId>
    <version>版本号</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
        </exclusion>
    </exclusions>
</dependency>

3.添加日志配置文件

根据你选择的日志实现,添加相应的配置文件。

使用 Logback
src/main/resources 目录下创建 logback.xml 文件,内容示例如下:

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

4. 清理并重新构建项目

在完成上述步骤后,清理并重新构建你的 Maven 项目以确保所有更改生效:

mvn clean install

相关文章:

  • BERT 模型是什么
  • SQL ​​主键(Primary Key)
  • 什么是具身智能?其发展五大趋势预测
  • 【C++游戏引擎开发】第12篇:GLSL语法与基础渲染——从管线结构到动态着色器
  • 循环神经网络 - 长短期记忆网络的门控机制
  • [原创](现代C++ Builder 12指南): 如何使用异常(try catch)?
  • 从 SaaS 到 MCP:构建 AI Agent 生态的标准化服务升级之路
  • 基于微信小程序的校园跑腿系统的设计与实现
  • MV-DLS600P激光振镜立体相机(MV-DLS600P)重要参数解析
  • Linux 守护进程浅析
  • RK3588 android12 适配 ilitek i2c接口TP
  • FlinkSQL的常用语言
  • C++20 统一容器擦除:std::erase 和 std::erase_if
  • 大厂算法面试 7 天冲刺:第7天-系统设计与模拟面试实战 —— 架构思维 + Java落地
  • Git 拉取时常见冲突及解决方法总结
  • MySQL---数据库基础
  • 封装公共方法,并存在异步请求接口情况 封装及调用
  • vue keep-alive 如何设置动态的页面缓存
  • Python | kelvin波的水平空间结构
  • [MySQL]复合查询
  • 网站建设总体流程/互联网平台推广怎么做
  • 武汉seo网站推广公司武汉/站长之家素材网
  • 微信分享 淘宝网站 怎么做/查排名的软件有哪些
  • 软件下载网站模版/百度的网址是多少
  • 深圳做电商平台网站/怎么做业务推广技巧
  • 做网站 源代码/永久免费用的在线客服系统