【速成Redis】03 Redis 五大高级数据结构介绍及其常用命令 | 消息队列、地理空间、HyperLogLog、BitMap、BitField

news2024/11/14 18:50:31

前言:

上篇博客我们讲到redis五大基本数据类型(也是就下图的第一列)。 

【速成Redis】02 Redis 五大基本数据类型常用命令-CSDN博客文章浏览阅读1k次,点赞24次,收藏10次。该篇适用于速成redis。本篇我们将讲解:redis五大基本数据类型的常用语句。https://blog.csdn.net/weixin_71246590/article/details/142366022?spm=1001.2014.3001.5501

这篇博客我们将介绍右边这一列高级数据类型。

食用说明:初学者建议边看边看边敲。复习者可根据目录快速复习某个命令。

目录

1.发布订阅功能

- 订阅某频道:subscribe channel

- 在某频道发布信息:publish channel message

2.消息队列Stream

A:流 

 - 添加消息:XADD [MAXLEN ] [ ...]

- 求消息个数 :XLEN 

- 查看所有消息:XRANGE  - +

- 根据消息id删除消息:XDEL   message_id

- 删除所有消息:xtrim    maxlen 0

- 读消息 :XREAD COUNT BLOCK STREAMS

B:消费者组 

 - 创建一个新的消费者组 :XGROUP CREATE [MKSTREAM]

- 查询特定流上的消费者组信息:XINFO GROUPS mystream

 - 创建消费者:XGROUP CREATECONSUMER key group consumer [MKSTREAM]

-  消费者从消费者组中读取消息:XREADGROUP  GROUP COUNT BLOCK STREAMS

- 消费者确认某条信息:XACK  [id ...]

- 查看消费者组中待处理的消息(还未被 XACK 确认)XPENDING   [ []]

 3.地理空间Geospatial

- GEOADD key longitude latitude member [longitude latitude member ...] :将地理空间数据(经纬度坐标)添加到 Redis 集合中

- 获取集合中两个点之间的距离::GEODIST key member1 member2

- GEOREASH 以一个成员的位置或指定的经纬度为中心,按照圆形或者矩形的范围内搜索其他成员。

4.HyperLogLog

- PFADD key member [merber ...] 将指定的元素添加到 HyperLogLog 中,自动去重

-PFCOUNT key:查看基数/返回与指定 HyperLogLog 相关联的唯一元素的近似计数。

- PFMERGE destkey sourcekey [sourcekey ...] :将多个 HyperLogLog 合并为一个

5.位图BitMap

- SETBIT key offset value :设置指定位置上的位 (bit) 为 0 或 1

- GETBIT key offset :获取指定位置上的值

- SET key value

value: 要存储的字符串值(可以是二进制、十进制、十六进制等形式)。

- BITCOUNT  key [start end]:计算字符串中的 比特位值为 1 的总数

扩展:为什么BITCOUNT 命令在统计某种状态(如签到、点赞等)时特别好用?

- BITPOS key bit [start] [end] :查找第一个设置为指定值的位(bit)的位置

常见应用场景:

 6.位域BitField 

 BITFIELD key [GET|SET|INCRBY] type offset [value] [overflow]


1.发布订阅功能

- 订阅某频道:subscribe channel

subscribe 频道名

在一个终端订阅daimajiang频道


- 在某频道发布信息:publish channel message

publish 某频道 xx信息

在daimajiang频道发布信息:redis

第一个终端成功收到信息

订阅频道的终端可以有多个 ,发布信息的终端也可以有多个。

发布订阅功能的局限性:消息无法持久化、无法记录历史消息等等。下面学的消息队列Stream就能解决这些问题。


2.消息队列Stream

这是redis5.0版本引入的一个新的数据结构,一个轻量级的消息队列。

命令都以x开头。


A:流 

 - 添加消息:XADD <stream-name> [MAXLEN <maxlen>] <id> <field1> <value1> [<field2> <value2> ...]

参数说明:

  • <stream-name> :要追加消息的流的名称。如果流不存在,Redis 会自动创建它。
  • [MAXLEN <maxlen>] :可选参数,用于限制流的长度。它会在追加新消息时自动删除旧消息,保持流的长度在指定的最大值之内。
  • <id>:消息的唯一标识符。你可以使用特殊值 *,由 Redis 自动生成一个基于时间戳的唯一 ID。也可以自己填。
  • <field1> <value1>:消息的字段和值对。每个消息至少包含一个字段和值对。

