Jedis使用测试——连接本地及远程的Redis

本文介绍了如何使用Java的Jedis库连接并操作Redis,包括本地和远程服务器的连接设置。首先,讲解了Jedis作为Redis的Java客户端库的基本使用,并提供了导入依赖和测试ping命令的代码示例。接着,详细阐述了如何配置远程Redis服务器的redis.conf文件以允许远程访问,涉及修改daemonize、bind和protected mode等参数,并提醒注意防火墙和安全组规则的设置。最后,展示了通过Idea进行远程连接并测试的成功案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们要使用Java来操作Redis,就要学会使用Jedis

一、什么是jedis

是Redis官方推荐的java连接开发工具!使用Java操作Redis 中间件!如果你要使用java操作redis,那么一定要对Jedis十分的熟悉!

二、测试

新建一个空的工程,然后新建一个module。注意这里的SDK版本选择,我选的8,两个箭头处的位置版本需对应。
在这里插入图片描述
检查一下新建的模块的JDK版本是否与父工程一致,不一致就要修改。
在这里插入图片描述
以及下面这个位置也要检查一下
在这里插入图片描述

1、导入对应的依赖

注意设置一下maven的路径,修改为自己的本地maven仓库。
在这里插入图片描述
导入以下依赖。

    <dependencies>
        <!-- jedis -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.4.1</version>
        </dependency>
        <!--fastjson-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.75</version>
        </dependency>
    </dependencies>

2、连接本机redis

  • 连接数据库
  • 操作命令
  • 断开连接!

启动本机的redis-server.exe,这是我windows系统上安装的redis,双击即可启动。
在这里插入图片描述

Jedis 的所有方法就是 Linux 操作 redis 的所有指令。
写一个测试程序,测试ping命令,看能否ping通。
在这里插入图片描述
下面返回了PONG,代表连接上了redis服务器。

package com.peng;
import redis.clients.jedis.Jedis;

public class TestPing {
    public static void main(String[] args) {
        //1、new Jedis对象即可
        Jedis jedis = new Jedis("127.0.0.1",6379);
        System.out.println(jedis.ping());
    }
}

按同样的方式连远程的redis会失败。

3、连接远程服务器的redis

3.1 配置远程服务器上的redis.conf文件

注意不要配置到自己的原生redis.conf了,要找到自己的拷贝的用于启动的redis.conf文件。
这个目录是我解压的原生目录:
在这里插入图片描述
redis的默认安装路径/usr/local/bin
我已经拷贝了一份在这个路径下,所以我需要修改的目录是下面这个:
在这里插入图片描述

配置远程服务器上的redis.conf文件,修改配置文件的时候改三处:

  1. daemonize 设置为 yes 表明要在后台运行。
    在这里插入图片描述

  2. 把bind 127.0.0.1这一行注释掉,就没有请求访问ip限制了。或者在bind 127.0.0.1下面新增一行bind 0.0.0.0
    在这里插入图片描述

  3. 把 protected mode 设置成 no 即可开启远程访问。
    在这里插入图片描述

  4. ps:配置文件中,还可以给自己服务器的Redis加个访问密码
    在这里插入图片描述

(重启redis-server服务,进入redis后要先验证密码,用这个命令:auth 密码 ,然后ping一下看有没有配置成功)
在这里插入图片描述
在这里插入图片描述
修改配置文件后测试以下本机redis连接。

开启redis-server
# redis-server my-redis-conf-copy/redis.conf

开启redis-cli连接服务器
# redis-cli -p 6379

输入验证密码
# auth 654321

使用ping命令测试是否连接成功
# ping

3.2 开启防火墙及开放对应端口

  • 开启防火墙放行6379端口
  • 配置端口映射,将6379映射到一个公网ip的端口
  • 配置完了还要重启以下redis,避免缓存影响

我是Ubuntu系统,使用的如下命令:

查看防火墙当前状态
#sudo ufw status

设置开放6379端口的tcp协议
#sudo ufw allow 6379/tcp

再次查看防火墙的状态,看6379端口的状态
#sudo ufw status/usr/local/bin目录下,开启redis-server服务,注意my-redis-conf-copy是我自己在这里建的存放启动redis配置的文件夹,根据你自身情况修改!!
#redis-server my-redis-conf-copy/redis.conf
  • 连接阿里云服务器的还要修改安全组规则!

3.3 idea远程连接测试

  Jedis jedis = new Jedis("服务器的外网ip",映射的外部端口);
  jedis.auth("redis的密码");
  System.out.println(jedis.ping());

(输出PONG的话就成功了)
在这里插入图片描述
这是我的测试结果

