Redis使用过程中要注意的事项

Redis使用起来很简单,但是在实际应用过程中,一定会碰到一些比较麻烦的问题,常见的问题有

  • redis和数据库数据的一致性
  • 缓存雪崩
  • 缓存穿透
  • 热点数据发现

下面逐一来分析这些问题的原理及解决方案。

数据一致性

针对读多写少的高并发场景,我们可以使用缓存来提升查询速度。当我们使用Redis作为缓存的时候,一般流程如图3-4所示。

  • 如果数据在Redis存在,应用就可以直接从Redis拿到数据,不用访问数据库。
  • 如果Redis里面没有,先到数据库查询,然后写入到Redis,再返回给应用。

image-20210705200053476

图3-4

因为这些数据是很少修改的,所以在绝大部分的情况下可以命中缓存。但是,一旦被缓存的数据发生变化的时候,我们既要操作数据库的数据,也要操作Redis的数据,所以问题来了。现在我们有两种选择:

  • 先操作Redis的数据再操作数据库的数据

  • 先操作数据库的数据再操作Redis的数据

到底选哪一种?

首先需要明确的是,不管选择哪一种方案, 我们肯定是希望两个操作要么都成功,要么都一个都不成功。不然就会发生Redis跟数据库的数据不一致的问题。但是,Redis的数据和数据库的数据是不可能通过事务达到统一的,我们只能根据相应的场景和所需要付出的代价来采取一些措施降低数据不一致的问题出现的概率,在数据一致性和性能之间取得一个权衡。

对于数据库的实时性一致性要求不是特别高的场合,比如T+1的报表,可以采用定时任务查询数据库数据同步到Redis的方案。由于我们是以数据库的数据为准的,所以给缓存设置一个过期时间,是保证最终一致性的解决方案。

Redis:删除还是更新?

这里我们先要补充一点,当存储的数据发生变化,Redis的数据也要更新的时候,我们有两种方案,一种就是直接更新,调用set;还有一种是直接删除缓存,让应用在下次查询的时候重新写入。

这两种方案怎么选择呢?这里我们主要考虑更新缓存的代价。

更新缓存之前,判断是不是要经过其他表的查询、接口调用、计算才能得到最新的数据,而不是直接从数据库拿到的值,如果是的话,建议直接删除缓存,这种方案更加简单,一般情况下也推荐删除缓存方案。

这一点明确之后,现在我们就剩一个问题:

  • 到底是先更新数据库,再删除缓存

  • 还是先删除缓存,再更新数据库

先更新数据库,再删除缓存

正常情况:更新数据库,成功。删除缓存,成功。

异常情况

1、更新数据库失败,程序捕获异常,不会走到下一步,所以数据不会出现不一致。

2、更新数据库成功,删除缓存失败。数据库是新数据,缓存是旧数据,发生了不一致的情况。

这种问题怎么解决呢?我们可以提供一个重试的机制。

比如:如果删除缓存失败,我们捕获这个异常,把需要删除的key发送到消息队列。然后自己创建一个消费者消费,尝试再次删除这个key,如图3-5所示。

image-20210705201740430

图3-5

另外一种方案,异步更新缓存

因为更新数据库时会往binlog写入日志,所以我们可以通过一个服务来监听binlog的变化(比如阿里的canal),然后在客户端完成删除key的操作。如果删除失败的话,再发送到消息队列。

总之,对于后删除缓存失败的情况,我们的做法是不断地重试删除,直到成功。无论是重试还是异步删除,都是最终一致性的思想,如图3-6所示。

基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql。

image-20210705202304171

图3-6

先删除缓存,再更新数据库

正常情况:删除缓存,成功。更新数据库,成功。

异常情况:

  • 删除缓存,程序捕获异常,不会走到下一步,所以数据不会出现不一致。

  • 删除缓存成功,更新数据库失败。 因为以数据库的数据为准,所以不存在数据不一致的情况。

看起来好像没问题,但是如果有程序并发操作的情况下:

  • 线程A需要更新数据,首先删除了Redis缓存

  • 线程B查询数据,发现缓存不存在,到数据库查询旧值,写入Redis,返回

  • 线程A更新了数据库

