一、啥是分布式锁?

我们学习 Java 都知道锁的概念,例如基于 JVM 实现的同步锁 synchronized,以及 jdk 提供的一套代码级别的锁机制 lock,我们在并发编程中会经常用这两种锁去保证代码在多线程环境下运行的正确性。但是这些锁机制在分布式场景下是不适用的,原因是在分布式业务场景下,我们的代码都是跑在不同的JVM甚至是不同的机器上,synchronized 和 lock 只能在同一个 JVM 环境下起作用。所以这时候就需要用到分布式锁了。

例如,现在有个场景就是整点抢消费券(疫情的原因,支付宝最近在8点、12点整点开放抢消费券),消费券有一个固定的量,先到先得,抢完就没了,线上的服务都是部署多个的,大致架构如下:

为什么阿里面试必问Redis?阿里架构师的Redis分布式锁实战分享

所以这个时候我们就得用分布式锁来保证共享资源的访问的正确性。

二、为什么要用分布式锁嗯?

假设不使用分布式锁,我们看看 synchronized 能不能保证?其实是不能的,我们来演示一下。

下面我写了一个简单的 springboot 项目来模拟这个抢消费券的场景,代码很简单,大致意思是先从 Redis 获取剩余消费券数,然后判断大于0,则减一模拟被某个用户抢到一个,然后减一后再修改 Redis 的剩余消费券数量,打印扣减成功,剩余还有多少,否则扣减失败,就没抢到。整块代码被 synchronized 包裹,Redis 设置的库存数量为50。

