微服务即时通信系统---(四)框架学习

目录

ElasticSearch

介绍

安装

安装kibana

ES客户端安装

 头文件包含和编译时链接库

ES核心概念

索引(Index)

类型(Type)

字段(Field)

映射(mapping)

文档(document)

ES对比MySQL

Kibana访问ES测试

创建索引库

新增数据

查看并搜索数据

删除索引

ES客户端接口介绍

ES二次封装(elasticSearch.hpp)

Json序列化

Json反序列化

创建索引(库)

插入数据

删除数据

数据搜索(查询)

二次封装测试

ES客户端操作句柄获取封装

cpp-httplib

介绍

安装

头文件和链接库

类于接口介绍

HTTP请求类

HTTP应答类

HTTP服务器类

HTTP客户端类

使用样例

websocketpp

Websocket协议介绍

Websocketpp介绍

WebSocketpp安装

类与接口

日志等级

状态码

数据帧类型

消息缓冲区

HTTP请求解析

connect连接后的相关操作(对请求进行响应)

服务器

endpoint(服务端/客户端的管理)

redis

介绍

安装

头文件包含和编译时链接库

接口介绍

Redis++客户端操作句柄获取封装


本章主要是学习和使用本项目中所需使用到的一些框架。

ElasticSearch

介绍

ElasticSearch,简称ES,是一个开源分布式搜索引擎。

它的特点有:分布式、零配置、自动发现、索引自动分片、索引副本机制、restful风格接口、多数据源、自动搜索负载等。

ES是面向文档的,意味着它可以存储整个对象或文档。

它不仅仅是存储,还会索引每个文档的内容,使之可以被搜索。

在ES中,可以对文档进行索引、搜索、排序、过滤。

安装

# 添加仓库秘钥 
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -# 添加镜像源仓库 
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elasticsearch.list # 更新软件包列表 
sudo apt update # 安装es 
sudo apt-get install elasticsearch=7.17.21 # 启动es 
sudo systemctl start elasticsearch # 安装ik分词器插件 
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install 
https://get.infini.cloud/elasticsearch/analysis-ik/7.17.21

启动ES报错:

解决办法:

调整ES虚拟内存,虚拟内存默认最大映射数为65530,无法满足ES系统要求, 需要调整为262144以上。

sudo sysctl -w vm.max_map_count=262144

在 /etc/elasticsearch/jvm.options中新增:

再次启动ES:成功。

但是我自己重新弄的时候,一直启动失败,后续查看日志发现:

sudo vim /var/log/elasticsearch/elasticsearch.log

前面下载的分词器,和当前版本不兼容(我的ES升级了,所以不兼容),于是寻找解决方案:删除旧版本分词器,下载与当前elasticsearch匹配的分词器:

sudo rm -rf /usr/share/elasticsearch/plugins/analysis-iksudo /usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.25/elasticsearch-analysis-ik-7.17.25.zipsudo systemctl restart elasticsearch.service

此时才完美解决。

验证ES是否安装启动成功:

 curl -X GET "http://localhost:9200/"

设置外网访问,如果新配置完成的话,默认只能在本机进行访问:

 sudo vim /etc/elasticsearch/elasticsearch.yml

此时用浏览器访问 "localhost:9200":

安装kibana

 Kibana 是一个开源的数据可视化工具,专门为 Elasticsearch 设计。它提供了一个用户友好的界面,用于搜索、查看和分析存储在 Elasticsearch 中的数据。Kibana 通常与 Elasticsearch 一起使用,是 Elastic Stack(以前称为 ELK Stack,包括 Elasticsearch、Logstash 和 Kibana)的核心组件之一。

在浏览器上访问:"localhost:5601"

命令安装:

sudo apt install kibana配置 Kibana(可选): 
根据需要配置 Kibana。配置文件通常位于 /etc/kibana/kibana.yml。可能需要
设置如服务器地址、端口、Elasticsearch URL 等。 
sudo vim /etc/kibana/kibana.yml  
例如,你可能需要设置 Elasticsearch 服务的 URL: 大概32行左右 
elasticsearch.host: "http://localhost:9200"

ES客户端安装

sudo apt-get install libmicrohttpd-dev # 克隆代码 
git clone https://github.com/seznam/elasticlient # 切换目录 
cd elasticlient # 更新子模块 
git submodule update --init --recursive # 编译代码 
mkdir build 
cd build 
cmake .. 
make # 安装 
make install # make的时候编译出错,这是子模块googletest没有编译安装 
# 解决: 手动安装子模块
cd ../external/googletest/ 
mkdir cmake && cd cmake/ 
cmake -DCMAKE_INSTALL_PREFIX=/usr .. 
make && sudo make install # 安装好了 再次 cmake即可

 头文件包含和编译时链接库

