redis使用总结

news2024/11/24 15:48:05

目录

  • redis安装与登录
  • redis 持久化
    • RDB(Redis DataBase)
    • AOF(Append Only File)
    • RDB-AOF混合持久
    • 纯缓存模式
  • redis 的 key
  • redis 的数据类型和常见应用场景
    • String
    • List
    • HashMap
    • Set集合
    • ZSet有序集合
    • bitmap位图
    • HyperLogLog基数统计
    • GEO 地理空间
    • Stream 流
    • bitfiled
  • redis 事务
    • 事务的正常执行的情况
    • 事务放弃的情况
    • EXEC之前发生异常
    • EXEC之后发生异常
    • 使用 WATCH/UNWATCH
  • redis 管道
  • redis高可用
    • redis 复制(replica)
      • 主从都有的配置(修改配置文件,开放port为6379的redis为例)
      • 主库的配置(测试环境设定开放端口为6379的redis为主库)
      • 从库的配置
      • 启动一主二从
      • 主从的日志观察
      • 查询主从的信息(`info replication`)
      • 常见问题
      • 主从传递
      • 从库升级为主库
      • 主从复制的缺陷
    • redis 哨兵(sentinel)
      • redis 主从搭建
      • 哨兵的搭建
        • 哨兵的配置文件
        • 主观下线和客观下线
      • 哨兵节点的启动
      • 发生主从节点切换
    • redis 集群(cluster,AP)
      • redis 集群的 slot 槽
      • 为什么 redis 集群的最大槽数 16384 个?
      • slot 槽位映射的三种常见方法
        • Hash取余
        • 一致性Hash算法
        • Hash槽分区
      • 三主三从 redis 集群搭建
      • redis 集群 读写
      • 主从容错切换(自动故障转移)
      • 主从动态扩容
      • 主从动态缩容
      • 集群常用指令总结

redis安装与登录

  • 默认安装目录:usr/local/bin
  • 在redis存放的目录,备份原系统的 redis.conf,新建一个 redis.conf
  • 修改配置文件内容如下
  1 默认daemonize no  改为  daemonize yes
  2 默认protected-mode  yes 改为  protected-mode no
  3 默认bind 127.0.0.1  改为  直接注释掉(默认bind 127.0.0.1只能本机访问),否则影响远程IP连接
 4 添加redis密码  改为 requirepass 你自己设置的密码
  • 启动redis,并登录

    • 在安装目录:usr/local/bin下执行redis-server 自定义配置文件的路径启动redis服务
    • 默认的redis服务端口是6379(可改)
    • 紧接着输入redis-cli -a 配置文件中设置的requirepass的值 or redis-cli -a 配置文件中设置的requirepass的值 -p redis端口号
    • 中文乱码问题,只需要在上面的登录指令后面加上--raw
  • 退出登录

    • 退出从客户端quit后,可以关闭redis服务redis-cli -a requirepass 的值 shutdown or redis-cli -p 6379 shutdown
    • 或者直接在客户端输入 shutdown,然后再退出quit

redis 持久化

RDB(Redis DataBase)

  • 什么是RDB

    • 在指定的条件下对redis中的所有键值对数据以快照的形式保存到磁盘中,形成dunmp.rdb文件
  • 启动/关闭RDB:修改配置文件 redis.conf 根据配置文件中提示(配置文件中的SNAPSHOTTING模块)修改

    • 关闭:save “” or 登录redis客户端 reids-cli config set save ""
    • 启动:save 60 1000只要60s内,有超过1000个key发生改变,则开始产生快照
  • RDB 其它配置项

    • dbfilename 生成的 rdb 文件的名字
    • dir生成的rdb文件的存放目录
    • stop-writes-on-bgsave-error yes/no用于保证数据一致性,当备份过程中出现问题是否停止写入,默认是yes
    • rdbcompressiong yes/no rdb文件的压缩存储,默认为开启yes
    • rdbchecksum yes/no存储快照后是否用CRC64算法来进行数据校验,默认开启yes
    • rdb-del-sync-files在没有持久性的情况下删除主从复制中使用的RDB文件启用。默认情况下no,此选项是禁用的
  • 触发RDB的情况
    在这里插入图片描述

  • 关于save/bgsave命令

    • save不建议使用
      在这里插入图片描述
    • bgsave命令(默认)
      在这里插入图片描述
  • RDB优势
    在这里插入图片描述

  • RDB 劣势(数据丢失)
    在这里插入图片描述

  • 修复RDB文件redis-check-rdb rdb文件命

