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

Maven 依赖

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

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

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

  • jedis 可以通过 maven 下载
xml 复制代码
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>5.1.5</version>
</dependency>

Windows 环境下

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

只修改外网 IP 还不够

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

端口处理

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

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

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

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

  • 掩耳盗铃,没用。

解决方法

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

  1. Java 程序也在 Linux 上运行

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

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

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

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

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

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

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

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

mac 环境下

  • 此时客户端使用 127.0.0.1 这样的 IP 来连接 Redis 服务器即可
java 复制代码
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 和端口了
相关推荐
用户79117724235838 分钟前
黑马点评【基于redis实现共享session登录】
java·redis
RR133526 分钟前
macOS 升级 bash 到最新版本
macos
我在北京coding29 分钟前
Tableau for mac 驱动
macos
观无1 小时前
redis分布式锁
数据库·redis·分布式
檀越剑指大厂1 小时前
【高效开发工具系列】Blackmagic Disk Speed Test for Mac:专业硬盘测速工具
macos
颜淡慕潇1 小时前
Redis 实现分布式锁:深入剖析与最佳实践(含Java实现)
java·redis·分布式
CV点灯大师2 小时前
C++算法训练营 Day10 栈与队列(1)
c++·redis·算法
CodeOfCC2 小时前
c语言 封装跨平台线程头文件
linux·c语言·windows
啾啾Fun2 小时前
【Java微服务组件】分布式协调P4-一文打通Redisson:从API实战到分布式锁核心源码剖析
java·redis·分布式·微服务·lua·redisson
momo卡3 小时前
MinGW-w64的安装详细步骤(c_c++的编译器gcc、g++的windows版,win10、win11真实可用)
c语言·c++·windows