跳跃表(skiplist)是一种高级数据结构,其插入、检索、删除的时间复杂度均为 O(logN)。因为其实实现简单,很多项目将其作为红黑树的一个替代品。

今天我们来看一下 redis 中 skiplist 的实现,涉及到的文件在 src/t_zset.c 和 src/redis.h。

redis 中的跳表基本上与常见跳表有以下几点区别:

  1. 节点的 key 其实相当于 score + obj,所以在比较节点的时候,会在 score 相同的情况下,继续比较 obj
  2. 每个节点都有一个后退指针,所以 level 0 是一个双向链表

结构体定义

// 跳表节点
typedef struct zskiplistNode {// 成员对象robj *obj;// 分值double score;// 后退指针, 指向 level 0 的前驱节点struct zskiplistNode *backward;// 层struct zskiplistLevel {// 前进指针struct zskiplistNode *forward;// 跨度, 代表节点在 level i 层通过 forward 能跳过的节点数目unsigned int span;} level[];} zskiplistNode;typedef struct zskiplist {// 表头节点和表尾节点struct zskiplistNode *header, *tail;// 表中节点的数量unsigned long length;// 表中层数最大的节点的层数int level;} zskiplist;

因为 skiplist node 的层数是动态的,所以我们又见到了我们的老朋友柔性数组。

构造和析构

// 构造一个 level 层的 skiplistNode
zskiplistNode *zslCreateNode(int level, double score, robj *obj) {// 分配空间zskiplistNode *zn = zmalloc(sizeof(*zn)+level*sizeof(struct zskiplistLevel));// 设置属性zn->score = score;zn->obj = obj;return zn;
}// 构造跳表
zskiplist *zslCreate(void) {int j;zskiplist *zsl;// 分配空间zsl = zmalloc(sizeof(*zsl));// 设置高度和起始层数zsl->level = 1;zsl->length = 0;// 初始化表头节点zsl->header = zslCreateNode(ZSKIPLIST_MAXLEVEL,0,NULL);for (j = 0; j < ZSKIPLIST_MAXLEVEL; j++) {zsl->header->level[j].forward = NULL;zsl->header->level[j].span = 0;}zsl->header->backward = NULL;// 设置表尾, zsl-tail == NULL 则代表跳表为空zsl->tail = NULL;return zsl;
}// 释放 node
void zslFreeNode(zskiplistNode *node) {// 注意 obj 是引用计数decrRefCount(node->obj);zfree(node);
}// 释放跳表
void zslFree(zskiplist *zsl) {zskiplistNode *node = zsl->header->level[0].forward, *next;// 释放表头zfree(zsl->header);// 释放表中所有节点// T = O(N)while(node) {next = node->level[0].forward;zslFreeNode(node);node = next;}// 释放跳跃表结构zfree(zsl);
}

插入

// 辅助函数,返回一个随机值作为节点的层数
int zslRandomLevel(void) {int level = 1;while ((random()&0xFFFF) < (ZSKIPLIST_P * 0xFFFF))level += 1;return (level<ZSKIPLIST_MAXLEVEL) ? level : ZSKIPLIST_MAXLEVEL;
}/*插入节点,不允许 score 和 obj 都相同的节点出现,但是代码并未做强制检查为了防止有同学不清楚跳表的工作原理,这里简单讲一下。传统的链表, 即使是有序的,查找一个元素的时间复杂度是 O(N)。这是因为链表节点的内存布局不是连续的,我们要想从第一个节点到第 N 节点,一次只能跳过一个节点(1-2-3-...N)。跳表通过在节点内加入一个 level动态数组,链表可以一次跳过不止一个节点, 如下所示level2  |Node1|---------------------->|NodeX|
level1  |Node1|-------------> |Node3|----->|NodeN-1| 
level0  |Node1| -> |Node2| -> |Node3|->... |NodeN-1| -> |NodeN|*/
zskiplistNode *zslInsert(zskiplist *zsl, double score, robj *obj) {zskiplistNode *update[ZSKIPLIST_MAXLEVEL], *x;unsigned int rank[ZSKIPLIST_MAXLEVEL];int i, level;redisAssert(!isnan(score));// 查找新节点在每一层的插入位置,循环结束后 update[i] 会是 level i// 所有节点中,最后一个小于新节点的节点x = zsl->header;for (i = zsl->level-1; i >= 0; i--) {// rank[i] 是累加过程,rank[i+1] 是到达该节点需要跨越的节点数// rank[i] = i == (zsl->level-1) ? 0 : rank[i+1];// 沿着前进指针遍历跳跃表, 直到// 1. x 是该层最后一个节点 or// 2. x 在该层的后继节点的分数大于 score or// 3. x 在该层的后继节点的分数等于 score,但是后继节点的 obj 大于等于objwhile (x->level[i].forward &&(x->level[i].forward->score < score ||// 比对分值(x->level[i].forward->score == score &&// 比对成员compareStringObjects(x->level[i].forward->obj,obj) < 0))) {// 记录沿途跨越了多少个节点rank[i] += x->level[i].span;// 移动至下一指针x = x->level[i].forward;}// 新节点应该插入到 x 后面update[i] = x;}/* we assume the key is not already inside, since we allow duplicated* scores, and the re-insertion of score and redis object should never* happen since the caller of zslInsert() should test in the hash table* if the element is already inside or not. */// 获取一个随机值作为新节点的层数level = zslRandomLevel();// 如果新节点的层数比表中其他节点的层数都要大, 那么需要更新 skiplist// 的高度,并且将高出来的 level 的前驱节点设置为 skiplist->headif (level > zsl->level) {// 初始化未使用层for (i = zsl->level; i < level; i++) {rank[i] = 0;update[i] = zsl->header;// 指向 nil 所以跨越所有元素update[i]->level[i].span = zsl->length;}// 更新表中节点最大层数zsl->level = level;}// 创建新节点x = zslCreateNode(level,score,obj);// 将节点在每层,分别插入到其前驱节点之后, update[i] 即为节点在// level i 的前驱节点for (i = 0; i < level; i++) {// 设置新节点的 forward 指针x->level[i].forward = update[i]->level[i].forward;// 将沿途记录的各个节点的 forward 指针指向新节点update[i]->level[i].forward = x;// update[i]->level[i].span 本来是直接调到 level i 下一个节点的跨越节点数// 因为现在在中间插入了一个节点,所以有:// x->level[i].span + (rank[0]-rank[i]) + 1== update[i]->level[i].spanx->level[i].span = update[i]->level[i].span - (rank[0] - rank[i]);update[i]->level[i].span = (rank[0] - rank[i]) + 1;}// 当 level 小于 zsh->level 时,需要更新 > level 的前驱节点的 spanfor (i = level; i < zsl->level; i++) {update[i]->level[i].span++;}// 设置新节点的后退指针x->backward = (update[0] == zsl->header) ? NULL : update[0];if (x->level[0].forward)x->level[0].forward->backward = x;elsezsl->tail = x;// 跳跃表的节点计数增一zsl->length++;return x;
}

删除节点

void zslDeleteNode(zskiplist *zsl, zskiplistNode *x, zskiplistNode **update) {int i;// 更新所有和被删除节点 x 有关的节点的指针,解除它们之间的关系for (i = 0; i < zsl->level; i++) {if (update[i]->level[i].forward == x) {// 在 level i update[i] 是要删除节点的前驱节点update[i]->level[i].span += x->level[i].span - 1;update[i]->level[i].forward = x->level[i].forward;} else {// x 不在 level i 的链表中update[i]->level[i].span -= 1;}}// 更新被删除节点 x 的前进和后退指针if (x->level[0].forward) {x->level[0].forward->backward = x->backward;} else {// 如果 x 是尾节点,需要更新跳表中的 tailzsl->tail = x->backward;}// 如果 x 是最高层链表中唯一节点,skiplist 的高度降低1while(zsl->level > 1 && zsl->header->level[zsl->level-1].forward == NULL)zsl->level--;// 跳跃表节点计数器减一zsl->length--;
}int zslDelete(zskiplist *zsl, double score, robj *obj) {zskiplistNode *update[ZSKIPLIST_MAXLEVEL], *x;int i;// 遍历跳跃表,查找目标节点,并记录所有沿途节点x = zsl->header;for (i = zsl->level-1; i >= 0; i--) {while (x->level[i].forward &&(x->level[i].forward->score < score ||(x->level[i].forward->score == score &&compareStringObjects(x->level[i].forward->obj,obj) < 0)))// 沿着前进指针移动x = x->level[i].forward;// 记录沿途节点update[i] = x;}// 检查找到的元素 x ,只有在它的分值和对象都相同时,才将它删除。x = x->level[0].forward;if (x && score == x->score && equalStringObjects(x->obj,obj)) {zslDeleteNode(zsl, x, update);zslFreeNode(x);return 1;} else {return 0; /* not found */}
}

查找

要说 skiplist 比红黑树优越的一点,就是它查找第 N 个元素的时间复杂度是 O(logN),这一点对于 redis 提供的 zset 命令很重要。
因为 skiplist 有一个 head 元素,所以其元素 index 是从 1 开始的(0 对应的是 head)。它的 index 又叫做 rank,
这个我们在前面的插入例程已经有所接触了。

// 获取元素 rank,如果元素不存在,返回 0 
unsigned long zslGetRank(zskiplist *zsl, double score, robj *o) {zskiplistNode *x;unsigned long rank = 0;int i;// 遍历整个跳跃表x = zsl->header;for (i = zsl->level-1; i >= 0; i--) {// 遍历节点并对比元素while (x->level[i].forward &&(x->level[i].forward->score < score ||(x->level[i].forward->score == score &&compareStringObjects(x->level[i].forward->obj,o) <= 0))) {// 累积跨越的节点数量rank += x->level[i].span;// 沿着前进指针遍历跳跃表x = x->level[i].forward;}// 必须确保不仅分值相等,而且成员对象也要相等if (x->obj && equalStringObjects(x->obj,o)) {return rank;}}// 没找到return 0;
}// 根据 rank 查找元素,时间复杂度 O(logN)
zskiplistNode* zslGetElementByRank(zskiplist *zsl, unsigned long rank) {zskiplistNode *x;unsigned long traversed = 0;int i;x = zsl->header;for (i = zsl->level-1; i >= 0; i--) {// 遍历跳跃表并累积越过的节点数量while (x->level[i].forward && (traversed + x->level[i].span) <= rank){traversed += x->level[i].span;x = x->level[i].forward;}// 已经跨越了 rank 个节点,返回节点if (traversed == rank) {return x;}}// 没找到目标节点, 只存在 rank 太大的情况return NULL;
}

总结

  1. redis 使用 skiplist + dict 来实现 zset
  2. redis 选用 skiplist 的一个原因是 skiplist 可以在 O(logN) 内查找到指定 rank 的元素
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. AWS NLB 安全组配置问题

    AWS NLB 安全组配置问题 NLB, Network Load Balancer ,网络负载均衡器。 由于 NLB 没有安全组,所以需要将 NLB 所在 的 VPC 或者 NLB 的私网 IP 配置到 目标群组 的安全组上。 我尝试了如下几种配置配置 VPC 的 CIDR 到 目标群组的 安全组 ,无法通过 NLB 访问 目标群组 配置…...

    2024/5/6 20:15:42
  2. 韩信点兵

    题目 相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入包含多组数据,每组数据包含3个非负整数a,b,c,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最…...

    2024/5/6 20:15:37
  3. 今天和大家聊聊程序员职业发展的事~Java

    hello,各位同学们大家好,我是姚半仙。《Java架构师成长直通车》课程架构师讲师团成员之一。今天依然想和同学们谈一谈技术以外的东西,那谈些什么了? 职业发展 我想大部分做技术的同学,都是两耳不闻窗外事,一心只读圣贤书。大家多关注技术方面的发展,却忽视了在职业路线上…...

    2024/5/6 20:15:34
  4. arduino学习与实践

    如何使用电机驱动器 官网...

    2024/5/6 20:15:29
  5. 15.收货地址接口

    12.6收货地址接口 12.6.1wx.chooseAddress(Object object)基础库 1.1.0 开始支持,低版本需做兼容处理。调用前需要 用户授权 scope.address获取用户收货地址。调起用户编辑收货地址原生界面,并在编辑完成后返回用户选择的地址。 参数 Object object属性 类型 默认值 必填 说明…...

    2024/5/6 20:15:25
  6. modelsim添加vivado仿真库的方法

    转载 由于vivado自带仿真工具运行速度较慢,有时候需要在modelsim环境下仿真xilinx的ip,因此需要将xilinx的ip重新编译并添加至modelsim。首先需要重新编译xilinx的ip(以vivado2016.4为例,其余版本大同小异):tools -> Comple Simulation Libraries -> 设置编译…...

    2024/5/6 20:15:21
  7. SofaBoot使用Nacos进行服务注册发现

    前提 最近创业公司的项目组基于业务需要,开发一套新的微服务,考虑到选用的组件必须是主流、社区活跃、生态完善以及方便迁移到云上等因素,引入了SOFAStack全家桶。微服务开发里面,一个很重要的功能就是服务发现与注册,笔者花了点时间做了一个SOFABoot、SOFARpc结合Nacos实…...

    2024/5/6 20:15:17
  8. 实现类似ios闹钟设置界面选择时间效果

    滑动选择时间效果 using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems;public class Test1 : MonoBehaviour,IBeginDragHandler,IDragHandler {/// <summary>/// 根据手指滑动距离得出一个比率来计算方法执行次数/// </summary>public Text…...

    2024/5/6 20:15:13
  9. 创 JAVAEE细细看 进阶 17 - 新特性:Lambda、接口的组成、方法引用

    新特性:Lambda、接口的组成、方法引用 一 Lambda 案例 启动一个线程,在控制台输出一句话:多线程程序启动了 // 方法一 需要建一个类实现Runnable接口 Lambda lambda = new Lambda();// 线程 Thread thread = new Thread(lambda); thread.start();// 方法 二 改进 // 匿名内部…...

    2024/5/6 20:15:09
  10. PHP常见的数据类型

    1:常见的类型 PHP中的数据类型相较于js多了很多种,但其中相当一部分对于我们来说鲜少用到。 (1)布尔类型:Boolean (2)整数类型:Integer (3)浮点类型:Float (4)字符类型:String (5)数组类型:Array (6)对象类型:Object (7)空值类型:NULL 有两个方法来判别变…...

    2024/5/6 20:15:05
  11. 求C语言获取应用程序路径的代码

    求C语言获取应用程序路径的代码 谢谢...

    2024/5/6 20:15:01
  12. 字符编码

    ASCIIASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及特殊控制字符编号从0开始的32种状态分别规定了特殊的用途,这些020以…...

    2024/5/6 20:14:57
  13. 01.02 Day 18 - 弹力设计篇之“限流设计”

    大家好,我是 Snow Hide,作为《左耳听风》这个专栏的学员之一,这是我打卡的第 18 天,也是我第 18 次进行打卡这种操作。 今天我温习了该专栏里一篇叫《弹力设计篇之“限流设计”》的文章。 关键词总结:限流的策略(拒绝服务、服务降级、特权请求、延迟处理、弹性伸缩)、限…...

    2024/5/6 8:38:13
  14. K8s第八篇Kubernetes-Dashboard

    Kubernetes-DashboardKubernetes Dashboard就是k8s集群的WEBUI,集合了所有命令行可以操作的所有命令。 Kubernetes Dashboard功能:部署容器化的应用。 监控应用的状态。 执行故障排查任务。 管理Kubernetes各种资源。 监控集群节点的硬件资源状态。Github:https://github.co…...

    2024/5/6 8:38:09
  15. EV Growth完成2.5亿美元基金募集

    这家风投公司达到2.5亿美元硬上限在完成1.5亿美元的最初目标之后,该基金达到硬上限连同活跃资金规模,计划对东南亚初创企业投入3.25亿美元,包括种子期阶段和成长期阶段新加坡--(美国商业资讯)--总部位于新加坡的风险投资公司EV Growth首档基金募集资金达到2.5亿美元硬上限,…...

    2024/5/6 20:14:53
  16. 在计算边缘寻求平衡

    2019年刚过去,迈入了新时代,站在十年的风口浪尖上,我们可以看到,未来十年也将充满颠覆性变化。我们已经开始向社会迁移,以利用物联网,云(以及任何雾化技术)以及最新一代的硬件到功能矩阵中的“智能”生活方式使所有人受益。变革的步伐只会在速度和决心上增长。 迁移的破…...

    2024/5/6 20:14:49
  17. crm4-创建自己的admin时发生(admin.E108) The value of 'list_display[5]' refers to 'status',

    我在admin.py中定义了一个CustomerAdmin类class CustomerAdmin(admin.ModelAdmin):list_display = (id, qq, source, consultant, content, status, date)list_filter = (source, consultant, date)search_fields = (qq, name)raw_id_fields = (consult_course,)filter_horizon…...

    2024/5/6 20:14:45
  18. docker快速安装

    系统:centos 7.4 1.前提:内核版本需要不小于3.10,不然docker起不来 uname -r 查看当前内核版本 2.安装docker的依赖包 yum install -y yum-utils lvm2 device-mapper-persistent-data 3.配置docker源 yum-config-manager --add-repo https://download.d…...

    2024/5/6 20:14:42
  19. matplotlib设置窗体大小和标题

    示例代码 import matplotlib.pyplot as plt import numpy as npfig = plt.figure(figsize=(6, 3)) fig.canvas.set_window_title(I am title) x = np.linspace(0, 10, 100) plt.plot(x, np.sin(x)) plt.show()效果...

    2024/5/6 20:14:37
  20. 如何改变linux系统的只读文件的权限

    vim 编辑可以在命令模式输入 :wq! 保存退出 可以用chmod 命令修改文件权限。 chmod命令是非常重要的,用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。 用法…...

    2024/5/6 20:14:33

最新文章

  1. JS基础:变量的详解

    你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃&#xff0c;大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端基础路线”&#xff0c;可获取…...

    2024/5/7 2:03:42
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/6 9:38:23
  3. MySql数据库从0-1学习-第三天多表设计学习

    项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种: 一对多(多对一)多对多一对一 一对多 需求:根据需求,完成部门和员工表的设计 一对多,很多人会使用外键,…...

    2024/4/30 1:33:11
  4. Web大并发集群部署之集群介绍

    一、传统web访问模型 传统web访问模型完成一次请求的步骤 1&#xff09;用户发起请求 2&#xff09;服务器接受请求 3&#xff09;服务器处理请求&#xff08;压力最大&#xff09; 4&#xff09;服务器响应请求 传统模型缺点 单点故障&#xff1b; 单台服务器资源有限&…...

    2024/5/7 1:33:15
  5. BetterZip for Mac2024最新mac解压缩软件

    作为一名软件专家&#xff0c;对于市面上各类软件都有较为深入的了解&#xff0c;下面介绍的是一款适用于Mac系统的解压缩软件——BetterZip&#xff0c;将从其功能特点、使用方法、用户体验及适用人群等方面进行详细介绍。 BetterZip5-安装包绿色版下载如下&#xff1a; htt…...

    2024/5/5 8:31:36
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/4 23:54:56
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/4 23:54:56
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/6 9:21:00
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/4 23:55:16
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/4 23:55:06
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57