头文件

#include <cpr/response.h> 
#include <elasticlient/client.h>

库:

-lcpr -lelasticlient

ES核心概念

索引(Index)

一个索引就是一个拥有几分相似特征的文档的集合。

比如说,你可以有一个客户数据 的索引,一个产品目录的索引,还有一个订单数据的索引。

一个索引由一个名字来标 识(必须全部是小写字母的),并且当我们要对应于这个索引中的文档进行索引、搜索、 更新和删除的时候,都要使用到这个名字。

类型(Type)

在一个索引中,你可以定义一种或多种类型。

一个类型是你的索引的一个逻辑上的分 类/分区,其语义完全由你来定。

通常,会为具有一组共同字段的文档定义一个类型。

比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这 个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,为评论数 据定义另一个类型......

字段(Field)

分类类型备注

字符串

text、keyword

text会被分词生成索引。

keyword不会被分词生成索引,只能精确搜索。

整形integer、long、short、byte
浮点double、float
逻辑booleantrue 或者 false
日期date、date_nanos“2018-01-13” 或 “2018-01-13 12:10:30” 或者时间戳,即1970到现在的秒数/毫秒数
二进制binary二进制通常只存储,不索引。
范围range

映射(mapping)

映射是在处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、 分析器、是否被索引等等。

其它就是处理es里面数据 的一些使用规则设置也叫做映射,按着最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能对性能更好。

名称数值备注
enabledtrue(默认)、false是否仅作存储,不做搜索和分析。
indextrue(默认)、false是否构建倒排锁芯(决定了是否分词,是否被索引)。
index_option
dynamictrue(默认)、false控制mapping的自动更新。
doc_valuetrue(默认)、false是否开启doc_value,用户聚合和排序分析,分词字段不能使用。
fielddata"fielddata" :  {"format" : "disabled"}

是否为text类型启动fielddata,实现排序和 聚合分析。

针对分词字段,参与排序或聚合时能提高性 能。

不分词字段统一建议使用doc_value。

storetrue、false(默认)

是否单独设置此字段的是否存储,储而从 _source 字段中分离。

只能搜索,不能获取值。

coercetrue(默认)、false

是否开启自动数据类型转换功能。

比如:字符串转数字,浮点转整型

analyzer"analyzer" : "ik"指定分词器,默认分词器是standard analyzer
boost"boost" : 1.23字段级别的分数加权,默认值是1.0
fields

"fields" : {

        "raw" : {

                "type":

                "text",

                "index":

              "not_analyzed",

        }

}

对一个字段提供多种索引模式。

同一个字段的值,一个分词,一个不分词。

data_detectiontrue(默认)、false是否自动识别日期类型

文档(document)

一个文档是一个可被索引的基础信息单元。

比如,你可以拥有某一个客户的文档,某 一个产品的一个文档或者某个订单的一个文档。

文档以JSON(Javascript Object Notation)格式来表示,而JSON是一个到处存在的互联网数据交互格式。

在一个 index/type 里面,你可以存储任意多的文档。

一个文档必须被索引或者赋予一个索引 的type。

ES对比MySQL

MySQLES说明
DatabaseIndex最顶层的逻辑容器。
TableType (ES 7.x之后)存储结构化数据的单元。
RowDocument一条记录。
ColumnField数据字段。
SchemaMapping定义数据结构。
Index(索引)Inverted Index加速查询的数据结构。
SQLQuery DSL查询语言。
Primary Key_id唯一标识符。
分库分表Shard数据分片。
主从复制Replica Shard数据复制和高可用性。
事务版本控制数据一致性机制。
全文搜索核心功能ES 专为全文搜索设计,功能更强大。

Kibana访问ES测试

创建索引库

POST /user/_doc 
{ "settings" : { "analysis" : { "analyzer" : { "ik" : { "tokenizer" : "ik_max_word" } } } }, "mappings" : { "dynamic" : true, "properties" : { "nickname" : { "type" : "text","analyzer" : "ik_max_word" }, "user_id" : { "type" : "keyword", "analyzer" : "standard" }, "phone" : { "type" : "keyword", "analyzer" : "standard" }, "description" : { "type" : "text", "enabled" : false }, "avatar_id" : { "type" : "keyword" ,"enabled" : false } } } 
}

新增数据