这个时候,Redis是旧的值,数据库是新的值,发生了数据不一致的情况,如图3-7所示,这种情况就比较难处理了,只有针对同一条数据进行串行化访问,才能解决这个问题,但是这种实现起来对性能影响较大,因此一般情况下不会采用这种做法。

image-20210705204932980

图3-7

缓存雪崩

缓存雪崩就是Redis的大量热点数据同时过期(失效),因为设置了相同的过期时间,刚好这个时候Redis请求的并发量又很大,就会导致所有的请求落到数据库。

关于缓存过期

在实际开发中,我们经常会,比如限时优惠、缓存、验证码有效期等。一旦过了指定的有效时间就需要自动删除这些数据,否则这些无效数据会一直占用内存但是缺没有任何价值,因此在Redis中提供了Expire命令设置一个键的过期时间,到期以后Redis会自动删除它。这个在我们实际使用过程中用得非常多。

expire key seconds # 设置键在给定秒后过期
pexpire key milliseconds # 设置键在给定毫秒后过期expireat key timestamp # 到达指定秒数时间戳之后键过期
pexpireat key timestamp # 到达指定毫秒数时间戳之后键过期

EXPIRE 返回值为1表示设置成功,0表示设置失败或者键不存在,如果向知道一个键还有多久时间被删除,可以使用TTL命令

ttl key # 返回键多少秒后过期
pttl key # 返回键多少毫秒后过期

当键不存在时,TTL命令会返回-2,而对于没有给指定键设置过期时间的,通过TTL命令会返回-1。

除此之外,针对String类型的key的过期时间,我们还可以通过下面这个方法来设置,其中可选参数ex表示设置过期时间。

set key value [ex seconds]

如果向取消键的过期时间设置(使该键恢复成为永久的),可以使用PERSIST命令,如果该命令执行成功或者成功清除了过期时间,则返回1 。 否则返回0(键不存在或者本身就是永久的)

SET expire.demo 1 ex 20
TTL expire.demo
PERSIST expire.demo
TTL expire

除了PERSIST命令,使用set命令为键赋值的操作也会导致过期时间失效。

关于key过期的实现原理

Redis使用一个过期字典(Redis字典使用哈希表实现,可以将字典看作哈希表)存储键的过期时间,字典的键是指向数据库键的指针(使用指针可以避免浪费内存空间),字典的值是一个毫秒时间戳,所以在当前时间戳大于字典值的时候这个键就过期了,就可以对这个键进行删除(删除一个键不仅要删除数据库中的键,也要删除过期字典中的键)。

设置过期时间的命令都是使用pexpireat命令实现的,其他命令也会转换成pexpireat。给一个键设置过期时间,就是将这个键的指针以及给定的到期时间戳添加到过期字典中。比如,执行命令pexpireat key 1608290696843,那么过期字典结构将如图3-8所示。

image-20210705221859849

图3-8

过期键的删除

过期键的删除有两种方法。

  • 被动方式删除

    被动方式的核心原理是,当客户端尝试访问某个key时,发现当前key已经过期了,就直接删除这个key。

    当然,有可能会存在一些key,一直没有客户端访问,就会导致这部分key一直占用内存,因此加了一个主动删除方式。

  • 主动方式删除

    主动删除就是Redis定期扫描国期间中的key进行删除,它的删除策略是:

    • 从过期键中随机获取20个key,删除这20个key中已经过期的key。
    • 如果在这20个key中有超过25%的key过期,则重新执行当前步骤。实际上这是利用了一种概率算法。

Redis结合这两种设计很好的解决了过期key的处理问题。

如何解决缓存雪崩

了解了过期key的删除后,再来分析缓存雪崩问题。缓存雪崩有几个方面的原因导致。

  • Redis的大量热点数据同时过期(失效)
  • Redis服务器出现故障, 这种情况,我们需要考虑到redis的高可用集群,这块后面再说。

我们来分析第一种情况,这种情况无非就是程序再去查一次数据库,再把数据库中的数据保存到缓存中就行,问题也不大。可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是主页访问量瞬间较大的时候,单一使用数据库来保存数据的系统会因为面向磁盘,磁盘读/写速度比较慢的问题而存在严重的性能弊端,一瞬间成千上万的请求到来,需要系统在极短的时间内完成成千上万次的读/写操作,这个时候往往不是数据库能够承受的,极其容易造成数据库系统瘫痪,最终导致服务宕机的严重生产问题。