示例: 

使用*来自动生成消息id。

回响信息就是生成的消息id。

 

如果使用*生成id的话,redis可以保证id是自增的,手工指定id需要自己保证id自增。


- 求消息个数 :XLEN <stream-name>

表示该流有三个消息。


- 查看所有消息:XRANGE <stream-name> - +


- 根据消息id删除消息:XDEL  <stream-name> message_id


- 删除所有消息:xtrim  <stream-name>  maxlen 0


- 读消息 :XREAD COUNT <count> BLOCK <milliseconds> STREAMS <stream-name> <id>

参数说明:

  • COUNT:指定读取的消息数量。
  • BLOCK:阻塞读取,指定等待新消息的时间,单位是毫秒。设置为 0 表示无限等待。
  • STREAMS:指定从哪些流读取消息。<id> 表示从哪个位置开始读取消息,通常 0 表示读取所有消息。

示例: 

表示从daimajiang 流里读取两条信息,从下标0开始读,最多等待1s。

$:表示从流中的最新消息开始读取,并且只读取新插入的消息。

此时可以在另一个终端执行xadd操作,这边就能收到最新消息。


B:消费者组 

 消费者组是一种管理 Redis Streams(流)中的消息处理的机制。

在 Redis 中,一个消费者组不能直接关联到多个流。每个消费者组(consumer group)是与一个特定的消息流(stream)绑定的,消费者组会从这个绑定的流中读取消息并处理。

可以理解为我们通过消费者组,来对流中的信息进行控制。


 - 创建一个新的消费者组 :XGROUP CREATE <stream> <group> <id> [MKSTREAM]

  • <stream>:Stream 的名称。
  • <group>:消费者组名称。
  • <id>:从哪个位置开始读取消息(通常为$,表示从当前的最新消息开始;或者为0,表示从Stream的最开始读取消息)。
  • MKSTREAM:如果 Stream 不存在,则自动创建一个空的消息流。

示例:

创建名为group1的消费者组,并指示它从 daimajiang 流中的第一个消息(ID为0)开始读取。

 XGROUP CREATE myStream myGroup $ MKSTREAM

该命令用于创建一个名为 myGroup 的消费者组,关联到 myStream 流中,并从最新的消息(ID为$)开始消费。如果流 myStream 不存在,它会通过 MKSTREAM 选项自动创建一个空的流。


- 查询特定流上的消费者组信息:XINFO GROUPS mystream

示例:

1) "name"                # 消费者组的名称
2) "consumers"           # 该组中的消费者数量
3) "pending"             # 消费者组中尚未确认的消息数量
4) "last-delivered-id"   # 消费者组最后一个交付的消息 ID


 - 创建消费者:XGROUP CREATECONSUMER key group consumer [MKSTREAM]

示例:

将新的消费者 consumer1 、consumer2、consumer3加入到名为group1 的消费组中,消费组的标识流是 geekhour

ps:createconsumer关键字需要6.2以上才能使用,消费者不需要预先创建。


-  消费者从消费者组中读取消息:XREADGROUP  GROUP <group> <consumer> COUNT <count> BLOCK <milliseconds> STREAMS <stream> <id>

  • <group>:消费者组的名称。
  • <consumer>:消费者的名称。
  • <count>:读取的消息条数。
  • <stream>:消息流的名称。
  • <id>:消息的 ID,通常使用 > 表示读取新消息。

 示例:

GROUP group1:组名称

consumer1:消费总金额名称

COUNT 2:表示一次读取两条消息

BLOACK 3000 :如果没有消息阻塞3000ms

STREAMS geekhour:流名称

>:表示从这个消息中读取最新消息


- 消费者确认某条信息:XACK <stream> <group> <id> [id ...]

消费者确认已处理某条消息,Redis 会将该消息从待处理列表(PEL)中移除。

  • <stream>:Stream 的名称。
  • <group>:消费者组的名称。
  • <id>:消息的 ID。

示例:

XACK myStream myGroup 1526569495631-0


- 查看消费者组中待处理的消息(还未被 XACK 确认)XPENDING  <stream> <group> [<start> <end> <count> [<consumer>]]

  • <stream>:Stream 的名称。
  • <group>:消费者组的名称。
  • <start><end>:消息 ID 范围。
  • <count>:返回的消息数量。
  • <consumer>:消费者名称(可选)。

