网站建设saas排名,济南网站建设找凌峰,网页设计与制作课程思政建设内容,品牌创建的六个步骤目录
引言
RESP 协议
Redis 通信过程
实现步骤
步骤一
步骤二
步骤三
步骤四 引言 在 Redis 命令行客户端中手敲命令并不是我们日常开发中的主要形式而更多的时候是使用 Redis 的 API 来实现定制化的 Redis 客户端程序#xff0c;进而操作 Redis 服务器即使用程序来操…目录
引言
RESP 协议
Redis 通信过程
实现步骤
步骤一
步骤二
步骤三
步骤四 引言 在 Redis 命令行客户端中手敲命令并不是我们日常开发中的主要形式而更多的时候是使用 Redis 的 API 来实现定制化的 Redis 客户端程序进而操作 Redis 服务器即使用程序来操作 Redis使用代码来执行 Redis 命令 注意 Redis 所提供的命令行客户端 抑或是 第三方的图形化客户端这二者本质上均属于 通用的客户端程序相比之下我们在工作中更希望使用到的是 专用的、定制化 的客户端程序 RESP 协议 RESPRedis Serialization Protocol 协议用于在 Redis 客户端和服务器之间进行通信 注意 正因为 Redis 官方开放了 RESP 协议所以我们才能够基于该协议来编写出一个自定义的 Redis 客户端 RESP 协议优点 简单且容易实现可快速解析肉眼可读 RESP 协议特点 RESP 协议的实现通常基于 TCP但并不意味着RESP 协议与 TCP 强耦合在一起即也可选择其他传输层协议请求和响应之间的通信模型是一问一答的形式即客户端给服务器发送一个请求服务器返回一个响应 Redis 通信过程 客户端向服务器发送 Redis 命令Bulk String 数组形式发送不同的命令服务器返回不同的结果 有的命令可能返回个 OK有的命令可能返回个 整数有的命令可能返回个 数组 数据类型首比特位实例理解Simple StringOK\r\nErrors--Error message\r\nIntegers::1000\r\nBulk Strings$$5\r\nhello\r\nArrays**2\r\n$5\r\nhello\r\n$5\r\nworld\r\n 即服务器在返回时会将上述 实例字符串写入到 tcp socket 中 注意 Simple Sting 只能用来传输文本Bulk Stirng 可以传输二进制数据 总结 因此 redis 服务器要做的工作就是 按照上述格式构造出字符串往 socket 中写入从 socekt 中读取字符串按照上述格式解析 当然我们无需自己写代码即按照按照上述的协议来 解析 和 构造字符串因为我们可以使用现成的库这些库已经帮我们实现了这套协议的解析 和 构造因此我们便可以比较简单方便的来完成和 Redis 服务器通信的操作了 实现步骤 此处我们使用 jedis 库因为 jedis 库所提供的 api 和 Redis 命令高度一致 步骤一 在 maven 项目的 pom.xml 文件中添加依赖 !-- https://mvnrepository.com/artifact/redis.clients/jedis --dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion4.4.2/version/dependency 步骤二 配置 ssh 端口转发把云服务器的 Redis 端口映射到本地主机 此处我们解释并理解步骤二着急配置的可直接省略 使用 Java 开发进行的代码通常高度依赖 windowsIDEA所以当我们想直接在自己主机上 操作 Redis 时便需要通过 外网ip 但是直接使用 外网ip 也无法访问到云服务器中的 Redis 服务器因为 Redis 服务器所占用的 6379 端口默认被云服务器的防火墙给保护起来了而防火墙一旦将 6379 端口保护起来不仅黑客访问不了就连自己也无法访问 Redis 服务器 问题 直接在云服务器后台把 6379 端口防火墙放开不就行了 回答 千万不要这么做Redis 服务器的端口一旦放开到公网上就特别容易被入侵 两难境地 不能开放 Redis 服务器的端口我们自己又想能够通过外网对 Redis 服务器进行访问 解决方案一 直接让 java 程序在 linux 上运行这就需要我们将代码打成可执行的 jar 包然后再将 jar 包拷贝到 linux 服务器上最后再执行 jar 包如果按照上述操作一步一步完成还是十分繁琐的虽然也可以通过一些第三方插件来简化上述步骤但总体来说还是比较繁琐的 解决方案二 配置 ssh 端口转发把云服务器的 Redis 端口映射到本地主机ssh 的功能十分强大其中很重要的特性就是能够支持端口转发相当于通过 22 端口来传递其他端口的数据本身我们需要通过 windwos 主机来访问云服务器 6379 端口但是我们可以直接构造一个特殊的 ssh 数据报将要访问的 redis 请求放到 ssh 数据报中 步骤三 当 ssh 连接上了之后端口转发才会生效即如歌将 ssh 连接断开端口转发自然失效所以我们完成上述步骤后便可以使用 netstat 命令观察本地 8888 端口是否被监听成功打开 cmd 输入下方命令 netstat -ano | findstr 8888 出现红框所示表示配置成功 注意 当配置了 端口转发之后一定要断开之前的连接重新连接才能生效 步骤四 此处将创建一个 RedisDemo 类来测试操作云服务器的 Redis import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;public class RedisDemo {public static void main(String[] args) {
// 连接到 redis 服务器上JedisPool jedisPool new JedisPool(tcp://127.0.0.1:8888);// 从 redis 连接池中取一个出来
// 连接使用完之后要记得释放(close)
// 此处的释放不一定是真的关闭 tcp 连接而是放回到池子里try (Jedis jedis jedisPool.getResource()){
// redis 的各种命令就都对应到 jedis 对象的各种方法String pong jedis.ping();System.out.println(pong);}}
} 运行结果: 注意点一 当前咱们的这个程序能跑通除了配置 ssh 端口映射之外还有一个要点即最开始安装 Redis 服务器时配置好绑定的 ip 以及关闭保护模式 想具体在 Centos7 上安装 Redis 5 可点击下方链接 关于云服务器 CentOS7 安装 Redis5 注意点二 上述 url 的写法仅局限于开发阶段后续如果我们的程序需要部署到云服务器此时便需按照云服务的实际情况来更换此处的 ip 和 端口了