解决这类问题的方法有几个。

  • 对过期时间增加一个随机值,避免同一时刻大量key失效。
  • 对于热点数据,不设置过期时间。
  • 当从redis中获取数据为空时,去数据库查询数据的地方互斥锁,这种方式会造成性能下降。
  • 增加二级缓存,以及缓存和二级缓存的过期时间不同,当一级缓存失效后,可以再通过二级缓存获取。

缓存穿透

缓存穿透,一般是指当前访问的数据在redis和mysql中都不存在的情况,有可能是一次错误的查询,也可能是恶意攻击。

在这种情况下,因为数据库值不存在,所以肯定不会写入Redis,那么下一次查询相同的key的时候,肯定还是会再到数据库查一次。试想一下,如果有人恶意设置大量请求去访问一些不存在的key,这些请求同样最终会访问到数据库中,有可能导致数据库的压力过大而宕机。

这种情况一般有两种处理方法。

缓存空值

我们可以在数据库缓存一个空字符串,或者缓存一个特殊的字符串,那么在应用里面拿到这个特殊字符串的时候,就知道数据库没有值了,也没有必要再到数据库查询了。

但是这里需要设置一个过期时间,不然的会数据库已经新增了这一条记录,应用也还是拿不到值。

这个是应用重复查询同一个不存在的值的情况,如果应用每一次查询的不存在的值是不一样的呢?即使你每次都缓存特殊字符串也没用,因为它的值不一样,比如我们的用户系统登录的场景,如果是恶意的请求,它每次都生成了一个符合ID规则的账号,但是这个账号在我们的数据库是不存在的,那Redis就完全失去了作用,因此我们有另外一种方法,布隆过滤器。

布隆过滤器解决缓存穿透

先来了解一下布隆过滤器的原理,

  • 首先,项目在启动的时候,把所有的数据加载到布隆过滤器中。
  • 然后,当客户端有请求过来时,先到布隆过滤器中查询一下当前访问的key是否存在,如果布隆过滤器中没有该key,则不需要去数据库查询直接反馈即可

image-20210705232359445

图3-9

下面我们通过一个案例来演示一下布隆过滤器的工作机制。

