使用Java连接redis以及开放redis端口的问题

前面分享了许多关于Redis的数据类型的文章,文章也介绍了如何使用对应的数据类型来保存数据,以及如何对数据进行增删改查等等;但是作为一个Java研发程序员,我们在开发阶段要如何将redis集合到我们的项目中,也就是如何使用redis这一个优秀的中间件作为我们的开发工具呢?接下来我就会详细的讲一下如何进行连接,以及如何具体的使用。

首选Java官方提供了一个RESP协议供我们使用,任何一个第三方都可以通过这个协议来实现一个与redis服务端通信的客户端程序,当然我们这里不是要从头教大家如何通过这个协议去写一个第程序来与redis服务端进行通信,这不可能,已经有大佬帮我们写好了一个客户端来给我们使用,我们要学的就是如何使用这个客户端,这个客户端就是著名的"Jedis",而且这个Jedis的API都是和redis高度相似的,这就很利于我去使用Jedis去和redis进行通信,节约了再次学习相关语法的时间、

Jedis是一个客户端,也是一个依赖,我们要引入一个依赖,可以再maven中央仓库进行下载。

https://mvnrepository.com/

1、在搜索框搜索Jedis、点击搜索,选择Jedis进行详情页面

2、选择版本,我们不用选择最新的版本,可以看到最新的版本还在测试阶段,我们可以选择稳定的,比较多人下载的,并且比较接近新版本的版本;如下图我们可以去选择5.1.5的版本,你们可以去选择你们想要的版本;

3、点击想要的版本,复制下面的这段到我们的maven项目中,我们就真正的引入这个依赖到我们的项目中;

4、引入依赖之后,如果看到爆红,我们可以点击右上角的刷新按钮去刷新,maven就回去去检查并下载相关的依赖;

到这里我们仅仅是完成了10%,因为接下来要如何连接redis服务端才是重中之重;我们redis是安装在云服务器上的,要在本地访问到,就得开启云服务器的6379端口,这样我们就可以通过云服务器的外网IP访问到redis服务器,但是开启这个端口,就相当于把redis暴露在网络中,任何一个人都可以通过云服务器的ip去访问到你的redis服务器,如何redis存的数据相当重要,那么你的数据就有可能被人剽窃,如果是被对手公司剽窃了,那你就不是仅仅丢掉年终奖这么简单了,所以这种直接开放端口肯定是行不通的。可能这里有人要问,那为什么可以开放别的端口呢?比如8080,首先8080端口开放是因为做了保护,黑客想要通过8080端口剽窃数据是非常难的,至少目前是的,以后会怎么样就不知道了,所以目前开放8080是安全的;

既然我们为了安全不能开放6379端口号,那我们就只有以下两种方法去使用redis服务器了;

1.打包成jar,放到云服务器上运行

这样子虽然能避免开放端口号,但是不便于我们在开发阶段进行调试,因为如果我们使用这种方法,每一次调试都得将程序打包成jar,放到云服务器上运行,这将会非常麻烦,所以在开发阶段我们是使用第二种方法,ssh隧道。

2.使用xsehll的ssh隧道进行通信

首先我们使用xshell去连接云服务器,使用的就是ssh协议,ssh协议支持端口转发,原理就是,xshell会通过ssh隧道监听本机的一个端口,我们只要访问本机的这个端口,xshell就会根据我们要发送给redis的数据去构造一个特殊的数据报,转发给云服务器上的redis服务器,这样我们就实现了在开发阶段,在本地就能很安全的去访问和使用redis服务器;

打开xshell,找到云服务器,右击找到属性

2、找到ssh-隧道,点击添加

添加映射规则

源主机写localhost,监听端口就是开发使用的主机的端口号,可以使用8888或者其他未被使用的;

目的主机也可以写localhost,目的端口就是云服务器上redis的端口,默认6379,除了以上的配置,你还得去修改redis的配置文件,输入以下指令去修改redis的配置文件

将配置内容:bind 127.0.0.1 ::1改成bind 0.0.0.1,改成这样就运行别的主机访问;

保护模式从yes改为no

通过以上配置,才算真正的能够在本机去访问云服务器上的redis服务端;

接下来简单讲一下如何使用Jedis操作redis:

复制代码
public static void main(String[] args) {
    //创建连接池:JedisPool("tcp://127.0.0.1:8888") 连接到本地 8888 端口的 Redis
    JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
    //使用 try-with-resources:自动管理 Jedis 连接的关闭
    try(Jedis jedis=jedisPool.getResource()){
        test01(jedis);
    }catch (Exception e){
        e.printStackTrace();
    }
}
复制代码
public static void test01(Jedis jedis){
    System.out.println("set 和 get");
    //清空数据库:jedis.flushAll() 会删除所有数据库中的所有键
    jedis.flushAll();
    //设置键值对:jedis.set("key1", "111") 将 "key1" 的值设置为 "111"
    jedis.set("key1","111");
    //获取值:jedis.get("key1") 读取 "key1" 的值并打印
    String value=jedis.get("key1");
    System.out.println(value);
}

从上面两段代码可以看出来Jedis的方法和redis还是高度吻合的,非常容易上手;

相关推荐
马克学长2 小时前
SSM村务管理系统s2qnw(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·服务器·数据库
羊锦磊2 小时前
[ Spring 框架 ] 数据访问和事务管理
java·后端·spring
未来coding2 小时前
Spring Boot SSE 流式输出,智能体的实时响应
java·spring boot·后端
恸流失2 小时前
java基础-12 : 单列集合(Collection)
java·开发语言·windows
whltaoin2 小时前
Spring Boot自定义全局异常处理:从痛点到优雅实现
java·spring boot·后端
sun03222 小时前
工作中使用到的单词(软件开发)_第五版
开发语言·软件开放单词
zhangxuyu11182 小时前
Spring boot 学习记录
java·spring boot·学习
做运维的阿瑞2 小时前
告别性能焦虑:Python 性能革命实践指南
开发语言·后端·python
元气满满的霄霄3 小时前
Spring Boot整合缓存——Ehcache缓存!超详细!
java·spring boot·后端·缓存·intellij-idea