前言:Java生态中,封装了RESP协议,实现的redis客户端是有很多的
Jedis
步骤
引入依赖
使用jedis(提供的api和redis命令是高度一致的),在maven下载
搜索jedis,我们使用4.4.2版本,引入依赖
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.4.2</version>
</dependency>
修改IP的步骤
光修改成外网IP还是不够的,6379端口,默认是被云服务器的防火墙给保护起来的,咱们自己的电脑,好笔小区里的住宅楼,被NAT机制保护起来了,有人想偷东西,成本就非常高,小偷得先想办法进入小区,然后再想办法进入单元楼,再想办法进入你家
云服务器是有外网IP的,云服务器就相当于暴露在大街上的门市房,有人想偷东西,成本就比较低了,只要想办法进你家就行,每给云服务器开放一个端口,就好比开了一扇门,开的端口多了,门就多了,小偷进入的几率就更大了
那我们直接在云服务器后台,把防火墙放开,不就行了吗?
不能这样做,因为Redis的端口一旦公开到公网上,就特别容易被入侵,虽然tomcat端口也开放,但是tomcat的8080这里的这个门的锁,不好撬,但是Redis的6379这个门的锁,就属于特别好撬
Question:那我们给Redis换个端口,7379,是不是就安全了呢?
Answer:这相当于掩耳盗铃,这扇门背后还是Redis啊
- 不能开放Redis的功能
- 又想要能够通过外网访问
- 直接让Java程序,也在Linux上运行;这就需要自己把代码打成可执行的jar包,然后把jar包拷贝到Linux服务器上执行,如果手工完成,比较麻烦,也可以通过一些第三方插件,来简化上述步骤
- 配置ssh端口转发,把云服务器的Redis的端口,映射到本地主机
本身我们是需要通过windows主机,访问云服务器的6379端口,于是就构造了一个特殊的 ssh数据报,就是要访问redis的请求,放到ssh数据报里,这个数据就会通过22端口发送给服务器,服务器的ssh服务器程序,就能够解析出上述的数据报,然后把数据报交给6379端口的程序
隧道
- 一个Linux主机上,存在的服务器有很多,ssh也可能需要来给多个端口传递数据,这个时候,为了区分不同的端口,往往会把服务器的端口在本地用另外一个端口来进行表示
- 通过ssh进行端口的映射,把服务器的6379映射到本地的8888(ssh程序监听的端口);此时客户端的程序访问127.0.0.1:8888,就相当于是访问Linux服务器的6379了;背后的过程都是由ssh协议来搞定的
- 只要进行简单的配置,后续就把云服务器的端口就当成本地的端口使用即可
- 右击云服务器属性,找到ssh隧道(ssh端口转发,ssh端口映射)
- 当ssh连接上了之后,端口转发才生效(把ssh连接断开,端口转发自然就消失)
- 连接完成之后,就可以使用netstat命令查看本地这里的8888端口
- 在本地主机cmd中输入命令即可发现已经连接(注意XShell重新登陆,不然不显示)
- 后续Java代码中,通过127.0.0.1:8888就能操作云服务器的redis了,同时外面的客户端,是无法直接访问云服务器的6379的
public class RedisDemo {
public static void main(String[] args) {
//连接到 Redis 服务器上
JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
//这个写法仅仅是学习阶段才能这么写,后续就得按照云服务器的实际情况,来写这里的ip和端口了
}
}
若是未使用ssh端口映射,则需要输入外网IP,同时关闭防火墙
try (Jedis jedis = jedisPool.getResource()) {
//从Redis连接池中取一个连接出来
//连接用完之后要记得释放
//此处的释放,不一定是真的关闭tcp连接,而是放回池子里
}
调用jedis对象的方法
public class RedisDemo {
public static void main(String[] args) {
//连接到 Redis 服务器上
JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
try (Jedis jedis = jedisPool.getResource()) {
//不需要关闭,因为try模块里自动关闭Jedis
//Redis的各种命令,就都对应到 jedis 对象的各种方法
String pong = jedis.ping();
System.out.println(pong);
}
}
}
程序跑通了,除了配置ssh端口映射之外,还有一个要点:
注意事项:
安装Redis服务器的时候,要配置(/etc/redis/redis.conf)绑定的IP,以及关闭保护模式
大功告成了!!