Redis和Java之间的爱恨情仇之连接Redis服务器

前言: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的功能
  • 又想要能够通过外网访问
  1. 直接让Java程序,也在Linux上运行;这就需要自己把代码打成可执行的jar包,然后把jar包拷贝到Linux服务器上执行,如果手工完成,比较麻烦,也可以通过一些第三方插件,来简化上述步骤
  2. 配置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,以及关闭保护模式

大功告成了!! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值