前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【redis】reids 客户端的连接(Windows和mac)

【redis】reids 客户端的连接(Windows和mac)

作者头像
椰椰椰耶
发布2025-03-17 13:40:46
发布2025-03-17 13:40:46
12700
代码可运行
举报
文章被收录于专栏:学习学习
运行总次数:0
代码可运行

Maven 依赖

Redis 服务器,在官网公开了使用的协议—— RESP。任何一个第三方库都可以通过上述协议,来实现出一个和 Redis 服务器通信的客户端程序

  • 已经有很多大佬,做好了库,可以让我们直接调用,所以我们不必关注 Redis 协议的细节了

Java 生态中,封装了 RESP 协议,实现的 Redis 客户端是有很多的。我们这里使用的是 jedis(这里提供的 APIRedis 命令高度一致)

  • jedis 可以通过 maven 下载
image.png
image.png
代码语言:javascript
代码运行次数:0
运行
复制
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>5.1.5</version>
</dependency>

Windows 环境下

image.png
image.png
  • 这样的操作,就需要通过云服务器的外网 IP 来访问到 Linux 服务器

只修改外网 IP 还不够

  • 6397 端口,默认是被云服务器的防火墙给保护起来的(不能被外面访问)
    • 防火墙保护起来了,别人进不去,我们自己也访问不了

端口处理

  • 我们自己的电脑,好比小区里面的住宅楼,被 NAT 保护起来了。如果有人想偷东西,成本就非常高,先想办法进入小区,然后再想办法进入单元楼,再想办法进你家…
  • 云服务是有外网 IP 的,云服务器就相当于保留在大街上的门市房。有人想偷东西,成本就比较低了,只要想办法进你家就行
    • 每给云服务器开放一个端口,就好比开放了一扇门。开的端口多了,门就多了,小偷进入的概率就更大了

直接在云服务器后台,把防火墙放开,不就行了吗?

  • 不行!!!(千万不要这么做)
  • Redis 的端口一旦公开到公网上,就特别容易被入侵(不出三天,就要被入侵)

那要是我们给 Redis 换一个端口,是不是就安全了呢?

  • 掩耳盗铃,没用。

解决方法

现在不能开放 Redis 端口,但是我们又想要自己能通过外网访问,怎么办呢?

  1. Java 程序也在 Linux 上运行

这就需要我们把自己的代码打成可执行的 jar 包,然后把 jar 包拷贝到 Linux 服务器上执行

  1. 配置 ssh 端口转发,把云服务器的 Redis 端口,映射到本地主机
端口转发
image.png
image.png

ssh 功能非常强大,其中很重要的特性,就是能够支持端口转发。相当于通过 ssh22 端口,来传递其他端口的数据

  • 本身我们是需要通过 Windows 主机,访问云服务器的 6379 端口,于是就构造了一个特殊的 ssh 数据报,就把要访问 Redis 的请求,放到 ssh 数据报里

这个数据就会通过 22 端口发给服务器,服务器的 ssh 服务器程序,就能够解析出上述的数据报,然后把数据报交给 6379 端口的程序(ssh 起到了一个中介的效果)

一个 Linux 主机上,存在的服务器有很多,ssh 也可能需要来给多个端口传递数据,这个时候,为了区分不同的端口,往往会把服务器的端口在本地用另外一个端口来进行表示

image.png
image.png
  • 此时客户端的程序访问 127.0.0.1:8888 就相当于是访问 Linux 服务器的 6379
  • 访问本地端口,就相当于访问远程服务器上的端口

只需要进行简单的配置,后续就把云服务器的端口就当成一个本地的端口使用即可

mac 环境下

image.png
image.png
  • 此时客户端使用 127.0.0.1 这样的 IP 来连接 Redis 服务器即可
代码语言:javascript
代码运行次数:0
运行
复制
import redis.clients.jedis.Jedis;  
import redis.clients.jedis.JedisPool;  
  
public class RedisDemo {  
    public static void main(String[] args) {  
        // 连接到 Redis 服务器上  
        JedisPool jedisPool = new JedisPool("localhost",6379);  
  
        // 从 Redis 连接池中取一个连接出来  
        // 连接用完之后要释放,此处的释放不一定是真的关闭 TCP 连接,而是将连接放回到池子里  
        // 因为是在 try 后面的()里面进行取连接的,执行结束后会自动关闭  
        try(Jedis jedis = jedisPool.getResource()) {  
            // Redis 的各种命令,就对应到 Jedis 对象的各种方法  
            String pong = jedis.ping();  
            System.out.println(pong);  
        }  
    }  
}
  • 这里的 URL,仅仅是当前开发阶段这么写,后续如果我们的程序要部署到云服务器,此时就得按照云服务器的事迹情况来写这里的 IP 和端口了
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Maven 依赖
  • Windows 环境下
    • 端口处理
      • 解决方法
  • mac 环境下
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档