示例:

XACK myStream myGroup 1526569495631-0


 3.地理空间Geospatial

Redis3.2版本中的新特性,它提供了存储地理位置信息的数据结构,同时支持对地理位置进行各种计算操作。比如计算两个地理位置的距离,获取某个地理位置的经纬度等。下面使用一个经纬的度的例子展示它的使用方法。


相关命令都以GEO开头

- GEOADD key longitude latitude member [longitude latitude member ...] :将地理空间数据(经纬度坐标)添加到 Redis 集合中

返回1表示成功添加了一个地理位置信息。

将北京的经纬度信息添加到city这个集合里。

也可以一次性添加多个地理位置信息:

添加上海、深圳、广州、杭州的地理位置信息。

返回4表示成功添加4个地理位置信息。

 - 查看经纬度:GEOPOS key member

这里可以看到查看的经纬度和存的值不一样,原因是:由于底层是二进制存储,小数存储会出现误差。

Redis 使用 geohash 算法将经纬度转换为一个 52 位的二进制字符串来存储。这种编码方式以空间分割的方法将地球表面划分成格子,但它有一定的精度限制。由于每个格子在不断划分的过程中,最终存储的经纬度数据会有一定的精度误差。

- 获取集合中两个点之间的距离::GEODIST key member1 member2

- GEOREASH 以一个成员的位置或指定的经纬度为中心,按照圆形或者矩形的范围内搜索其他成员。

搜索距离上海300km以内的城市,返回上海。杭州两个城市。 

 这里是简单了解这个数据结构,就不展示其他命令了。


4.HyperLogLog

HyperLogLog是用于做基数统计的算法,并不是redis特有算法。

什么是基数:集合中唯一且不重复的元素个数。

集合里的唯一且不重复的数字:1 、2、3、4、5。则基数为5

虽然集合里有10个元素,但基数还是5。

HyperLogLog就是用来计算这个基数的。 它的原理使用随机算法来计算,通过牺牲一定的精确度,来换取更小的内存消耗。优点是占用内存小,缺点就是会有一定的误差。所以它适用于一些精确度要求不高,而且数据量非常大的统计操作。例如:统计某个网站的uv、统计某个词的搜索次数。


命令都以PF开头。

- PFADD key member [merber ...] 将指定的元素添加到 HyperLogLog 中,自动去重

-PFCOUNT key:查看基数/返回与指定 HyperLogLog 相关联的唯一元素的近似计数。


- PFMERGE destkey sourcekey [sourcekey ...] :将多个 HyperLogLog 合并为一个


5.位图BitMap

位图是字符串类型的扩展, 可以使用String类型模拟bit数组。

数组下标就是偏移量,数组值只支持0或1。

应用场景:记录用户签到情况、点赞情况、收藏情况、在线状态等。


所有命令都以Bit开头。

- SETBIT key offset value :设置指定位置上的位 (bit) 为 0 或 1

如图设置0下标的值为1,设置1下标的值为0。


- GETBIT key offset :获取指定位置上的值

如图,获取1位置上的值为0。


现在已经学会了如何设置和获取位图的值,但是像这样一位一位设置显然是非常麻烦的。

 BITMAP其实就是String类型的拓展,本质上就是一个字符串。我们可以用字符串的SET命令来直接设置它的值。

- SET key value

value: 要存储的字符串值(可以是二进制、十进制、十六进制等形式)。

示例:

key这个值存储的实际是"10"这个字符串

字符 '1' 在 ASCII 表中的编码是 49,其二进制形式是 00110001

字符 '0' 在 ASCII 表中的编码是 48,其二进制形式是 00110000

也就是说其位图表示是:001100010110000

尝试getbit时:

可以看到确实是这样。


ps:在redis中,字符串的本质是字节组成,一个字节有8个bit。

Redis 默认使用 UTF-8 编码来处理字符串。UTF-8 是一种可变长度的字符编码,它能够表示世界上几乎所有的字符,包括 ASCII 字符。

UTF-8 对于常见的 ASCII 字符(例如英文字母、数字和一些符号)使用一个字节表示,而对于其他字符(如中文、表情符号等)可能使用多个字节表示。

因此通过set设置位图,设置的位数都是8的倍数(因为一个字节有8个bit)。

对于11110000,我们可以通过set快速存入,技巧是存入其16进制。