注意,该案例是在[springboot-redis-example]这个工程中进行演示。

  • 添加guava依赖,guava中提供了布隆过滤器的api

    <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>21.0</version>
    </dependency>
  • 增加一个ApplicationRunner实现,当spring boot启动完成后执行初始化

    @Slf4j
    @Component
    public class BloomFilterDataLoadApplicationRunner implements ApplicationRunner {@AutowiredICityService cityService;@Overridepublic void run(ApplicationArguments args) throws Exception {List<City> cityList=cityService.list();// expectedInsertions: 预计添加的元素个数// fpp: 误判率(后续再讲)BloomFilter<String> bloomFilter=BloomFilter.create(Funnels.stringFunnel(Charsets.UTF_8),10000000,0.03);cityList.parallelStream().forEach(city -> {bloomFilter.put(RedisKeyConstants.CITY_KEY+":"+city.getId());});BooleanFilterCache.bloomFilter=bloomFilter;}
    }
  • 添加一个controller用来访问测试

    @RestController
    public class BloomFilterController {@AutowiredRedisTemplate redisTemplate;@GetMapping("/bloom/{id}")public String filter(@PathVariable("id")Integer id){String key=RedisKeyConstants.CITY_KEY+":"+id;if(BooleanFilterCache.bloomFilter.mightContain(key)){ //判断当前数据在布隆过滤器中是否存在,如果存在则从缓存中加载return redisTemplate.opsForValue().get(key).toString();}return "数据不存在";}
    }

布隆过滤器存储空间大小计算: https://hur.st/bloomfilter/?n=1000000&p=0.03&m=&k=

布隆过滤器原理分析

完成上述实验过程后,很多同学会产生疑问,

  • 老师,如果我的数据量有上千万,那不会很占内存啊?
  • 老师,布隆过滤器的实现原理是什么呀?

什么是布隆过滤器

布隆过滤器是Burton Howard Bloom在1970年提出来的,一种空间效率极高的概率型算法和数据结构,主要用来判断一个元素是否在集合中存在。因为他是一个概率型的算法,所以会存在一定的误差,如果传入一个值去布隆过滤器中检索,可能会出现检测存在的结果但是实际上可能是不存在的,但是肯定不会出现实际上不存在然后反馈存在的结果。因此,Bloom Filter不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下,Bloom Filter通过极少的错误换取了存储空间的极大节省

BitMap(位图)

所谓的Bit-map就是用一个bit位来标记某个元素对应的Value,通过Bit为单位来存储数据,可以大大节省存储空间.

ps:比特是一个二进制数的最小单元,就像我们现在金额的最小单位是分。只不过比特是二进制数而已,一个比特只能拥有一个值,不是0就是1,所以如果我给你一个值0,你可以说它就是一个比特,如果我给你两个(00),你就可以说它们是两个比特了。如果你将八个0或者1组合在一起,我们可以说说是8比特或者1个字节。在32位的机器上,一个int类型的数据会占用4个字节,也就是32个比特位。

在java中,一个int类型占32个比特,我们用一个int数组来表示时未new int[32],总计占用内存32*32bit,现假如我们用int字节码的每一位表示一个数字的话,那么32个数字只需要一个int类型所占内存空间大小就够了,这样在大数据量的情况下会节省很多内存。

如果要存储n个数字,那么具体思路如下。

  • 1个int占4字节即4*8=32位,那么我们只需要申请一个int数组长度为 int tmp[1+N/32]即可存储完这些数据,其中N代表要进行查找的总数,tmp中的每个元素在内存在占32位可以对应表示十进制数0~31,所以可得到BitMap表:

    • tmp[0]:可表示0~31
    • tmp[1]:可表示32~63
    • tmp[2]可表示64~95
  • 接着,我们只需要把对应的数字存储到指定数组元素的bit中即可,如何判断int数字在tmp数组的哪个下标,这个其实可以通过直接除以32取整数部分,例如:整数8除以32取整等于0,那么8就在tmp[0]上。另外,我们如何知道了8在tmp[0]中的32个位中的哪个位,这种情况直接mod上32就ok,又如整数8,在tmp[0]中的8 mod 32等于8,那么整数8就在tmp[0]中的第八个bit位(从右边数起)

比如我们要存储5**(101)、9(1001)、3(11)、1(1)**四个数字,那么我们申请int型的内存空间,会有32个比特位。这四个数字的二进制分别对应如下。

从右往左开始数,比如第一个数字是5,对应的二进制数据是101, 那么从有往左数到第5位,把对应的二进制数据存储到32个比特位上。

第一个5就是     00000000000000000000000000101000 而输入9的时候   00000000000000000000001001000000 输入3时候      00000000000000000000000000001100 输入1的时候    00000000000000000000000000000010

思想比较简单,关键是十进制和二进制bit位需要一个map映射表,把10进制映射到bit位上,这样的好处是内存占用少、效率很高(不需要比较和位移)。

布隆过滤器原理

有了对位图的理解以后,我们对布隆过滤器的原理理解就会更容易了,基于前面的例子,我们把数据库中的一张表的数据全部先保存到布隆过滤器中,用来判断当前访问的key是否存在于数据库。

假设我们需要把id=1这个key保存到布隆过滤器中,并且该布隆过滤器中的hash函数个数为3{x、y、z},它的具体实现原理如下:

  • 首先将位数组进行初始化,将里面每个位都设置位0。
  • 对于集合里面的每一个元素,将元素依次通过3个哈希函数{x、y、z}进行映射,每次映射都会产生一个哈希值,这个值对应位数组上面的一个点,然后将位数组对应的位置标记为1。
  • 查询id=1元素是否存在集合中的时候,同样的方法将W通过哈希映射到位数组上的3个点。
    • 如果3个点的其中有一个点不为1,则可以判断该元素一定不存在集合中。
    • 反之,如果3个点都为1,则该元素可能存在集合中。

image-20210706210232859

图3-10

接下来按照该方法处理所有的输入对象,每个对象都可能把bitMap中一些白位置涂黑,也可能会遇到已经涂黑的位置,遇到已经为黑的让他继续为黑即可。处理完所有的输入对象之后,在bitMap中可能已经有相当多的位置已经被涂黑。至此,一个布隆过滤器生成完成,这个布隆过滤器代表之前所有输入对象组成的集合。

如何去判断一个元素是否存在bit array中呢? 原理是一样,根据k个哈希函数去得到的结果,如果所有的结果都是1,表示这个元素可能(假设某个元素通过映射对应下标为4,5,6这3个点。虽然这3个点都为1,但是很明显这3个点是不同元素经过哈希得到的位置,因此这种情况说明元素虽然不在集合中,也可能对应的都是1)存在。 如果一旦发现其中一个比特位的元素是0,表示这个元素一定不存在

至于k个哈希函数的取值为多少,能够最大化的降低错误率(因为哈希函数越多,映射冲突会越少),这个地方就会涉及到最优的哈希函数个数的一个算法逻辑。

  • fpp表示允许的错误概率

  • expectedInsertions: 预期插入的数量

public static void main(String[] args) {BloomFilter<String> bloomFilter=BloomFilter.create(Funnels.stringFunnel(Charsets.UTF_8),10000000,0.03);bloomFilter.put("Mic");System.out.println(bloomFilter.mightContain("Mic"));
}
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. linux标准输出输入及重定向

    目录 一 标准输入及输出 二 重定向 输出重定向 一 标准输入及输出 设备文件描述键盘等/dev/stdin0标准输入显示器等/dev/stdout1标准正确输出显示器等/dev/stderr2标准错误输出 标准输入(STDIN) -0 默认接受来自终端窗口的输入 标准输出(STDOUT) -1 默认输出到终端窗口 标准…...

    2024/4/24 15:13:40
  2. LeetCode925 长按键入

    LeetCode925 长按键入 1. 问题描述 2. 思路 双指针 3. 代码 func isLongPressedName(name string, typed string) bool {if name[0] ! typed[0] || len(name) > len(typed) {return false}// i指向name&#xff0c;j指向typedi, j : 0, 0var current bytefor j < len…...

    2024/4/24 15:13:36
  3. 报错,ERROR 2572 --- [MessageBroker-2] o.h.engine.jdbc.spi.SqlExceptionHelper : Column ‘create_by‘

    错误&#xff1a; idea: 2020-12-23 17:11:18.611 ERROR 2572 --- [MessageBroker-2] o.h.engine.jdbc.spi.SqlExceptionHelper : Column create_by not found. 2020-12-23 17:11:18.619 ERROR 2572 --- [MessageBroker-2] c.y.a.controller.v1.trans.TransMonitor : 获取连…...

    2024/4/24 1:29:19
  4. 【】WebStorm+Chrome调试Vue步骤【必须选择JavaScript调试】

    WebStormChrome调试Vue步骤 - 以德为先 - 博客园 【重磅技巧】webstorm谷歌浏览器调试Vue程序【真是牛逼了,竟然还可以调试基于Metamask的以太坊区块链程序&#xff01;&#xff01;&#xff01;】_比特币爱好者007的博客-CSDN博客...

    2024/4/24 11:50:17
  5. Gauss-Seidel迭代法的C++实现

    高斯赛德尔迭代法大家可以从网站上找到相关的公式推导&#xff0c;这里给出它的C算法实现和运行的结果。 #include<iostream> #include<math.h> using namespace std;int n; //定义全局变量 double a[100…...

    2024/4/26 14:26:45
  6. 请你说一下自己对ThreadLocal的理解(请你说说ThreadLocal的原理)—java并发知识

    本文旨在作学习记录&#xff0c;部分内容源自JavaGuide&#xff0c;作者在此基础上进行补充说明、整理论述&#xff0c;使其能以一种更为逻辑地清晰地方式表达出“请你说一下自己对ThreadLocal的理解”的理解&#xff0c;更多适应于java面试回答&#xff0c;亦可作对ThreadLoca…...

    2024/4/24 15:13:30
  7. Android蓝牙完全学习手册

    1.前言市面上关于Android的技术书籍很多,几乎每本书也都会涉及到蓝牙开发,但均是上层应用级别的,而且篇幅也普遍短小。对于手机行业的开发者,要进行蓝牙模块的维护,就必须从Android系统底层,至少框架层开始,了解蓝牙的结构和代码实现原理。这方面的文档、网上的各个论坛…...

    2024/4/25 17:47:25
  8. Vue模板语法(下)

    一、Vue基础语法&#xff1a; &#xff08;样式绑定、事件处理器、表单、自定义指令、vue组件、组件通信【自定义事件】&#xff09; 1、样式绑定 1.1、 class绑定 使用方式&#xff1a;v-bind:class"expression" expression的类型&#xff1a;字符串、数组、对象…...

    2024/4/24 15:13:31
  9. 二进制原、反、补码底层知识

    这篇文章对二进制讲解的非常深刻&#xff0c;在此进行转发&#xff0c;以备后面复习。这里另外推荐另外一篇文章&#xff0c;加强学习进制转换 &#xff0d;128的8位补码是&#xff1a;1000 0000B&#xff0c;换算成十进制就是 128。 负数的补码&#xff0c;是用“模”计算出来…...

    2024/4/24 15:13:29
  10. 六角架构

    作者:Alistair Cockburn 原文链接:http://alistair.cockburn.us/Hexagonal+architecture 译文原链接:http://www.codeweblog.com/%E8%AF%91-%E5%85%AD%E8%A7%92%E6%9E%B6%E6%9E%84-hexagonal-architecture/本文在此译文基础上做了修改。创建应用时应无需依赖于UI或者数据库…...

    2024/4/24 15:13:28
  11. VMware虚拟机NAT模式共享主机无线网络的配置方法

    0 背景 先搞清楚VMware这几块虚拟网卡的功用&#xff1a; vmnet0&#xff0c;实际上就是一个虚拟的网桥 这个网桥有很若干个端口&#xff0c;一个端口用于连接你的Host&#xff0c;一个端口用于连接你的虚拟机&#xff0c;他们的位置是对等的&#xff0c;谁也不是谁的网关。…...

    2024/4/24 0:59:13
  12. 设计模式之装饰者模式

    装饰者模式装饰者模式结构图基本代码实现Component类ConcreteComponent类Decorator类ConcreteDecoratorA类ConcreteDecoratorB类客户端代码总结装饰者模式 动态的给一个对象添加一些额外的职责&#xff0c;就增加功能来说&#xff0c;装饰模式比生成子类更加灵活 结构图 “Co…...

    2024/4/24 11:44:17
  13. Java中java.text.SimpleDateFormat的日期格式用法

    在Java中SimpleDateFormat;类可以格式化日期显示,这点大家都知道。不过之前自己没注意栽倒在自己的坑里了,将24小时格式的写成了12小时格式了。以下做个记录内容,增强自己的记忆避免再次出错。 SimpleDateFormat sf = new SimpleDateFormat("XXXX"); String datet…...

    2024/4/24 15:13:33
  14. C语言学习第2天

    ‘a’ - 字符a int main() { char cha …………char表示字符类型&#xff0c;ch表示创建了存储这个字符所需的空间 或 int age20 …………整型 short num10 …………短整型 long …………长整型 long long …………长长整型 float weight57.5 …………单精度浮点型 d…...

    2024/4/24 15:14:21
  15. VMware虚拟机NAT模式共享主机无线网络的方法

    0 背景 先搞清楚VMware这几块虚拟网卡的功用&#xff1a; vmnet0&#xff0c;实际上就是一个虚拟的网桥 这个网桥有很若干个端口&#xff0c;一个端口用于连接你的Host&#xff0c;一个端口用于连接你的虚拟机&#xff0c;他们的位置是对等的&#xff0c;谁也不是谁的网关。…...

    2024/4/24 15:14:24
  16. 【数学基础】 foundation of mathematics :Jensen不等式

    数学基础系列文章目录 目录数学基础系列文章目录Jensen 不等式Jensen 不等式 凸函数中有一个性质&#xff0c;存在定义域中任意两点x1x_1x1​和x2x_2x2​&#xff0c;且有0⩽t⩽10\leqslant t\leqslant 10⩽t⩽1&#xff0c;得到tf(x1)(1−t)f(x2)⩾f[tx1(1−t)x2]t\times f(x…...

    2024/4/24 15:14:19
  17. 无锁CAS

    1、什么是CAS ⽐较并交换(compare and swap, CAS)&#xff0c;是原⼦操作的⼀种&#xff0c;可⽤于在多线程编程中实现不被打断的数据交换操作&#xff0c;从⽽避免多线程同时改写某⼀数据时由于执⾏顺序不确定性以及中断的不可预知性产⽣的数据 不⼀致问题。 该操作通过将内存…...

    2024/4/24 15:14:23
  18. 今天的学习心得

    这两天的考试做下来&#xff0c;对测试用例设计的这些方法有了更多的了解。没种方法大概的都能知道怎么用。学的理论方法在实践中还需要更灵活的去用 不足之处&#xff1a;有些题目还都没有作对&#xff0c;需要在做一遍&#xff0c;加深印象...

    2024/4/24 15:14:17
  19. 压测:Redis pubsub 实现 Locust 并发聚合点

    压测&#xff1a;Redis pubsub 实现 Locust 并发聚合点 一、需求&#xff1a; 步骤&#xff1a; 启一系列玩家比如5000个&#xff0c;300并发&#xff0c;先登录进入系统并保持tcp不断开其中一个玩家发送消息&#xff0c;记录下发送时间服务器广播给所有玩家&#xff0c;包括…...

    2024/4/24 15:14:19
  20. NameNode 内存生产配置

    1&#xff09;NameNode 内存计算 每个文件块大概占用 150byte&#xff0c;一台服务器 128G 内存为例&#xff0c;能存储多少文件块呢&#xff1f; 128 * 1024 * 1024 * 1024 / 150Byte ≈ 9.1 亿 G MB KB Byte 2&#xff09;Hadoop2.x 系列&#xff0c;配置 NameNode 内存 Name…...

    2024/4/24 15:14:14

最新文章

  1. PyCharm Professional 安装

    文章目录 下载PyCharm 2022.3 Professional使用‘第一种【推荐】’即可记得要是要使用Activation Code激活&#xff01; 破解方法&#xff1a; https://www.exception.site/essay/pycharm-pojie-jihuoma 下载PyCharm 2022.3 Professional [https://www.jetbrains.com/pycharm/…...

    2024/4/26 23:07:11
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. Jmeter02-1:参数化组件CVS

    目录 1、Jmeter组件&#xff1a;参数化概述 1.1 是什么&#xff1f; 1.2 为什么&#xff1f; 1.3 怎么用&#xff1f; 2、Jmeter组件&#xff1a;参数化实现之CSV Data Set Config(重点中重点) 2.1 是什么&#xff1f; 2.2 为什么&#xff1f; 2.3 怎么用&#xff1f; …...

    2024/4/25 11:52:18
  4. CTK插件框架学习-事件监听(04)

    CTK插件框架学习-插件注册调用(03)https://mp.csdn.net/mp_blog/creation/editor/136989802 一、主要流程 发送者注册消息事件接收者订阅消息事件接收者相应消息事件 事件监听比插件接口调用耦合性更弱&#xff0c;事件由框架维护&#xff0c;不需要指定发送方和接收方 二、…...

    2024/4/25 1:44:38
  5. 【外汇早评】美通胀数据走低,美元调整

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

    2024/4/26 18:09:39
  6. 【原油贵金属周评】原油多头拥挤,价格调整

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

    2024/4/26 20:12:18
  7. 【外汇周评】靓丽非农不及疲软通胀影响

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

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

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

    2024/4/25 18:39:23
  9. 【外汇早评】日本央行会议纪要不改日元强势

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

    2024/4/25 18:39:22
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

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

    2024/4/25 18:39:22
  11. 【外汇早评】美欲与伊朗重谈协议

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

    2024/4/26 21:56:58
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

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

    2024/4/25 16:48:44
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

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

    2024/4/26 16:00:35
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

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

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

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

    2024/4/25 18:39:16
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

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

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

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

    2024/4/26 22:01:59
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

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

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

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

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

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

    2024/4/25 2:10:52
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

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

    2024/4/25 18:39:00
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

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

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

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

    2024/4/25 18:38:58
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

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

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

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

    2022/11/19 21:17:18
  26. 错误使用 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
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,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
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:16:58
  44. 如何在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