//假设库存编号是00001
private String key = "stock:00001";
@Autowired
private StringRedisTemplate stringRedisTemplate;
/*** 扣减库存 synchronized同步锁
*/
@RequestMapping("/deductStock")
public String deductStock(){synchronized (this){//获取当前库存int stock = Integer.parseInt(stringRedisTemplate.opsForValue().get(key));if(stock>0){int afterStock = stock-1;stringRedisTemplate.opsForValue().set(key,afterStock+"");//修改库存System.out.println("扣减库存成功,剩余库存"+afterStock);}else {System.out.println("扣减库存失败");}}return "ok";
}

然后启动两个springboot项目,端口分别为8080,8081,然后在nginx里配置负载均衡

upstream redislock{server 127.0.0.1:8080;server 127.0.0.1:8081;
}
server {listen       80;server_name  127.0.0.1;location / {root   html;index  index.html index.htm;proxy_pass http://redislock;}
}

然后用jmeter压测工具进行测试

为什么阿里面试必问Redis?阿里架构师的Redis分布式锁实战分享

为什么阿里面试必问Redis?阿里架构师的Redis分布式锁实战分享

然后我们看一下控制台输出,可以看到我们运行的两个web实例,很多同样的消费券被不同的线程抢到,证明synchronized在这样的情况下是不起作用的,所以就需要使用分布式锁来保证资源的正确性。

为什么阿里面试必问Redis?阿里架构师的Redis分布式锁实战分享

三、如何用Redis实现分布式锁?

在实现分布式锁之前,我们先考虑如何实现,以及都要实现锁的哪些功能。

  1. 分布式特性(部署在多个机器上的实例都能够访问这把锁)
  2. 排他性(同一时间只能有一个线程持有锁)
  3. 超时自动释放的特性(持有锁的线程需要给定一定的持有锁的最大时间,防止线程死掉无法释放锁而造成死锁)
  4. 。。。

基于以上列出的分布式锁需要拥有的基本特性,我们思考一下使用Redis该如何实现?

  1. 第一个分布式的特性Redis已经支持,多个实例连同一个Redis即可
  2. 第二个排他性,也就是要实现一个独占锁,可以使用Redis的setnx命令实现
  3. 第三个超时自动释放特性,Redis可以针对某个key设置过期时间
  4. 执行完毕释放分布式锁

科普时间

Redis Setnx 命令

Redis Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值

语法

redis Setnx 命令基本语法如下:

redis 127.0.0.1:6379> SETNX KEY_NAME VALUE

可用版本:>= 1.0.0

返回值:设置成功,返回1, 设置失败,返回0

@RequestMapping("/stock_redis_lock")
public String stock_redis_lock(){//底层使用setnx命令Boolean aTrue = stringRedisTemplate.opsForValue().setIfAbsent(lock_key, "true");stringRedisTemplate.expire(lock_key,10, TimeUnit.SECONDS);//设置过期时间10秒if (!aTrue) {//设置失败则表示没有拿到分布式锁return "error";//这里可以给用户一个友好的提示}//获取当前库存int stock = Integer.parseInt(stringRedisTemplate.opsForValue().get(key));if(stock>0){int afterStock = stock-1;stringRedisTemplate.opsForValue().set(key,afterStock+"");System.out.println("扣减库存成功,剩余库存"+afterStock);}else {System.out.println("扣减库存失败");}stringRedisTemplate.delete(lock_key);//执行完毕释放分布式锁return "ok";
}

仍然设置库存数量为50,我们再用jmeter测试一下,把jmeter的测试地址改为
127.0.0.1/stock_redis_lock,同样的设置再来测一次。

为什么阿里面试必问Redis?阿里架构师的Redis分布式锁实战分享

测试了5次没有出现脏数据,把发送时间改为0,测了5次也没问题,然后又把线程数改为600,时间为0 ,循环4次,测了几次也是正常的。

上面实现分布式锁的代码已经是一个较为成熟的分布式锁的实现了,对大多数软件公司来说都已经满足需求了。但是上面代码还是有优化的空间,例如:

  1. 上面的代码我们是没有考虑异常情况的,实际情况下代码没有这么简单,可能还会有别的很多复杂的操作,都有可能会出现异常,所以我们释放锁的代码需要放在finally块里来保证即使是代码抛异常了释放锁的代码他依然会被执行。
  2. 还有,你有没有注意到,上面我们的分布式锁的代码的获取和设置过期时间的代码是两步操作第4行和第5行,即非原子操作,就有可能刚执行了第4行还没来得及执行第5行这台机器挂了,那么这个锁就没有设置超时时间,其他线程就一直无法获取,除非人工干预,所以这是一步优化的地方,Redis也提供了原子操作,那就是SET key value EX seconds NX

科普时间

SET key value [EX seconds] [PX milliseconds] [NX|XX] 将字符串值 value 关联到 key

可选参数

从 Redis 2.6.12 版本开始, SET 命令的行为可以通过一系列参数来修改:

EX second :设置键的过期时间为 second 秒。SET key value EX second 效果等同于 SETEX key second value

PX millisecond :设置键的过期时间为 millisecond 毫秒。SET key value PX millisecond 效果等同于 PSETEX key millisecond value

NX :只在键不存在时,才对键进行设置操作。SET key value NX 效果等同于 SETNX key value

XX :只在键已经存在时,才对键进行设置操作

SpringBoot的StringRedisTemplate也有对应的方法实现,如下代码:

//假设库存编号是00001
private String key = "stock:00001";
private String lock_key = "lock_key:00001";
@Autowired
private StringRedisTemplate stringRedisTemplate;
@RequestMapping("/stock_redis_lock")
public String stock_redis_lock() {try {//原子的设置key及超时时间Boolean aTrue = stringRedisTemplate.opsForValue().setIfAbsent(lock_key, "true", 30, TimeUnit.SECONDS);if (!aTrue) {return "error";}int stock = Integer.parseInt(stringRedisTemplate.opsForValue().get(key));if (stock > 0) {int afterStock = stock - 1;stringRedisTemplate.opsForValue().set(key, afterStock + "");System.out.println("扣减库存成功,剩余库存" + afterStock);} else {System.out.println("扣减库存失败");}} catch (NumberFormatException e) {e.printStackTrace();} finally {//释放锁stringRedisTemplate.delete(lock_key);}return "ok";
}

这样实现是否就完美了呢?嗯,对于并发量要求不高或者非大并发的场景的话这样实现已经可以了。但是对于抢购 ,秒杀这样的场景,当流量很大,这时候服务器网卡、磁盘IO、CPU负载都可能会达到极限,那么服务器对于一个请求的的响应时间势必变得比正常情况下慢很多,那么假设就刚才设置的锁的超时时间为10秒,如果某一个线程拿到锁之后因为某些原因没能在10秒内执行完毕锁就失效了,这时候其他线程就会抢占到分布式锁去执行业务逻辑,然后之前的线程执行完了,会去执行 finally 里的释放锁的代码就会把正在占有分布式锁的线程的锁给释放掉,实际上刚刚正在占有锁的线程还没执行完,那么其他线程就又有机会获得锁了...这样整个分布式锁就失效了,将会产生意想不到的后果。如下图模拟了这个场景。

为什么阿里面试必问Redis?阿里架构师的Redis分布式锁实战分享

所以这个问题总结一下,就是因为锁的过期时间设置的不合适或因为某些原因导致代码执行时间大于锁过期时间而导致并发问题以及锁被别的线程释放,以至于分布式锁混乱。在简单的说就是两个问题,

  1. 自己的锁被别人释放
  2. 锁超时无法续时间。

第一个问题很好解决,在设置分布式锁时,我们在当前线程中生产一个唯一串将value设置为这个唯一值,然后在finally块里判断当前锁的value和自己设置的一样时再去执行delete,如下:

String uuid = UUID.randomUUID().toString();
try {//原子的设置key及超时时间,锁唯一值Boolean aTrue = stringRedisTemplate.opsForValue().setIfAbsent(lock_key,uuid,30,TimeUnit.SECONDS);//...
} finally {//是自己设置的锁再执行deleteif(uuid.equals(stringRedisTemplate.opsForValue().get(lock_key))){stringRedisTemplate.delete(lock_key);//避免死锁}
}

问题一解决了(设想一下上述代码还有什么问题,一会儿讲),那锁的超时时间就很关键了,不能太大也不能太小,这就需要评估业务代码的执行时间,比如设置个10秒,20秒。即使是你的锁设置了合适的超时时间,也避免不了可能会发生上述分析的因为某些原因代码没在正常评估的时间内执行完毕,所以这时候的解决方案就是给锁续超时时间。大致思路就是,业务线程单独起一个分线程,定时去监听业务线程设置的分布式锁是否还存在,存在就说明业务线程还没执行完,那么就延长锁的超时时间,若锁已不存在则业务线程执行完毕,然后就结束自己。

“锁续命”的这套逻辑属实有点复杂啊,要考虑的问题太多了,稍不注意就会有bug。不要看上面实现分布式锁的代码没有几行,就认为实现起来很简单,如果说自己去实现的时候没有实际高并发的经验,肯定也会踩很多坑,例如,

  1. 锁的设置和过期时间的设置是非原子操作的,就可能会导致死锁。
  2. 还有上面遗留的一个,在finally块里判断锁是否是自己设置的,是的话再删除锁,这两步操作也不是原子的,假设刚判断完为true服务就挂了,那么删除锁的代码不会执行,就会造成死锁,即使是设置了过期时间,在没过期这段时间也会死锁。所以这里也是一个注意的点,要保证原子操作的话,Redis提供了执行Lua脚本的功能来保证操作的原子性,具体怎么使用不再展开。

所以,“锁续命”的这套逻辑实现起来还是有点复杂的,好在市面上已经有现成的开源框架帮我们实现了,那就是Redisson。

四、Redisson分布式锁的实现原理

为什么阿里面试必问Redis?阿里架构师的Redis分布式锁实战分享

实现原理:

  1. 首先Redisson会尝试进行加锁,加锁的原理也是使用类似Redis的setnx命令原子的加锁,加锁成功的话其内部会开启一个子线程
  2. 子线程主要负责监听,其实就是一个定时器,定时监听主线程是否还持有锁,持有则将锁的时间延时,否则结束线程
  3. 如果加锁失败则自旋不断尝试加锁
  4. 执行完代码主线程主动释放锁

那我们看一下使用后Redisson后的代码是什么样的。

①. 首先在pom.xml文件添加Redisson的maven坐标

<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.12.5</version>
</dependency>

②. 我们要拿到Redisson的这个对象,如下配置Bean

@SpringBootApplication
public class RedisLockApplication {public static void main(String[] args) {SpringApplication.run(RedisLockApplication.class, args);}@Beanpublic Redisson redisson(){Config config = new Config();config.useSingleServer().setAddress("redis://localhost:6379").setDatabase(0);return (Redisson) Redisson.create(config);}
}

③. 然后我们获取Redisson的实例,使用其API进行加锁释放锁操作

//假设库存编号是00001
private String key = "stock:00001";
private String lock_key = "lock_key:00001";
@Autowired
private StringRedisTemplate stringRedisTemplate;
/*** 使用Redisson实现分布式锁* @return*/
@RequestMapping("/stock_redisson_lock")
public String stock_redisson_lock() {RLock redissonLock = redisson.getLock(lock_key);try {redissonLock.lock();int stock = Integer.parseInt(stringRedisTemplate.opsForValue().get(key));if (stock > 0) {int afterStock = stock - 1;stringRedisTemplate.opsForValue().set(key, afterStock + "");System.out.println("扣减库存成功,剩余库存" + afterStock);} else {System.out.println("扣减库存失败");}} catch (NumberFormatException e) {e.printStackTrace();} finally {redissonLock.unlock();}return "ok";
}

看这个Redisson的分布式锁提供的API是不是非常的简单?就像Java并发变成里AQS那套Lock机制一样,如下获取一把RedissonLock

RLock redissonLock = redisson.getLock(lock_key);默认返回的是RedissonLock的对象,该对象实现了RLock接口,而RLock接口继承了JDK并发编程报包里的Lock接口

为什么阿里面试必问Redis?阿里架构师的Redis分布式锁实战分享

在使用Redisson加锁时,它也提供了很多API,如下

为什么阿里面试必问Redis?阿里架构师的Redis分布式锁实战分享

现在我们选择使用的是最简单的无参lock方法,简单的点进去跟一下看看他的源码,我们找到最终的执行加锁的代码如下:

为什么阿里面试必问Redis?阿里架构师的Redis分布式锁实战分享

我们可以看到其底层使用了Lua脚本来保证原子性,使用Redis的hash结构实现的加锁,以及可重入锁。

比我们自己实现分布式锁看起来还要简单,但是我们自己写的锁功能他都有,我们没有的他也有。比如,他实现的分布式锁是支持可重入的,也支持可等待,即尝试等待一定时间,没拿到锁就返回false。上述代码中的redissonLock.lock();是一直等待,内部自旋尝试加锁。

五、结语

到这里,Redis分布式锁实战基本就讲完了,总结一下Redis分布式锁吧。

  1. 如果说是自己实现的话,需要特别注意四点:
  • 原子加锁
  • 设置锁超时时间
  • 谁加的锁谁释放,且释放时的原子操作
  • 锁续命问题。
  1. 如果使用现成的分布式锁框架Redisson,就需要熟悉一下其常用的API以及实现原理,或者选择其他开源的分布式锁框架,充分考察,选择适合自己业务需求的即可。
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 彻底清理c盘空间,本人亲测有效--WinDirStat

    彻底清理c盘空间&#xff0c;本人亲测有效 前几天c 盘飘红&#xff0c;在清理磁盘&#xff0c;配置存储感知之后空间依旧紧张&#xff0c;至于c盘内的各种文件也不知道是干啥的&#xff0c;不敢随便清理&#xff0c; 最后发现了一个神器–WinDirStat,一款将存储空间图像化的超牛…...

    2024/4/28 13:02:37
  2. 对象标识和相等判断

    对象标识和相等判断 判断 对象是否的相等的方法&#xff0c;对于不同的情况&#xff0c;需要用到不同的方法&#xff0c;比较常用的有 三等号 “”, isNaN(number)函数, Object.is(obj1, obj2)方法 三等号 对象实例相等判断 function Person(name){this.name name;} const…...

    2024/4/28 8:30:34
  3. 动态规划总结

    数组表示一个集合&#xff0c;表示的值是集合的一个特性&#xff08;可以自己定&#xff09;&#xff0c;每一个集合都有几个限制条件&#xff0c;求出的值必须满足这个特性。转移方程的推导可以看做是把一个集合划分成几个不同的子集&#xff0c;这些子集的特性是已知的&#…...

    2024/4/28 4:11:44
  4. 数据仓库是什么

    数据仓库&#xff08;Data Warehouse&#xff09;,可简写为DW或DWH,数据仓库&#xff0c;是为了企业所有级别的决策制定计划过程&#xff0c;提供所有类型数据类型的战略集合。它出于分析性报告和决策支持的目的而创建。为需要业务智能的企业 ,为需要指导业务流程改进、监视时间…...

    2024/4/28 6:56:07
  5. Arduino ESP32配置静态IP并通过网页控制GPIO引脚

    Arduino ESP32配置静态IP并通过网页控制GPIO引脚配置静态IP前&#xff0c;需要对当前要进入的wifi网络的基本信息有了解才行&#xff0c;必须知道wifi的网关&#xff0c;网段&#xff0c;尽量配置比较远一点的IP&#xff0c;防止IP相同的冲突。 实例代码 /*ESP32 配置静态IP并…...

    2024/4/28 9:55:45
  6. private关键字(java学习第十一天)

    private关键字&#xff1a; 1、是一个权限修饰符 2、可以修饰成员&#xff08;成员变量和成员方法&#xff09; 3、作用是保护成员不被别的类使用&#xff0c;被private修饰的成员只在本类才能访问。...

    2024/4/28 7:47:51
  7. ADB屏蔽知乎视频答案

    个人对知乎强行推送视频答案深恶痛绝&#xff0c;没什么干货还影响网页加载速度&#xff1a; 因此写了条ADB规则屏蔽所有视频回答 在上图处填入下条规则并保存即可&#xff1a; www.zhihu.com##DIV[class"VideoAnswerPlayer"]...

    2024/4/28 9:01:58
  8. 提升接口测试覆盖率,都要考虑哪些点?

    接口测试一般需要关注以下几点&#xff1a; 1.输入 2.输出 3.逻辑处理 4.数据库 5.安全性 6.性能 7.接口超时 8.兼容性 9.接口设计&#xff08;较少关注&#xff09; 下面我们来逐个介绍说明。 输入 输入&#xff0c;接口的入参&#xff0c;一般使用等价类和边界值…...

    2024/4/28 17:41:00
  9. Unity 使用Material时踩的坑

    最早写shader的时候, 发现一件事, 在Inspector中修改Material时, 所有使用同一个Material的渲染都会生效. 但是用代码修改Sprite Render的Material的时候, 只有被修改的那个会生效. 一开始没多想这个问题, 直到最近给UI写Shader的时候, 发现用代码修改Image的Material依然会全部…...

    2024/4/15 18:19:18
  10. GO 设置环境变量

    本人安装Window系统下的Go语言的相关信息如下&#xff1a; Go语言版本&#xff1a;go1.14.6 安装包&#xff1a;go1.14.6.windows-amd64.msi 安装路径&#xff1a;D:\Program Files\Go Win10系统下配置Go语言环境变量 打开Win10下的环境变量设置界面 右键我的电脑->属性…...

    2024/4/15 18:19:43
  11. java代码审计4之Java EE开发框架安全审计

    Java EE开发框架安全审计 框架的本质是对底层信息进一步封装&#xff0c;目的是使开发人员将更多精力集中在业务逻辑中。 框架的执行流程 SSM框架 框架简介&#xff1a; Spring mvc spring mybatis 之前生产环境多用ssh&#xff08;struts 2 spring hibernate&#xff0…...

    2024/4/15 18:19:28
  12. 二进制转十进制算法

    2021年10月30号是本人第一次写csdn&#xff0c;通过这个平台学习到了许多知识&#xff0c;正所谓人人为我&#xff0c;我为人人&#xff0c;今天来和大家来分享一下c语言的二进制转十进制的算法&#xff01; 二进制由两个数&#xff08;0与1&#xff09;构成的&#xff0c;如10…...

    2024/4/15 18:19:38
  13. 输出IMG格式SAR图像——GDAL安装

    选择gdal软件输出IMG文件&#xff0c;因此&#xff0c;首先介绍gdal软件的安装。 软件版本&#xff1a;1.11.2 操作系统&#xff1a;CentOS 7 软件下载路径&#xff1a; 官网&#xff1a;http://download.osgeo.org/gdal/GitHub: https://github.com/OSGeo/gdal/releasesCSD…...

    2024/4/17 16:30:48
  14. Qt开发经验小技巧181-185

    Qt天生就是linux的&#xff0c;从linux开始发展起来的&#xff0c;所以不少Qt程序员经常的开发环境是linux&#xff0c;比如常用的ubuntu等系统&#xff0c;整理了一点常用的linux命令。 命令功能sudo -s切换到管理员&#xff0c;如果是 sudo -i 切换后会改变当前目录。apt in…...

    2024/4/15 18:19:28
  15. 优先级比较

    所有关系运算符的优先级比算数运算的低&#xff0c;但是比赋值运算的高...

    2024/4/15 18:19:38
  16. C# | 摄像机目标渲染纹理targetTexture

    文章目录简介方法备注简介 unity创建一个相机&#xff0c;想保存相机的图像时&#xff0c;有这样的一段程序&#xff1a; void Awake(){// GetComponent<>(),物件属性snapCam GetComponent<Camera>();if (snapCam.targetTexture null){// new 关键字&#xff1a…...

    2024/4/15 18:19:43
  17. ccf:2013-12-02ISBN号码(应试技巧 +解题思路 + 满分代码)

    应试技巧 题目分为算法题和模拟题&#xff0c;模拟题只需根据题目的意思模拟这个过程即可先理清问题要求的逻辑关系&#xff0c;再一步一步的写&#xff0c;不要遗漏要求 题目 解题思路 运用string类方便的读取字符串&#xff0c;熟练运用string的相关函数&#xff1a;strin…...

    2024/4/15 18:19:23
  18. note_4

    #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> //***作业 //int main() //{ // int a 40; // int c 212; // // printf("%d\n", (-8 22) * a - 10 c / 2); // return 0; //} //***作业 //int main() //{ // // int a 0; // int …...

    2024/4/15 18:19:13
  19. 查看调用DLL的程序及Kill DLL文件

    以Server.DLL为例。 如果想删除这个DLL文件,可是系统告诉你使用中, 首先要知道什么程序在使用这个DLL文件。开始 > 运行 > cmd > 输入命令:【tasklist /m>c:\1.txt】 命令执行完成后,在C盘下找到1.txt这个文件,Ctrl+F查找DLL名字,这里是Server 这样就能看…...

    2024/4/5 7:30:56
  20. 二位数组的行序 列序 存储地址计算

    #include "stdio.h" int main() { int x,y;//起始数组元素下标 int a,b;//数组总行总列数 int c,d;//当前元素下标 int e;//起始数组的地址 int f;//数组类型占用字节 int g; //当前元素地址 int z;//排序方式 printf("请输入数组类型占用字节数\n"); sc…...

    2024/4/15 18:19:33

最新文章

  1. 一文讲解Android车载系统camera架构 - EVS

    Android的camera开发中&#xff0c;使用最多的是camera2 以及现在Google主推的cameraX 架构&#xff0c;而这两个架构主要针对的是手机移动端上camera的流程。 而今天介绍的EVS(Exterior View System)架构是不同于camera2上的手机架构&#xff0c;针对Automotive的版本&#x…...

    2024/4/29 1:04:20
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. LeetCode 热题 100 题解(二):双指针部分(2)| 滑动窗口部分(1)

    题目四&#xff1a;接雨水&#xff08;No. 43&#xff09; 题目链接&#xff1a;https://leetcode.cn/problems/trapping-rain-water/description/?envTypestudy-plan-v2&envIdtop-100-liked 难度&#xff1a;困难 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&am…...

    2024/4/28 13:37:21
  4. 深入浅出 -- 系统架构之微服务中Nacos的部署

    前面我们提到过&#xff0c;在微服务架构中&#xff0c;Nacos注册中心属于核心组件&#xff0c;通常我们会采用高性能独立服务器进行部署&#xff0c;下面我们一起来看看Nacos部署过程&#xff1a; 1、环境准备 因为Nacos是支持windows和Linux系统的&#xff0c;且服务器操作…...

    2024/4/28 6:22:56
  5. Java-运算符

    运算符 Java语言支持如下运算符&#xff1a; 算术运算符&#xff1a;&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;%&#xff0c;&#xff0c;--复制运算符&#xff1a;关系运算符&#xff1a;>, <, >, <, , !instanceof逻辑运算符&#xff1a;&&…...

    2024/4/27 0:55:38
  6. 【外汇早评】美通胀数据走低,美元调整

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

    2024/4/28 13:52:11
  7. 【原油贵金属周评】原油多头拥挤,价格调整

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

    2024/4/28 3:28:32
  8. 【外汇周评】靓丽非农不及疲软通胀影响

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

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

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

    2024/4/28 13:51:37
  10. 【外汇早评】日本央行会议纪要不改日元强势

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

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

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

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

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

    2024/4/28 1:28:33
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

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

    2024/4/28 15:57:13
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

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

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

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

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

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

    2024/4/28 1:34:08
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

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

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

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

    2024/4/28 1:22:35
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

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

    2024/4/25 18:39:14
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

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

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

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

    2024/4/27 23:24:42
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

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

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

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

    2024/4/26 19:46:12
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

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

    2024/4/27 11:43:08
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

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

    2024/4/27 8:32:30
  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