11110000用十进制表示是240,用十六进制表示是\xF0

(存入的效果图)


- BITCOUNT  key [start end]:计算字符串中的 比特位值为 1 的总数

start(可选):指定从字符串的某个字节开始计算。

end(可选):指定到字符串的某个字节结束计算。

扩展:为什么BITCOUNT 命令在统计某种状态(如签到、点赞等)时特别好用?

1. 高效的存储方式

位图(Bitmap)是一种非常节省空间的数据结构。由于每个用户的状态(如是否签到或点赞)可以用 1 个 bit(位)来表示,Redis 可以在内存中高效地存储大量的用户状态信息。

  • 比如,一个用户的签到状态可以用一个 1(表示已签到)或 0(表示未签到)来表示。如果有 1 万个用户,只需要 1 万个位(即 1250 字节,约 1.2 KB)即可存储所有用户的状态。

  • 相比用其他数据结构(如字符串、哈希等)存储每个用户的状态,位图更节省内存。

2. 快速统计

BITCOUNT可以快速统计整个位图中比特值为 1 的数量,这使得它在统计用户行为时非常高效。

  • 例如,如果你有 1 万个用户的签到数据存储在位图中,你可以通过BITCOUNT 在瞬间统计出已签到的用户总数,而不需要遍历每个用户的状态。

    BITCOUNT dianzan # 统计所有用户中已点赞(bit 为 1)的数量

    这个操作时间复杂度为 O(N),N 是字节数,而不是位的数量,因此即使数据量非常大,BITCOUNT依然能高效执行。

3. 可扩展性强

位图在用户量扩展时依然保持高效。例如:

  • 假设你要跟踪一百万用户的点赞状态,每个用户的状态只需 1 bit,整个数据仅占用 125 KB(1,000,000 bits ÷ 8 ÷ 1024),而 BITCOUNT依然可以在极短的时间内统计出有多少人点赞。

4. 灵活的范围统计

BITCOUNT 允许你根据字节范围统计。例如,你可以指定只统计某段用户的数据,而不必一次性统计全部数据。这对于分批处理或特定用户组的统计非常有用。

5. 简化业务逻辑

通过 BITCOUNT,你可以直接在 Redis 中进行统计操作,而无需将数据取回到应用层再进行计算,减少了网络开销和应用层的复杂度。这使得 Redis 成为一个高效的分布式计数工具。

使用场景: 

  • 签到系统:每个用户一天的签到状态可以用 1 个 bit 表示,BITCOUNT 能统计出当天签到的用户总数。
  • 点赞系统:每个用户的点赞行为也可以用 1 个 bit 表示,通过 BITCOUNT 可以统计总的点赞人数。
  • 任务完成情况:可以用位图来跟踪每个用户任务的完成状态,用 BITCOUNT 统计完成任务的用户数量

- BITPOS key bit [start] [end] :查找第一个设置为指定值的位(bit)的位置

主要优点:可以在大量数据中快速定位。

start(可选):从字符串的哪个字节开始查找。

end(可选):在字符串的哪个字节结束查找。

如图,查找第一个出现0和1的位置。(整个范围没有时候返回-1)

常见应用场景:

  1. 查找用户签到的第一个日期: 比如,一个用户的签到状态存储在位图中,1 表示签到。通过 BITPOS,可以快速找到用户第一次签到的日期。

  2. 查找任务完成情况: 位图可以用来表示任务完成状态,BITPOS能帮助快速查找第一个完成任务(1)或第一个未完成任务(0)的位置。

  3. 找到可用资源: 在某些分布式系统中,位图可以表示资源的使用状态,BITPOS 可用于查找第一个可用资源的位置(比如第一个 0 表示未占用的资源)。


 6.位域BitField 

位域能将很多小的整数存储到一个较大的位图中,这样可以更高效的使用内存。

常用操作: 

 BITFIELD key [GET|SET|INCRBY] type offset [value] [overflow]

  • key: 字符串类型的键名。
  • GET: 获取位域的值。
  • SET: 设置位域的值。
  • INCRBY: 对位域的值进行增减操作。
  • type: 位域的类型,可以是 u<N>(无符号整数)或 i<N>(有符号整数),<N> 是位数,比如 u8 表示无符号 8 位整数。
  • offset: 位域的偏移量,即从字符串的哪个位开始。
  • value: 用于 SETINCRBY 操作时要设置或增加的值。
  • overflow(选填): 溢出处理模式(仅对 INCRBY 有效),可以是 WRAP(回绕)、SAT(饱和)或 FAIL(失败)。