POST /user/_doc/_bulk 
{"index":{"_id":"1"}} 
{"user_id" : "USER4b862aaa-2df8654a-7eb4bb65e3507f66","nickname" : "昵称1","phone" : "手机号1","description" : "签名1","avatar_id" : "头像1"} 
{"index":{"_id":"2"}} 
{"user_id" : "USER14eeeaa5-442771b9-0262e455e4663d1d","nickname" : "昵称2","phone" : "手机号2","description" : "签名2","avatar_id" : "头像2"} 
{"index":{"_id":"3"}} 
{"user_id" : "USER484a6734-03a124f0-996c169dd05c1869","nickname" : "昵称3","phone" : "手机号3","description" : "签名3","avatar_id" : "头像3"} 
{"index":{"_id":"4"}} 
{"user_id" : "USER186ade83-4460d4a6-8c08068f83127b5d","nickname" : "昵称4","phone" : "手机号4","des

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

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

相关文章

除了 `task_type=“SEQ_CLS“`(序列分类),还有CAUSAL_LM,QUESTION_ANS

task_type="SEQ_CLS"是什么意思:QUESTION_ANS 我是qwen,不同模型是不一样的 SEQ_CLS, SEQ_2_SEQ_LM, CAUSAL_LM, TOKEN_CLS, QUESTION_ANS, FEATURE_EXTRACTION. task_type="SEQ_CLS" 通常用于自然语言处理(NLP)任务中,SEQ_CLS 是 Sequence Classif…

Android ViewPager使用预加载机制导致出现页面穿透问题

​ 缘由 在应用中使用ViewPager&#xff0c;并且设置预加载页面。结果出现了一些异常的现象。 我们有4个页面&#xff0c;分别是4个Fragment&#xff0c;暂且称为FragmentA、FragmentB、FragmentC、FragmentD&#xff0c;ViewPager在MainActivity中&#xff0c;切换时&#x…

apt3.0和apt2.0的区别

一&#xff0c;简单区别 更新方式 apt2.0&#xff1a;一次性更新所有内容&#xff0c;没有分阶段更新功能。apt3.0&#xff1a;引入分阶段更新功能&#xff0c;可分批推送更新包。 界面显示 apt2.0&#xff1a;界面简单&#xff0c;输出信息较为杂乱&#xff0c;没有彩色高亮和…

过电压保护器与传统的保护方式对比

过电压保护器主要用于保护电气设备免受大气过电压&#xff08;如雷击&#xff09;和操作过电压&#xff08;开关动作等引发&#xff09;的侵害。它通常由非线性电阻片等元件组成&#xff0c;利用其独特的伏安特性工作。正常电压下&#xff0c;保护器呈现高阻态&#xff0c;几乎…

机器学习(3)——决策树

文章目录 1. 决策树基本原理1.1. 什么是决策树&#xff1f;1.2. 决策树的基本构成&#xff1a;1.3. 核心思想 2. 决策树的构建过程2.1. 特征选择2.1.1. 信息增益&#xff08;ID3&#xff09;2.1.2. 基尼不纯度&#xff08;CART&#xff09;2.1.3. 均方误差&#xff08;MSE&…

充电桩领域垂直行业大模型分布式推理与训练平台建设方案 - 慧知开源充电桩平台

没有任何广告&#xff01; 充电桩领域垂直行业大模型分布式推理与训练平台建设方案 一、平台定位与核心价值 行业首个垂直化AI平台 专为充电桩运营场景设计的分布式大模型训练与推理基础设施&#xff0c;实现"算力-算法-场景"三位一体闭环管理。 核心价值主张&am…

NLP高频面试题(四十五)——PPO 算法在 RLHF 中的原理与实现详解

近端策略优化(Proximal Policy Optimization, PPO)算法是强化学习领域的一种新颖且高效的策略优化方法,在近年大规模语言模型的人类反馈强化学习(Reinforcement Learning with Human Feedback, RLHF)中发挥了关键作用。本文将以学术严谨的风格,详细阐述 PPO 算法的原理及…

C++指针和引用之区别(The Difference between C++Pointers and References)

面试题&#xff1a;C指针和引用有什么区 C指针和引用有什么区别&#xff1f; 在 C 中&#xff0c;指针和引用都是用来访问其他变量的值的方式&#xff0c;但它们之间存在一些重要的区别。了解这些区别有助于更好地理解和使用这两种工具。 01 指针 指针&#xff08;Pointer…

LWIP学习笔记

TCP/ip协议结构分层 传输层简记 TCP&#xff1a;可靠性强&#xff0c;有重传机制 UDP&#xff1a;单传机制&#xff0c;不可靠 UDP在ip层分片 TCP在传输层分包 应用层传输层网络层&#xff0c;构成LWIP内核程序&#xff1a; 链路层&#xff1b;由mac内核STM芯片的片上外设…

【经验记录贴】活用shell,提高工作效率

背景 最近在做测试的时候&#xff0c;需要手动kill服务的进程&#xff0c;然后通过命令重启服务&#xff0c;再进行测试。每次重启都会涉及到下面三个命令的执行&#xff1a; 1&#xff09;检索进程ID $ ps -eLf | grep programname root 1123 112 1234 0 0 0 0:00…

MacOS 系统下 Git 的详细安装步骤与基础设置指南

MacOS 系统下 Git 的详细安装步骤与基础设置指南—目录 一、安装 Git方法 1&#xff1a;通过 Homebrew 安装&#xff08;推荐&#xff09;方法 2&#xff1a;通过 Xcode Command Line Tools 安装方法 3&#xff1a;手动下载安装包 二、基础配置1. 设置全局用户名和邮箱2. 配置 …

一文读懂 AI

2022年11月30日&#xff0c;OpenAI发布了ChatGPT&#xff0c;2023年3月15日&#xff0c;GPT-4引发全球轰动&#xff0c;让世界上很多人认识了ai这个词。如今已过去快两年半&#xff0c;AI产品层出不穷&#xff0c;如GPT-4、DeepSeek、Cursor、自动驾驶等&#xff0c;但很多人仍…

【教程】检查RDMA网卡状态和测试带宽 | 附测试脚本

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 检查硬件和驱动状态 测试RDMA通信 报错修复 对于交换机的配置&#xff0c;可以看这篇&#xff1a; 【教程】详解配置多台主机通过交换机实现互…

计算机网络 - TCP协议

通过一些问题来讨论 TCP 协议 什么是 TCP &#xff1f;举几个应用了 TCP 协议的例子TCP协议如何保证可靠性&#xff1f;tcp如何保证不会接受重复的报文&#xff1f;Tcp粘包拆包问题了解吗&#xff1f;介绍一下&#xff0c;如何解决&#xff1f;TCP拥塞控制与流量控制区别&…

Fiddler 进行断点测试:调试网络请求

目录 一、什么是断点测试&#xff1f; 二、Fiddler 的断点功能 三、如何在 Fiddler 中设置断点&#xff1f; 步骤 1&#xff1a;启动 Fiddler 步骤 2&#xff1a;启用断点 步骤 3&#xff1a;捕获请求 步骤 4&#xff1a;修改请求或响应 四、案例&#xff1a;模拟登录失…

OpenCv高阶(三)——图像的直方图、图像直方图的均衡化

目录 一、直方图 1、计算并显示直方图 2、使用matplotlib方法绘制直方图&#xff08;不划分小的子区间&#xff09; 3、使用opencv的方法绘制直方图 &#xff08;划分16个小的子亮度区间&#xff09; 4、绘制彩色图像的直方图&#xff0c;将各个通道的直方图值都画出来 二、…

Flutter 与原生通信

Flutter 与原生之间的通信主要基于通道机制&#xff0c;包括 MethodChannel、EventChannel 和 BasicMessageChannel。 MethodChannel&#xff1a;用于 Flutter 与原生之间的方法调用&#xff0c;实现双向通信&#xff0c;适合一次性的方法调用并获取返回值&#xff0c;如 Flut…

前端面试-Vue篇

核心概念 Vue 3的响应式原理与Vue 2有何本质区别&#xff1f;Vue中虚拟DOM的diff算法优化策略有哪些&#xff1f;Vue组件间通信方式有哪些&#xff1f;适用场景分别是什么&#xff1f;Vue的生命周期钩子在Composition API中如何替代&#xff1f;Vue的模板编译过程是怎样的&…

光刻机研发与市场现状分析报告

1. 引言 光刻机&#xff08;Lithography Machine&#xff09;是半导体制造的核心设备&#xff0c;其技术水平和市场供应能力直接影响全球芯片产业的发展。随着人工智能&#xff08;AI&#xff09;、5G、高性能计算&#xff08;HPC&#xff09;和自动驾驶等技术的兴起&#xff0…

Missashe考研日记-day21

Missashe考研日记-day21 1 专业课408 学习时间&#xff1a;4h学习内容&#xff1a; 今天先把昨天学的内容的课后习题做了&#xff0c;整整75道啊&#xff0c;然后学了OS第二章关于CPU调度部分的内容&#xff0c;这第二章太重要了&#xff0c;以至于每一小节的内容都比较多&am…