<think>首先,用户的问题是:“我想了解JedisRedis之间的关系及使用场景请问Jedis库与Redis数据库的关系及其交互方式”用户引用了几个关于JedisRedis的参考文献:[^1]、[^2]、[^3]、[^4]、[^5]。这些引用描述了Jedis作为Redis的Java客户端,提供API,连接池管理,管道操作等。我的系统级指令包括:-所有行内数学表达式使用$...$格式。-独立公式使用$$...$$格式并单独成段。-LaTeX语法正确。-使用中文回答。-生成相关问题。-回答中引用的段落末尾自然地添加引用标识。示例中的结构:有描述,有代码块,然后有相关问题。在回答中,我需要引用参考来源时,在段落末尾添加引用标识,如[^1]。用户的问题是明确的:JedisRedis的关系及使用场景,以及它们的交互方式。关键点从引用中提取:-引用[^2]:JedisRedis官方推荐的Java客户端,基于RESP协议实现,提供简洁清晰的API,支持连接池管理和管道操作。-引用[^3]:Jedis封装了Redis的命令操作,提供了连接池管理,是Redis的Java客户端。-引用[^4]:Jedis用于连接Redis数据库,处理认证等操作。-引用[^5]:提到Jedis在项目中的使用,如广播模式。JedisRedis的关系:-Redis是一个开源的、内存中的数据结构存储系统,用C语言编写,支持多种数据结构。-Jedis是一个Java库,用于与Redis服务器交互。它实现了一个客户端接口,让Java应用程序可以通过TCP/IP协议连接Redis服务器,并执行命令。所以,关系是:JedisRedis的一个Java客户端库,允许Java程序通过JedisAPI发送命令到Redis服务器。使用场景:-在Java应用中需要访问Redis使用Jedis。-例如:缓存数据(如用户会话、热门数据)、分布式锁、消息队列(使用Redis的发布订阅)、计数器等。交互方式:-Jedis通过创建一个Jedis对象(如`newJedis("host",port)`)来连接Redis服务器。-然后通过该对象调用方法对应Redis命令,如`set`、`get`、`hgetall`等。-支持管道(pipeline)来批量执行命令提高性能。-支持连接池(JedisPool)来管理连接,避免频繁创建连接的开销。代码示例:如引用[^3]和[^4]中的代码展示如何使用Jedis连接Redis并执行ping命令。我需要组织回答:1.**介绍JedisRedis的关系**:先用中文描述关系。2.**使用场景**:列出几个常见场景。3.**交互方式**:描述如何交互,包括代码示例。4.**引用添加**:在描述时,如果信息来自引用,如提到Jedis是官方推荐客户端,就加[^2]等。5.**生成相关问题**:在最后添加,类似示例中的"§§相关问题§§"部分。结构建议:-开场白介绍JedisRedis的基本关系。-详细解释关系和交互。-包含代码块展示基本用法。-讨论使用场景。-然后相关问题。确保代码块正确:如引用[^3]中的代码是Java代码,我可以精简一下。LaTeX:没有数学内容,所以可能不需要数学表达式。但如果提到什么协议之类,可以用行内,比如提及RESP协议时。例如,Redis使用RESP协议,行内写成$RESP$协议,但这是英文缩写,不一定需要LaTeX。指令说“包括变量、不等式、方程等”,但这里可能不需要数学,如果没用到,就不用加。回答必须用中文。最终输出结构:-正文-代码块-相关问题列表添加引用:如提到“JedisRedis官方推荐的Java客户端”时,结尾加[^2]。代码参考引用[^3]和[^4],但需要标注引用来源。我的回答步骤:1.Jedis是什么及其与Redis的关系。2.如何使用Jedis交互(交互方式)。3.使用场景。4.生成相关问题。</think> ### JedisRedis的关系及交互方式 Jedis库是Redis数据库的一个专为Java应用设计的客户端库,它封装了与Redis服务器通信的底层细节,使开发者能够通过简单的API在Java代码中执行Redis命令。简而言之,Jedis充当了一个“桥梁”角色:它是Redis的Java客户端实现,提供了对Redis服务器的直接访问能力。Redis本身是一个开源的内存数据结构存储系统,支持键值对、列表、集合等多种数据结构(如String、Hash、List等),常用于缓存、消息队列等场景。Jedis基于Redis的RESP(REdis Serialization Protocol)协议实现[^2],该协议定义了客户端与服务器之间的通信格式,确保高效的数据传输。本质上,Jedis让Java应用程序能够通过网络(如TCP/IP)连接Redis服务器,执行命令并处理响应。 下面我将逐步解释其关系、交互方式及使用场景。 #### 1. **关系总结** - **Jedis作为Redis的Java客户端**:Jedis不是Redis数据库本身,而是一个用于操作Redis的Java库。它实现了Redis提供的所有命令(如`SET`、`GET`、`INCR`等),允许Java应用通过这些命令与Redis服务器交互[^3]。这类似于JDBC驱动与数据库的关系——Jedis提供了标准化的Java接口。 - **官方支持与社区生态**:JedisRedis官方推荐的Java客户端之一,得到了广泛社区支持,确保了兼容性和稳定性[^2]。它通过封装底层连接和协议处理,隐藏了Redis服务器端的实现细节(如TCP连接管理和数据序列化)。 - **核心依赖**:Jedis依赖于Redis服务器运行。两者通过TCP/IP协议通信:Java应用(通过Jedis)发送请求到Redis服务器(如运行在本地远程主机),服务器执行命令后返回结果。这确保了高效的数据交换,尤其适用于低延迟需求的环境[^4]。 #### 2. **交互方式** Jedis的交互过程基于创建客户端对象、发送命令和处理响应。以下是基本步骤,并结合代码示例说明(基于引用[^3]和[^4]): - **步骤1: 创建Jedis对象** 通过指定Redis服务器的地址和端口建立连接Jedis提供了连接构造函数,支持单连接模式(简单但适合轻量级用例)。代码示例: ```java // 导入Jedis库 import redis.clients.jedis.Jedis; public class JedisExample { public static void main(String[] args) { // 创建Jedis对象,连接到本机Redis服务器(端口6379) Jedis jedis = new Jedis("127.0.0.1", 6379); // Redis服务器地址和端口[^3] // 可选:如果Redis设置了密码,需进行认证 jedis.auth("your_password"); // 使用auth方法进行密码认证[^4] // 执行Ping命令测试连接 String response = jedis.ping(); // 发送Ping命令,期望返回"PONG" System.out.println("Redis服务器响应: " + response); // 输出: Redis服务器响应: PONG // 关闭连接(释放资源) jedis.close(); } } ``` - **步骤2: 发送Redis命令** JedisRedis命令封装为Java方法。例如: - `jedis.set("key", "value")`: 存储键值对。 - `jedis.get("key")`: 检索值。 - 更多命令如`hset`、`lpush`、`incr`支持数据结构操作。 这些方法映射到RESP协议下的二进制传输,确保高效通信[^2]。 - **性能优化机制** - **连接池(JedisPool)**:频繁创建连接会消耗资源,Jedis通过JedisPool管理连接池实现复用[^1][^3]。示例配置: ```java JedisPool pool = new JedisPool(new JedisPoolConfig(), "127.0.0.1", 6379); try (Jedis jedis = pool.getResource()) { // 从池中获取连接 jedis.set("counter", "0"); jedis.incr("counter"); // 增加计数器 } // 自动关闭并归还池中 ``` - **管道(Pipeline)**:支持批量发送命令(如一次发送多个SET操作),减少网络往返时间,提高吞吐量[^2]。示例: ```java Pipeline pipeline = jedis.pipelined(); for (int i = 0; i < 100; i++) { pipeline.set("key" + i, "value" + i); // 批量操作 } pipeline.sync(); // 批量执行并等待结果 ``` - **高级交互模式**:如Redis广播(Pub/Sub),Jedis可以订阅频道处理消息[^5]。代码略(涉及JedisPubSub类)。 交互中,Jedis将Java对象序列化为字符串或二进制,以适应Redis数据存储[^3]。错误处理(如连接失败)通常通过异常(如JedisConnectionException)进行管理。 #### 3. **使用场景** Jedis适用于任何需要Redis在Java生态中集成的应用场景: - **缓存系统**:快速存取用户会话或热点数据(如电商网站的商品缓存),降低数据库负载[^1]。Jedis通过轻量级API实现低延迟访问。 - **分布式锁**:基于Redis的`SETNX`命令实现分布式环境下的互斥资源控制(如微服务架构中的事务协调)。 - **消息队列和发布订阅**:利用Redis的Pub/Sub功能,Jedis用于构建实时消息系统(如股票行情广播或聊天应用)[^5]。 - **数据分析和计数器**:例如点击率统计,使用Jedis的`INCR`命令高效递增计数器。 - **跨集群部署**:在分布式环境中(如微服务),Jedis连接池和广播模式确保多机缓存同步刷新[^5]。 总体优势是Jedis简洁易用、性能高(得益于RESP协议优化),但需注意:它不适合复杂事务(Redis的事务支持有限),且在高并发下需优化连接池配置以避免瓶颈[^2][^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值