实操:

假设在玩一个游戏,你作为1号玩家进入了游戏,你刚刚出生在新手村:

等级是1级,兜里有金币100个,经验为0。

设置player:1的等级。

查看该key:

那如何获取这个等级呢?把set换成get

现在我们来设置金币数:

注意:SET u32 #1 100表示:player:1 键的第二个 32 位无符号整数(偏移 #1,即从第 32 位到第 63 位)设置为 100

tips:'d'的ASCII码值就是100,因此100转换为字符型存储就是d。

来用get获取一下金钱:


假设你现在干掉了一个小boss,走出了新手村,等级变成了二级,金币也多了100、

依然是使用bitfield关键字~只是换成incrby

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

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

相关文章

MySQL | 知识 | NULL值是怎么存储的

NULL值有哪些语法影响 我们使用mysql时&#xff0c;使用 xx !aa 这种条件为什么无法筛选出值为NULL的字段呢。 是的&#xff0c;MySQL 中null 值确实无法通过这种条件筛选出来&#xff0c;因为 null 值的定义就跟普通值不一样。 拿官网的例子来说&#xff1a; mysql> INSE…

在Java中基于GeoTools的Shapefile读取乱码的问题解决办法

目录 前言 1、Shapefile属性字段编码的情况&#xff1a; 一、Shp文件常见的字符集编码 1、System编码 2、ISO-8859-1编码 3、UTF-8编码 二、GeoTools解析实战 1、未进行字符处理 2、乱码问题的解决 3、转码支持 4、属性字段编码结果 三、总结 前言 文件编码&#x…

RabbitMQ:交换机详解(Fanout交换机、Direct交换机、Topic交换机)

♥️作者&#xff1a;小宋1021 &#x1f935;‍♂️个人主页&#xff1a;小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识&#xff0c;和大家一起努力呀&#xff01;&#xff01;&#xff01; &#x1f388;&#x1f388;加油&#xff01; 加油&#xff01…

【笔记】第二节 轧制、热处理和焊接工艺

2.2 钢轨的轧制工艺 坯料进厂按标准验收, 然后装加热炉加热, 加热好的钢坯经高压水除鳞后进行轧制。轧出的钢轨经锯切、打印到中央冷床冷却, 然后装缓冷坑进行缓冷。缓冷后的钢轨进行矫直、轨端加工和端头淬火。钢轨入库前逐根进行探伤和外观检查。 钢轨的轧制 #mermaid-svg-…

【Delphi】使用 TPrototypeBindSource 和 LiveBindings 设计器示例

本教程展示了如何使用 LiveBindings Designer 和 TPrototypeBindSource 可视化地创建控件之间的 LiveBindings&#xff0c;以便快速开发只需很少或无需源代码的应用程序。 注意&#xff1a; TPrototypeBindSource 可用于为项目中的 LiveBindings 生成样本数据。在应用程序原型化…

公私域互通下的新商机探索:链动2+1模式、AI智能名片与S2B2C商城小程序的融合应用

摘要&#xff1a;在数字化时代&#xff0c;公私域流量的有效融合已成为企业获取持续增长动力的关键。本文旨在探讨如何通过链动21模式、AI智能名片以及S2B2C商城小程序源码的综合运用&#xff0c;实现公私域流量的高效互通&#xff0c;进而为门店创造巨大商机。通过分析这些工具…

前后端跨域问题及其在ThinkPHP中的解决方案

在现代Web开发中&#xff0c;前后端分离的架构越来越普遍&#xff0c;但这也带来了跨域问题。跨域指的是在一个域下的网页试图请求另一个域的资源&#xff0c;浏览器出于安全考虑会限制这种行为。本文将探讨如何在ThinkPHP中解决跨域问题。 #### 1. 什么是跨域&#xff1f; 跨…

C++初阶学习——模版进阶

1. 非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当成…

不同编程语言的互相调用

C语言与Python 步骤&#xff1a; 编写C代码 (hello_c.c): #include <stdio.h>void printHello(const char *name) {printf("Hello, %s!\n", name); }编译C代码为共享库: gcc -shared -o hello_c.so hello_c.c编写Python代码 (hello_c_py.py): import ctypes# …

