Windows环境安装Elasticsearch和Kibana

文章目录

  • 1 Elasticsearch
    • 1.1 下载
    • 1.2 解压并添加环境变量
    • 1.3 访问
    • 1.4 cmd命令
    • 1.5 中文分词器
      • 1.5.1 下载
      • 1.5.2 安装
        • 1.5.2.1 命令安装
        • 1.5.2.2 手动安装
        • 1.5.2.3 验证分词
    • 1.6 使用curl批量导入
  • 2 安装 kibana
    • 2.1 下载kibana
    • 2.2 中文界面
    • 2.3 操作索引
      • 2.3.1 增加索引
        • 2.3.1.1 单条新增
        • 2.3.1.2 批量新增
      • 2.3.2 查看索引
      • 2.3.3 修改索引
      • 2.3.4 删除索引
    • 2.4 查询操作
      • 2.4.1 查询对象
      • 2.4.2 分页排序查询
        • 2.4.2.1 排序查询
        • 2.4.2.2 分页查询
      • 2.4.3 只返回部分字段
      • 2.4.4 高级查询
        • 2.4.4.1 布尔组合
        • 2.4.4.2 范围查询
        • 2.4.4.3 模糊查询
        • 2.4.4.4 过滤
      • 2.4.5 聚合操作

1 Elasticsearch

1.1 下载

Elasticsearch 高版本内置jdk,无需使用系统安装的java
官网下载:https://www.elastic.co/cn/downloads/elasticsearch#ga-release
在这里插入图片描述

1.2 解压并添加环境变量

解压后,进入bin 目录,双击 elasticsearch.bat 启动 elasticsearch 服务
在这里插入图片描述
添加到环境变量 Elasticsearch_Server,并加入到 PATH
在这里插入图片描述
在这里插入图片描述

1.3 访问

如果是 低版本访问,直接访问 http://127.0.0.1:9200/