AOF(Append Only File)

在这里插入图片描述

  • AOF 的工作流程
    在这里插入图片描述
  • 三种写回策略对比(推荐使用Everysec)
    在这里插入图片描述
  • AOF的配置(配置文件的APPEND ONLY MODE模块中)
    • 启动配置 appendonly yes,默认是关闭no
    • 写回策略配置appendfsync everysec,默认是每秒
    • AOF 重写机制设置,改变如图所示三项
      在这里插入图片描述在这里插入图片描述
    • .aof文件的保存目录 = rdb 的保存目录(dir) /自定义的 .aof文件目录(appenddirname "xxxxx"
    • 设置.aof文件的保存文件名
      • redis 6 及之前的.aof文件只有一个
      • redis 7 及之后的.aof文件有3个在这里插入图片描述
      • appendfilename "appendonly.aof"配置的是.aof文件的前缀,后面还要跟redis 设置的有关序列和类型的附加信息在这里插入图片描述
      • 关于 序列 涉及到 AOF 的重写机制,重写就是当一个.aof文件太大时,需要执行的操作
  • AOF 的重写机制
    在这里插入图片描述在这里插入图片描述
    !在这里插入图片描述
    • 重写过程展示
      在这里插入图片描述
      在这里插入图片描述
  • AOF 的紧急恢复
    • AOF 记录的都是写指令,所以当不小心使用了flushdb,只要 AOF 文件没有发生重写,就可以通过手动删除 AOF 文件中的flushdb,然后重启redis 服务就能恢复数据
    • AOF 文件的修复 redis-check-aof --fix 增量AOF文件名
  • AOF总结
    在这里插入图片描述在这里插入图片描述

RDB-AOF混合持久

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

纯缓存模式

  • 同时关闭 RDB、AOF

redis 的 key

在这里插入图片描述

redis 的数据类型和常见应用场景

String

在这里插入图片描述

List

  • 当涉及到范围时,起始为0,终止是-1时,表示整个 list 范围
    在这里插入图片描述

HashMap

在这里插入图片描述

Set集合

在这里插入图片描述

ZSet有序集合

在这里插入图片描述

bitmap位图

在这里插入图片描述

HyperLogLog基数统计

在这里插入图片描述

GEO 地理空间

在这里插入图片描述

Stream 流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

bitfiled

在这里插入图片描述

redis 事务

  • 一个事务中的所有指令,都会先加入一个队列,然后执行事务的时候,再依次取出顺序执行
    在这里插入图片描述
  • redis 命令执行是单线程架构
    在这里插入图片描述
  • redis 事务以 MULTI开始,以DISCARD/EXEC结束,然后才是 redis 服务器执行事务中的指令
    在这里插入图片描述
    在这里插入图片描述

事务的正常执行的情况

在这里插入图片描述

事务放弃的情况

在这里插入图片描述

EXEC之前发生异常

在这里插入图片描述

EXEC之后发生异常

在这里插入图片描述
在这里插入图片描述

使用 WATCH/UNWATCH

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

redis 管道

  • 管道 专注于 批量执行 一组指令,但是不是事务,因为redis 命令执行是单线程架构,中间 redis 线程可以去处理其它请求,意味着这一组指令执行过程中可以被中途插入执行其它指令
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

redis高可用

redis 复制(replica)

在这里插入图片描述
在这里插入图片描述

主从都有的配置(修改配置文件,开放port为6379的redis为例)

  • 开启 daemonize
    在这里插入图片描述
  • 注释掉 bind,或改成bind 0.0.0.0
    在这里插入图片描述
  • 指定端口port,不同机器,指定的端口不同
    在这里插入图片描述
  • 指定工作目录(RDB文件存放目录)dir,配置文件和myredis目录都在redis存放目录
    在这里插入图片描述
  • pid文件pidfile
    在这里插入图片描述
  • 日志文件存放目录(用于排查问题)logfile,日志文件、配置文件和myredis目录都在redis存放目录
    在这里插入图片描述
  • rdb文件的名字dbfilename,rdb文件存放在myredis目录中,二者又都在redis存放目录
    在这里插入图片描述
  • 关闭保护模式protected-mode
    在这里插入图片描述
  • 开启aof可选(因为已经有主从复制了)
    在这里插入图片描述

主库的配置(测试环境设定开放端口为6379的redis为主库)

  • 添加密码
    在这里插入图片描述

从库的配置

  • 从库访问主库的同行密码masterauth,值为主库的 requirepass 的值
    在这里插入图片描述
  • 告诉从库需要跟随的主库地址和端口
    • 通过配置文件这种方式就算从库重启也依然有效
      在这里插入图片描述
    • 通过指令的形式(先启动后,再指定) slaveof 主库IP 主库端口号,这种方式可用于更换(更换后前一个主库的数据会被清除)或指定主库,但是从库重启后需要重新设定

启动一主二从

  • 注意:需要提前设置防火墙开放对应的端口,保证三台机器之间能够ping
  • 从库登录redis客户端时,需要指定端口号(虽然配置文件已经修改了端口号,redis 的默认端口号是6379)
  • 从库的密码,可以和主库不一样,这里懒得设置,就都一样了
    在这里插入图片描述

主从的日志观察

  • 主库日志上看从库的信息
    在这里插入图片描述
  • 在从库日志上看主库的信息
    在这里插入图片描述

查询主从的信息(info replication)

  • 主库上查询
    在这里插入图片描述
  • 从库上查询
    在这里插入图片描述

常见问题

  • 从机不可以执行写命令
  • 不管从库连上主库的时间是什么什么时候,都遵循以下规律
    在这里插入图片描述
  • 不管主库因为何原因shutdown,主从关系都会一直保持,从库的数据可以正常访问
    在这里插入图片描述

主从传递

在这里插入图片描述

从库升级为主库

  • 修改从库配置文件,注释掉 replicaof后重启,如果是通过注释实现主从关联的,直接重启
  • 通过指令slaveof no one,使当前从库停止与其他数据库的同步,转成主数据库

主从复制的缺陷

在这里插入图片描述

  • 默认情况下,主节点出现问题,不会在slave节点中重新选一个master节点,需要人工干预

redis 哨兵(sentinel)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

redis 主从搭建

  • 参照 redis 复制,唯一需要改动的是原来主库的配置文件
    在这里插入图片描述

哨兵的搭建

在这里插入图片描述
在这里插入图片描述

  • 哨兵节点数,一般三台足够
  • 哨兵节点虽然也是 redis,但是只负责监控等功能,不存放数据
  • 可以同时监控多个主节点,如下图所示(来源官网)
    在这里插入图片描述

哨兵的配置文件

  • 在 redis 的存放目录,按照惯例,复制一份到同目录的/myredis,保留原样的配置文件
    在这里插入图片描述
  • 参数的配置,参照 redis 复制中的 主从都有的配置,哨兵节点的port默认为26397,以下为专属哨兵节点的配置内容
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
  • 以下的配置项脚本相关可以不用理会
    在这里插入图片描述

主观下线和客观下线

在这里插入图片描述
在这里插入图片描述

哨兵节点的启动

  • 配置文件名,也说明了它们各自配置的端口
    在这里插入图片描述

发生主从节点切换

在这里插入图片描述
在这里插入图片描述

  • 兵王日志内容展示,其它哨兵日志内容相同
    在这里插入图片描述在这里插入图片描述
  • 完成新的主节点切换后,可以发现哨兵节点、原来的主从节点配置文件均发生了变化
    • 哨兵节点的配置文件中,监控的节点改成了新的主节点
    • 新的主节点配置文件中,新增了改变为主节点的配置
    • 旧的主节点配置文件中,原来的主节点配置被去掉,新增从节点的配置

redis 集群(cluster,AP)

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

redis 集群的 slot 槽

在这里插入图片描述在这里插入图片描述

为什么 redis 集群的最大槽数 16384 个?

  • CRC16算法产生的hash值有16bit,该算法可以产生2^16=65536个值
    在这里插入图片描述在这里插入图片描述

slot 槽位映射的三种常见方法

Hash取余

在这里插入图片描述

一致性Hash算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

Hash槽分区

在这里插入图片描述在这里插入图片描述

三主三从 redis 集群搭建

  • 修改配置文件,一共六个,都参照 redis 复制 中的主从都有的配置修改(注意配分原来的配置文件)
    • 为每一个配置文件新增如下修改,配置文件名随意,最好是有规律,node-redis端口号.conf 下面的步骤执行成功后会自动在每个 redis 实例的工作目录中生成(设置的rdb目录)
      在这里插入图片描述
  • 启动6台 redis 实例
    • redis-server /redis存放目录/自定义目录/redisCluster+端口号.conf ,在每台redis实例执行对应的指令
  • 构建三主三从
    • 在 需要搭建 redis 集群中的任意一个服务器上输入redis-cli -a 密码 --cluster create --cluster-replicas 1 IP1:端口1 IP2:端口2 IP3:端口3 IP4:端口4 IP5:端口5 IP6:端口6
    • --cluster-replicas 1 表示为每个主节点创建一个从节点
    • 一共6个IP+端口号,模拟6个 redis 服务
      在这里插入图片描述
  • 以其中一台 redis 实列为切入点 登录,查看 集群状态
    • 登录 redis-cli -a 密码 -p redis端口号 -c,加上 -c是为了让 redis 执行指令时,自动路由到对应的 slot 槽,不加的话,在当前 redis 实例 执行了 写入 了不属于 当前 redis 实例 对应 slot 槽分区 的键值对时会报错
      在这里插入图片描述

    • 查看集群状态和信息 cluster nodes,显示所有 redis 实例的 ID信息和从属关系
      在这里插入图片描述

redis 集群 读写

  • 查看集群中某个 key 的 slot 槽位值 CLUSTER KEYSLOT key名
    在这里插入图片描述

主从容错切换(自动故障转移)

  • 自动进行,主库挂了,从库自动成为主库,旧的主库恢复后,自动成为新主库的从库
  • 节点从属调整(手动故障转移):原来的主库因为 redis 集群自动 容错切换(自动故障转移),导致从属关系发生了改变,可以登录原来的主库(现在的从库),执行指令cluster failover,回复原来的从属关系

主从动态扩容

  • 对新加入的两台 redis 实例 修改配置文件,参照 集群中的其它 redis 实例配置
  • 启动新加入的两台 reids 实例,暂时不构建从属关系,此时它们都是主库,启动指令参照 集群中的其它 redis 实例
  • 输入指令 redis-cli -a 密码 --cluster add-node 新加入redis实例的IP:端口号 集群中任意一个redis实例的IP:端口号,为集群新加入一个主节点
    在这里插入图片描述
  • 通过随意一个 redis 实例 执行指令 redis-cli -a 密码 --cluster check 集群中任意一个redis实例的IP:端口号查看 集群中 slot 槽的分配情况
    在这里插入图片描述
  • 重新分派槽号 redis-cli -a 密码 --cluster reshard 新添加的redis实例的IP地址:端口号,集群中 其它 redis 实例 会匀出适当数量的 slot 槽给新加入的 redis 实例
    在这里插入图片描述在这里插入图片描述
  • 为新的主节点添加子节点 redis-cli -a 密码 --cluster add-node 新Slave的IP:端口 新master的IP:端口 --cluster-slave --cluster-master-id 新master的ID

主从动态缩容

  • 先获取要下线的 redis 从节点 的 ID redis-cli -a 密码 --cluster check 192.168.111.174:6388
    在这里插入图片描述
  • 删除要下显得从节点 redis-cli -a 111111 --cluster del-node 192.168.111.174:6388 218e7b8b4f81be54ff173e4776b4f4faaf7c13da
  • 将已经删掉的从节点的 主节点 的 slot 槽 清空(转给集群中其它主节点)redis-cli -a 111111 --cluster reshard 192.168.111.175:6381,指令中 redis 实例的IP和端口号可以是集群中任意一个 redis 实例 的IP和端口,主要目的是执行如下如所示的 reshard,按照提示进行即可
    在这里插入图片描述
  • 清空 要删除的 主节点的 redis 实例 的 slot 槽以后,直接执行指令 redis-cli -a 111111 --cluster del-node 192.168.111.174:6387 4feb6a7ee0ed2b39ff86474cf4189ab2a554a40f 删除该主节点

集群常用指令总结

在这里插入图片描述
在这里插入图片描述

  • redis-cli -a 密码 --cluster check 192.168.111.174:6388 通过集群的任意一个 redis 实例查看集群所有 redis 的ID、分配的 slot 槽等信息、从属关系
  • cluster nodes 查看集群所有 redis 的ID、从属关系
  • cluster info
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/482145.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《基于EPNCC的脉搏信号特征识别与分类研究》阅读笔记

目录 一、论文摘要 二、论文十问 三、论文亮点与不足之处 四、与其他研究的比较 五、实际应用与影响 六、个人思考与启示 参考文献 一、论文摘要 为了快速获取脉搏信号的完整表征信息并验证脉搏信号在相关疾病临床诊断中的敏感性和有效性。在本文中,提出了一…

ChatGPT根据销售数据、客户反馈、财务报告,自动生成报告,并根据不同利益方的需要和偏好进行调整?

该场景对应的关键词库(24个): 汇报对象身份(下属、跨部门平级、领导)、销售数据(销售额、销售量、销售渠道)、财务报告(营业收入、净利润、成本费用)、市场分析&#xf…

Vulkan实战之验证层

文章目录 验证层是什么?使用验证层消息回调调试实例的创建和销毁测试配置最终代码 验证层是什么? Vulkan API是围绕最小化驱动程序开销的想法设计的,该目标的表现之一是默认情况下API中的错误检查非常有限。即使是像将枚举设置为不正确的值或…

STM32 系列 DAC的介绍与使用

STM32网上资料多,对自己来说基本的使用也是很简单的, 我的STM32专栏并没有什么系统的基础教学,基本上是某个项目用到了,或者产品使用过程出过问题 才会来记录一下,正好用到了 DAC ,一般产品还用得不多&…

【Unity入门】23.简单物理系统

【Unity入门】简单物理系统 大家好,我是Lampard~~ 欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 (一)重力系统 (1)Rigidbody组件 Unity里面有提供符合我们常规认知的物理系统组件Physics&…

GDKOI 2023游记总结

不知觉就咕了1.5个月 在回忆 2021 年那个刚步入初中的懵懂孩童参加 GDOI 的惊喜中感慨初中时光的飞逝。 2021 GDOI 普及组游记 Day - ∞ \infty ∞ 去年因为疫情取消了,今年难得重新举办,珍惜每一次机会吧。 前年的地点订在深圳耀华学校,忘…

老外从神话原型中提取的12个品牌个性

老外从神话原型中提取的12个品牌个性 也是西方视角,需要本土化 参照心理学大师荣格的理论:心理学潜意识派 趣讲大白话:品牌的调调是啥 【趣讲信息科技151期】 **************************** 12种原型又归属于4种人性动机。 1、稳定&#xff0…

Python小姿势 - ## Python中的迭代器与生成器

Python中的迭代器与生成器 在Python中,迭代是一个非常重要的概念,迭代器和生成器是迭代的两种最常见的形式。那么,迭代器与生成器有何不同呢? 首先,我们先来了解一下迭代器。 迭代器是一种对象,它可以记住遍…

第二十八章 React脚手架配置代理

为了更好地理解如何在React应用程序中配置代理,我们需要先了解什么是代理。 代理是一种充当客户端和服务器之间中间人的服务器。当客户端向服务器发送请求时,代理服务器将接收请求并将其转发到服务器。服务器将响应发送回代理服务器,代理服务…

Spring:Bean的实例化(构造方法、静态工厂和实例化工厂)

三种方式&#xff0c;分别为构造方法、静态工厂和实例化工厂 新建Module项目&#xff0c;选择Maven&#xff0c;在pom.xml导入如下依赖&#xff1a; pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.o…

网络编程 总结二

一、TCP TCP模型 1. TCP搭建相关函数&#xff1a; 套接字Socket 1&#xff09;Socket函数&#xff1a; 2&#xff09;bind 3&#xff09;listen 4&#xff09;accept 5&#xff09;recv 注意&#xff1a; 1> TCP中的recv 可以替换成read&#xff1b; 2>TCP中的…

SpringBoot自定义注解

SpringBoot自定义注解 1. 创建一个注解的基本元素 修饰符&#xff1a;访问修饰符必须为public,不写默认为pubic&#xff1b; 关键字&#xff1a;关键字为interface&#xff1b; 注解名称&#xff1a;注解名称为自定义注解的名称 注解类型元素&#xff1a;注解类型元素是注解中…

Python---闭包,装饰器,设计模式之工厂模式

1. 闭包定义 定义双层嵌套函数&#xff0c; 内层函数可以访问外层函数的变量 将内存函数作为外层函数的返回&#xff0c;此内层函数就是闭包函数 2. 闭包的好处和缺点 优点&#xff1a;不定义全局变量&#xff0c;也可以让函数持续访问和修改一个外部变量 优点&#xff1a…

【数据分析之道-Matplotlib(一)】Matplotlib Pyplot

系列文章目录 作者&#xff1a;i阿极 作者简介&#xff1a;Python领域新星作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f44d;收藏&#x1f4c1;评论&#x1f4d2;关注…

Jetson nano之ROS入门- -ROS集成开发搭建与ROS通信学习笔记

文章目录 一、ROS集成开发环境搭建二、ROS通信机制和命令1. 话题通信2. 服务通信3. 参数服务4. ROS常用命令 三、Python实现ROS通信- - 控制和读取小乌龟状态1. 配置package.xml文件2. 配置CMakeLists.txt文件3. 编写Python代码4. 配置launch文件 总结 一、ROS集成开发环境搭建…

反射、枚举

反射的定义&#xff1a;Java的反射机制是在运行状态中&#xff0c;都能对任意的类拿到这个类的所有属性&#xff0c;从而对其进行相应的修改&#xff1b;用途&#xff1a;在日常第三方应用开发中&#xff0c;可以通过反射机制来获取某个类的私有成员变量或是方法&#xff1b;主…

研究生,但是一直摆烂——想办法解决

原因剖析 孤独因为没有朋友&#xff0c; 之前自己思维误区&#xff0c;总觉得好好学习好好锻炼变得优秀就会有朋友&#xff0c;其实不是这个样子的&#xff0c;即使自己一直内卷&#xff0c;但还是很孤独。 现在重新反思自己。 没有朋友因为&#xff1a; 1 外貌 2 聊天的情商…

Which programming language do you choose

NO.1&#xff1a;JavaScript JavaScript&#xff0c;简称JS语言&#xff0c;是一种具有函数优先的轻量级&#xff0c;解释型或即时编译型的高级编程语言。虽然它是作为开发Web页面的脚本语言而出名的&#xff0c;但是它也被用到了很多非浏览器环境中&#xff0c;JavaScript 基…

老王的自动驾驶决策和规划第一章

文章目录 自动驾驶决策规划算法序章第一章&#xff08;1&#xff09; 细说五次多项式&#xff08;2&#xff09; 凸优化与非凸优化(3) 直角坐标与自然坐标转换(上, 下) 自动驾驶决策规划算法 序章 课程链接&#xff1a;序章 第一章 &#xff08;1&#xff09; 细说五次多项…

关于SpringBoot整合Websocket实现简易对话聊天窗

前言 官网链接&#xff1a;Websocket Websocket 是什么&#xff1f;它可以将两个独立的浏览器窗口作为通信的两端。 这种形式的通信与传统的 HTTP、TCP 所不同。传统的 HTTP 请求—响应协议是无法实现实时通信的&#xff0c;也就是说&#xff0c;只能由客户端向服务端发送请求…