【数据库】常用数据库简介

目录 &#x1f354; 常用的关系型数据库 &#x1f354; Mysql简介 &#x1f354; SQL 简介 SQL语句的分类 SQL 写法 SQL 常用的数据类型 &#x1f354; DDL语句 对数据库的操作 对数据表的操作 &#x1f354; DML语句 插入数据 insert into 修改数据 update 删除数…

<<编码>> 第 16 章 存储器组织(3)--3-8 译码器 示例电路

3-8 译码器 info::操作说明 “写入” 开关先断开(Q 为低电平, 表示不写入) S2-S1-S0 设置一个二进制数, 选中 Q0~Q7 其中一个作为 Q 的输出 “数据输入” 端置入要保存的数(0或1) 闭合 “写入” 开关, 对应的一位锁存器中的 W 为高电平, 表示可以写入, “数据输入” 的值最终…

Java安全(加密+HTTPS+WEB安全)

Java加密 单向加密 接收一段明文&#xff0c;然后以一种不可逆的方式将它转换成一段密文 ①、MD5&#xff0c;将无论多长的数据最后编码128位数据&#xff0c;常用文件校验、密码加密、散列数据 byte[] data ...;//明文数据 MessageDigest md5 MessageDigest.getInstance…

大数据新视界 --大数据大厂之Kubernetes与大数据:容器化部署的最佳实践

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【软件资料集】系统培训方案(Word项目参考2024)

1. 培训概述 2. 培训目的 3. 培训对象及要求 3.1. 培训对象 3.2. 培训人员基本要求 4. 培训方式 5. 培训内容 6. 培训讲师 7. 培训教材 8. 培训质量保证 8.1. 用户培训确认报告 8.2. 培训疑问解答 获取方式&#xff1a;本文末个人名片直接获取。 软件资料清单列表部分文档清单&…

opencv实战项目二十四:棋盘格相机内参标定

文章目录 前言一、简介&#xff1a;二、使用步骤2.1制作标定板2.2 拍摄不同角度的标定板2.3计算棋盘格角点并优化2.4计算相机参数 三、整体代码实现&#xff1a; 前言 在数字图像处理和计算机视觉领域&#xff0c;相机标定是一个至关重要的步骤。它为相机提供了一个准确的数学…

Tomcat 乱码问题彻底解决

1. 终端乱码问题 找到 tomcat 安装目录下的 conf ---> logging.properties .修改ConsoleHandler.endcoding GBK &#xff08;如果在idea中设置了UTF-8字符集&#xff0c;这里就不需要修改&#xff09; 2. CMD命令窗口设置编码 参考&#xff1a;WIN10的cmd查看编码方式&am…

Nature|PathChat:病理学多模态生成性AI助手的创新与应用|顶刊精析·24-09-21

小罗碎碎念 今日顶刊&#xff1a;Nature 这篇文章今年6月就发表了&#xff0c;当时我分析的时候&#xff0c;还是预印本&#xff0c;没有排版。今天第一篇推文介绍的是Faisal Mahmood &#xff0c;所以又把这篇文章拉出来详细分析一下。 作者角色作者姓名单位名称单位英文名称第…

PMP--二模--解题--61-70

文章目录 4.整合管理61、 [单选] 为解决具有挑战性的客户请求&#xff0c;启动了一个项目。该项目必须在短时间内交付。项目经理应该怎么做来尽可能提高项目的成功率&#xff1f; 14.敏捷--MVP--最小可行产品--使用最小可行产品获得客户尽早地反馈。完整性和交付是主观的。团队…

构建高可用和高防御力的云服务架构第二部分:SLB负载均衡(2/5)

在现代云服务中&#xff0c;负载均衡&#xff08;Load Balancing&#xff09;是一种关键技术&#xff0c;用于优化资源利用、最小化响应时间、提高系统的可伸缩性和可靠性。负载均衡器位于客户端和服务器之间&#xff0c;根据预设的策略将请求分发到多个服务器上&#xff0c;以…

华为HarmonyOS地图服务 4 - 通过“地图相机“控制地图的可见区域

场景介绍 华为地图的移动是通过模拟相机移动的方式实现的,您可以通过改变相机位置,来控制地图的可见区域,效果如图所示。 本章节将向您介绍相机的各个属性与含义,并移动相机。 相机移动前 接口…