{
  "name" : "WIN10-0005",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "N1y8VKIrSJetMBTokWxFoA",
  "version" : {
    "number" : "7.9.0",
    "build_flavor" : "default",
    "build_type" : "zip",
    "build_hash" : "a479a2a7fce0389512d6a9361301708b92dff667",
    "build_date" : "2020-08-11T21:36:48.204330Z",
    "build_snapshot" : false,
    "lucene_version" : "8.6.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

如果是高版本,则需要以https的方式访问:https://127.0.0.1:9200/,同时还得留意启动时日志的用户名+密码
在这里插入图片描述

1.4 cmd命令

注意:以下命令最好用 管理员身份 运行

安装 Elasticsearch 服务:elasticsearch-service.bat install
在这里插入图片描述
卸载Elasticsearch服务:elasticsearch-service.bat remove

如下的elasticsearch-service命令需要以上面的install为基础,才能进行下面的命令:

  • 启动Elasticsearch服务:elasticsearch-service.bat start,这种方式启动和上面的双击 elasticsearch.bat 启动区别是后置启动,不会一直占着dos窗口刷日志
  • 停止Elasticsearch服务:elasticsearch-service.bat stop
  • 启动 Elasticsearch 属性gui:elasticsearch-service.bat manager

1.5 中文分词器

1.5.1 下载

下载 ik分词器:https://github.com/medcl/elasticsearch-analysis-ik,如果不能访问github,就用国内的这个gitee也可以:https://gitee.com/mirrors/elasticsearch-analysis-ik/tree/master/
注意IK分词器插件的版本要和 ElasticSearch的版本一致,github上点击下面下载历史分词器
在这里插入图片描述

1.5.2 安装

1.5.2.1 命令安装

把下载的zip包随便放个位置,比如在解压文件夹下,使用bin目录中的elasticsearch-plugin命令即可安装成功:elasticsearch-plugin install

D:\SoftWare\Tools\Elasticsearch\elasticsearch-7.9.0\bin>elasticsearch-plugin install file:\\\\D:\SoftWare\Tools\Elasticsearch\elasticsearch-7.9.0\elasticsearch-analysis-ik-7.9.0.zip
-> Installing file:\\\\D:\SoftWare\Tools\Elasticsearch\elasticsearch-7.9.0\elasticsearch-analysis-ik-7.9.0.zip
-> Downloading file:\\\\D:\SoftWare\Tools\Elasticsearch\elasticsearch-7.9.0\elasticsearch-analysis-ik-7.9.0.zip
[=================================================] 100%??
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@     WARNING: plugin requires additional permissions     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.net.SocketPermission * connect,resolve
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.

Continue with installation? [y/N]y
-> Installed analysis-ik

安装成功后在plugins下有一个analysis-ik文件夹,同时下面会有很多jar包
在这里插入图片描述

1.5.2.2 手动安装

直接手动解压后,在plgins下新建一个文件夹,比如ik,并把解压后的jar包放进新建的ik包中,同时把在新建的ik下新建config文件夹,存放解压后的配置文件

复制解压后的ik分词器中的config文件夹中配置 IKAnalyzer.cfg.xml 文件放在ES 目录 /plugins/ik/config/IKAnalyzer.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 -->
        <entry key="ext_dict"></entry>
         <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords"></entry>
        <!--用户可以在这里配置远程扩展字典 -->
        <!-- <entry key="remote_ext_dict">words_location</entry> -->
        <!--用户可以在这里配置远程扩展停止词字典-->
        <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

1.5.2.3 验证分词

在kibana 的开发工具中输入以下来验证,其中

  • ik_max_word:会做最细粒度的拆分,把能拆分的词都拆出来
  • ik_smart:会做最粗粒度的拆分,贪心算法,尽可能把词分得长
GET _analyze
{
  "analyzer":"ik_max_word",
  "text": "我们是中国人"
}

1.6 使用curl批量导入

把下载的 curl.exe 和要上传的文件放进一个文件夹内
在这里插入图片描述
在cmd中,先切换到 curl 所在目录内,再运行如下命令:

curl -H "Content-Type: application/json" 
	-XPOST "localhost:9200/test001/product/_bulk?refresh" 
	--data-binary "@products.json"

2 安装 kibana

Kibana 是在ElasticSearch 有了相当多的数据之后,进行分析这些数据用的工具。 Kibana 里面有一个叫做 Dev Tools的,可以很方便地以Restful 风格向 ElasticSearch 服务器提交请求

2.1 下载kibana

下载地址和ElasticSearch一样地址,下载Kibana是在 Elasticsearch 历史版本中查找:https://www.elastic.co/cn/downloads/elasticsearch#ga-release
注意:下载与 Elasticsearch 相同版本的 kibana

加压后进入 bin 目录 运行启动中的 kibana.bat

运行测试,在浏览器中输入:127.0.0.1:5601,进入页面
GET /_cat/health?v:然后点击绿色箭头进行运行,就可以看到右侧出现查询结果
GET /_cat/health?v 这个命令用来查看服务器状态(健康度),green 表示一切OK
在这里插入图片描述

2.2 中文界面

修改 config\kibana.yml 文件,将 i18n.locale: "en", 改为 i18n.locale: "zh-CN"

i18n.locale: "zh-CN"

2.3 操作索引

索引相当于就是一个数据库服务器上的某个数据库,所以索引也可以看成是ElasticSearch 里的某个数据库

由于 ElasticSearch 支持Restful 风格,因此可以直接使用
在使用 Restful 风格之前,进行所以管理需要这样的访问地址: add,delete,update,get 等不同的访问地址来表示不同的业务请求。
但是使用 Restful 风格,就通过提交不同的method 来表示 CRUD:

  • PUT 表示增加
  • GET 表示获取
  • POST表示更新
  • DELETE 表示删除

2.3.1 增加索引

2.3.1.1 单条新增

在 kibana 控制台中输入如下命令:
打开 kibana控制台:http://127.0.0.1:5601/app/dev_tools#/console

运行如下命令:
PUT /test001?pretty

返回:
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "test001"
}

表示创建成功了,索引名称是test001

PUT /test001/product/1?pretty
{
  "name": "蜡烛"
}
返回
{
  "_index" : "test001",
  "_type" : "product",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

返回如图所示增加成功的响应
注意: 其中 test001 是索引,productelastic search 里是 type 的概念,相当于数据库里的表,这里就相当于向 product 表里插入了一条数据

2.3.1.2 批量新增

使用 POST _bulk 命令

发送
POST _bulk
{"index":{"_index":"test001","_type":"product","_id":10001}}
{"code":"540785126782","price":398,"name":"房屋卫士自流平美缝剂瓷砖地砖专用双组份真瓷胶防水填缝剂镏金色","place":"上海","category":"品质建材"}
{"index":{"_index":"test001","_type":"product","_id":10002}}
{"code":"24727352473","price":21.799999237060547,"name":"艾瑞泽手工大号小号调温热熔胶枪玻璃胶枪硅胶条热溶胶棒20W-100W","place":"山东青岛","category":"品质建材"}
{"index":{"_index":"test001","_type":"product","_id":10003}}

2.3.2 查看索引

使用命令:GET /_cat/indices?v

发送:GET /_cat/indices?v
返回:
health status index                          uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .apm-custom-link               4sDRsROYSv2Awz9mZRrdYg   1   0          0            0       208b           208b
green  open   .kibana_task_manager_1         Nvzs-tllQhW7sU1ITpW__w   1   0          6            5    200.4kb        200.4kb
green  open   .kibana-event-log-7.9.0-000001 TT6RfcaeSQ26KI2URoXHoA   1   0          3            0     16.2kb         16.2kb
green  open   .apm-agent-configuration       YHrdAyKbQSCVjAbw3gSBsQ   1   0          0            0       208b           208b
yellow open   test001                        vZZ9KuO-R0qH_lNl0iWE-A   1   1          0            0       208b           208b
green  open   .kibana_1                      WNX2ylpfRGSIWUTXfZNyOg   1   0         74            0     10.7mb         10.7mb

使用单个命令 GET /test001/product/1?pretty 查看单个

发送:GET /test001/product/1?pretty
返回
{
  "_index" : "test001",
  "_type" : "product",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "蜡烛"
  }
}

2.3.3 修改索引

使用 PUT /test001/product/1?pretty

发送:
PUT /test001/product/1?pretty
{
  "name": "红色蜡烛"
}

第二种使用 POST,这才是正规的修改,其实和修改文档1 效果一样的

POST /test001/product/1/_update?pretty
{
  "doc": { "name": "蓝色蜡烛" }
}

2.3.4 删除索引

使用命令:DELETE /test001?pretty

发送:DELETE /test001?pretty
返回:
{
  "acknowledged" : true
}

使用命令:DELETE /test001/product/1?pretty


返回
{
  "_index" : "test001",
  "_type" : "product",
  "_id" : "1",
  "_version" : 4,
  "result" : "deleted",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 3,
  "_primary_term" : 1
}

2.4 查询操作

2.4.1 查询对象

query查询对象中有值:

  • match_all:代表查询所有
  • match:匹配查询
    match类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是or的关系
    • and关系
      某些情况下,我们需要更精确查找,我们希望这个关系变成and,可以这样做
or关系查询
{
    "query":{
        "match":{
            "title":"小米电视"
        }
    }
}
and 关系查询
{
    "query":{
        "match": {
          "title": {
            "query": "小米电视",
            "operator": "and"
          }
        }
    }
}
or和and都包含:match 查询支持 minimum_should_match 最小匹配参数, 这让我们可以指定必须匹配的词项数用来表示一个文档是否相关
{
    "query":{
        "match":{
            "title":{
            	"query":"小米曲面电视",
            	"minimum_should_match": "75%"
            }
        }
    }
}
  • multi_match:多字段查询
    multi_matchmatch类似,不同的是它可以在多个字段中查询
我们会在title字段和subtitle字段中查询小米这个词
{
    "query":{
        "multi_match": {
            "query":    "小米",
            "fields":   [ "title", "subTitle" ]
        }
	}
}
  • term:词条匹配
    term 查询被用于精确值匹配,这些精确值可能是数字、时间、布尔或者那些未分词的字符串
  • terms:多词条精确匹配
    terms 查询和 term 查询一样,但它允许你指定多值进行匹配。如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件:
{
    "query":{
        "terms":{
            "price":[2699.00,2899.00,3899.00]
        }
    }
}

2.4.2 分页排序查询

2.4.2.1 排序查询

GET /test001/_search
{
  "query": { "match_all": {} },
  "sort": [
    { "_id": "desc" }
  ]
}
或者
{
  "query": { "match_all": {} },
  "sort": [
    { "_id": {"order":"desc"} }
  ]
}

2.4.2.2 分页查询

GET /test001/_search
{
  "query": { "match_all": {} },
  "from": 1,
  "size": 3,
  "sort": { "_id": { "order": "desc" } }
}

2.4.3 只返回部分字段

通过_source或者 includesexcludes

  • _sourceincludes:来指定想要显示的字段
  • excludes:来指定不想要显示的字段
只用_source
GET /test001/_search
{
  "query": { "match_all": {} },
  "_source": ["name""price"]
}

使用includes
{
  "_source": {
    "includes":["title","price"]
  },
  "query": {
    "term": {
      "price": 2699
    }
  }
}
使用excludes
{
  "_source": {
     "excludes": ["images"]
  },
  "query": {
    "term": {
      "price": 2699
    }
  }
}

2.4.4 高级查询

2.4.4.1 布尔组合

bool把各种其它查询通过must(与)must_not(非)should(或)的方式进行组合

{
    "query":{
        "bool":{
        	"must":     { "match": { "title": "大米" }},
        	"must_not": { "match": { "title":  "电视" }},
        	"should":   { "match": { "title": "手机" }}
        }
    }
}

2.4.4.2 范围查询

range 查询找出那些落在指定区间内的数字或者时间

{
    "query":{
        "range": {
            "price": {
                "gte":  1000.0,
                "lt":   2800.00
            }
    	}
    }
}

2.4.4.3 模糊查询

fuzzy 查询是 term 查询的模糊等价。它允许用户搜索词条与实际词条的拼写出现偏差,但是偏差的编辑距离不得超过2

{
  "query": {
    "fuzzy": {
      "title": "appla"
    }
  }
}

2.4.4.4 过滤

所有的查询都会影响到文档的评分及排名。如果我们需要 在查询结果中进行过滤,并且不希望过滤条件影响评分,那么就不要把过滤条件作为查询条件来用。而是使用filter方式:

{
    "query":{
        "bool":{
        	"must":{ "match": { "title": "小米手机" }},
        	"filter":{
                "range":{"price":{"gt":2000.00,"lt":3800.00}}
        	}
        }
    }
}

注意:filter中还可以再次进行bool组合条件过滤。

如果一次查询只有过滤,没有查询条件,不希望进行评分,我们可以使用constant_score取代只有 filter 语句的 bool 查询。在性能上是完全相同的,但对于提高查询简洁性和清晰度有很大帮助。

{
    "query":{
        "constant_score":   {
            "filter": {
            	 "range":{"price":{"gt":2000.00,"lt":3000.00}}
            }
        }
}

2.4.5 聚合操作

如下查询,第一个size:0表示 不用显示每条数据,第二个size:3表示分组数据显示3条

GET /test001/_search
{
  "size": 0,
  "aggs": {
    "group_by_place": {
      "terms": {
        "field": "place.keyword",
        "size": 3
      }
    }
  }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Apache Doris学习记录

1. Doris基础学习 中文官网:https://doris.apache.org/zh-CN/docs/dev/summary/basic-summary/ 1.1 doris 简介 Apache Doris 是一个现代化的 MPP(Massively Parallel Processing&#xff0c;即大规模并行处理) 分析型数据库产品 亚秒级响应时间即可获得查询结果 可以支持 10PB…

紧急下架,AI以假乱真学明星唱歌;哈佛法学院专家谈AI和版权法

几周前&#xff0c;一首据称由 Drake 和 The Weeknd 创作的新歌登陆 TikTok 和 Spotify&#xff0c;并迅速在互联网上像野火一样传播开来。“我袖子上的心”在嘻哈乐迷中获得了好评如潮和高度兴奋&#xff0c;这不仅是因为该曲目具有感染力的歌词和旋律&#xff0c;而且还因为对…

jieba分词(1):入门案例

1 场景介绍 大数据量的查询问题 假设我们要从商品的表里面查询一个商品 我们的数据库里面肯定有个t_goods的表&#xff0c;我们现在利用商品的名称做模糊查询 1.1 对于数据库的查询的 select * from t_goods where goodsName like “%手机%” ; 问题&#xff1a; 这个查询…

开关电源基础01:电源变换器基础(2)

说在开头&#xff1a;关于德布罗意的电子波&#xff08;3&#xff09; 1923年&#xff0c;德布罗意在求出他的相波之前&#xff0c;康普顿刚好用光子说解释了康普顿效应&#xff08;记性好的胖友们应该还记得&#xff1a;散射波的波长变长问题&#xff09;&#xff0c;从而带领…

SPSS如何进行聚类分析之案例实训?

文章目录 0.引言1.快速聚类分析2.分层聚类分析3.两阶段聚类分析 0.引言 因科研等多场景需要进行数据统计分析&#xff0c;笔者对SPSS进行了学习&#xff0c;本文通过《SPSS统计分析从入门到精通》及其配套素材结合网上相关资料进行学习笔记总结&#xff0c;本文对聚类分析进行阐…

[架构之路-187]-《软考-系统分析师》-5-数据库系统 - 操作型数据库OLTP与分析型数据库OLAP比较

OLAP与OLTP的区别&#xff1f; OLTP(Online transaction processing) 在线/联机事务处理。典型的OLTP类操作都比较简单&#xff0c;主要是对数据库中的数据进行增删改查&#xff0c;操作主体一般是产品的用户。 OLAP(Online analytical processing): 指联机分析处理。通过分…

SPSS如何进行判别分析之案例实训?

文章目录 0.引言1.一般判别分析2.逐步判别分析3.决策树分析 0.引言 因科研等多场景需要进行数据统计分析&#xff0c;笔者对SPSS进行了学习&#xff0c;本文通过《SPSS统计分析从入门到精通》及其配套素材结合网上相关资料进行学习笔记总结&#xff0c;本文对判别分析进行阐述。…

类和对象(上)

文章目录 1.面向过程和面向对象初步认识2.类的引入3.类的定义3.1声明和定义全部放在类体3.2.声明放在.h&#xff0c;定义放在.cpp 4..类的访问限定符及封装4.1封装4.2访问限定符4.3C中的struct和class 5.类的作用域6.类的实例化6.1引入6.2定义 7.类对象模型7.1类对象的存储方式…

MySQL知识学习06(SQL语句在MySQL中的执行过程)

1、MySQL 基本架构概览 下图是 MySQL 的一个简要架构图&#xff0c;从下图可以很清晰的看到用户的 SQL 语句在 MySQL 内部是如何执行的。 先简单介绍一下下图涉及的一些组件的基本作用帮助大家理解这幅图 连接器&#xff1a; 身份认证和权限相关(登录 MySQL 的时候)。查询缓…

Java设计模式-代理模式

简介 代理模式是一种结构型设计模式&#xff0c;它可以让我们通过一个代理对象来访问一个真实的目标对象&#xff0c;从而实现对目标对象的功能扩展或保护。代理模式的主要角色有三个&#xff1a; 抽象主题&#xff08;Subject&#xff09;&#xff1a;定义了真实主题和代理主…

【Mybatis】增删改查

1.添加相应的jar包 2.创建持久化类 在src目录下创建一个名为com.mybatis.po的包 创建持久化类MyUser,包含三个属性&#xff08;uid,uname,usex) package com.mybatis.po; /***springtest数据库中user表的持久化类*/ public class MyUser {private Integer uid;//主键private…

OpenGL(六)——坐标系统

目录 一、前言 二、空间系 2.1 局部空间 2.2 世界空间 2.3 观察空间 2.4裁剪空间 2.5 正射投影 2.6 透视投影 2.7 屏幕空间 三、透视箱子 3.1 创建模型矩阵 3.2 创建观察矩阵 3.3 创建透视投影矩阵 3.4 修改顶点着色器 3.5 传递变换矩阵 四、旋转的箱子 五、好…

[Gitops--10]微服务项目部署流水线编写

微服务项目部署流水线编写 1. 部署环境说明 序号管理地址作用1192.168.31.199GitLab2192.168.31.104Harbor3192.168.31.131kubesphere 1.1 GitLab 1.2 流水线 1.2.1 创建流水线 1.2.2 创建凭证 1.2.3 创建kubeconfig凭证 这里需要注意的是,config中如果使用的是域名,那么需…

BetaFlight统一硬件配置文件研读之serial命令

BetaFlight统一硬件配置文件研读之serial命令 1. 源由2. 代码分析3. 实例分析4. 配置情况5. 参考资料 统一硬件配置文件的设计是一种非常好的设计模式&#xff0c;可以将硬件和软件的工作进行解耦。 1. 源由 cli命令中serial是对UART串口的配置&#xff0c;通常情况下BetaFli…

Redo log详解

WAL&#xff08;Write-Ahead Logging&#xff09;机制 WAL 的全称是 Write-Ahead Logging&#xff0c;中文称预写式日志(日志先行)&#xff0c;是一种数据安全写入机制。就是先写日志&#xff0c;然后再写入磁盘&#xff0c;这样既能提高性能又可以保证数据的安全性。Mysql中的…

基于Python的PROSAIL模型介绍以及使用

1、介绍 PROSAIL是两种模型耦合得到的。 SAIL是冠层尺度的辐射传输模型&#xff0c;把冠层假设成是连续的且具有给定几何形状和密度的水平均匀分布的介质层&#xff0c;从而模拟入射辐射与均匀介质之间的相互作用&#xff0c;具体还是挺复杂的。而PROSPECT就是叶片尺度的辐射传…

Kafka知识概况

Kafka知识概况 Kafka简介Kafka 生产者Kafka BrokerKafka 消费者Kafka-Eagle 监控Kafka-Kraft 模式集成 SpringBoot Kafka简介 消息队列简介&#xff1a; 目 前企业中比较常见的消息队列产 品主 要有 Kafka、ActiveMQ 、RabbitMQ 、RocketMQ 等。在大数据场景主要采用 Kafka 作…

vmware虚拟机安装k8s(之前已经安装过docker)

1、安装开始 先执行&#xff1a;curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add 再执行更改源&#xff1a;echo "deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main" >> /etc/apt/sources.list …

redis分布式锁

文章目录 锁的种类一个靠谱分布式锁需要具备的条件和刚需独占性高可用防死锁不乱抢重入性 如何一步一步实现一个完备的分布式锁单机版加锁Redis分布式锁setnx宕机与过期 防死锁防止误删key的问题lua脚本保证原子性 hsetnx 可重入锁简单工厂模式RedisDistributeLockDistributed…

阿里云服务器购买教程(新手入门指南)

阿里云服务器ECS选购指南&#xff0c;阿里云百科分享2023阿里云服务器新手选择流程&#xff0c;选购云服务器有两个入口&#xff0c;一个是选择活动机&#xff0c;只需要选择云服务器地域、系统、带宽即可&#xff1b;另一个是在云服务器页面&#xff0c;自定义选择云服务器配置…