【redis初阶】初识Redis

目录

一、初识Redis

二、盛赞 Redis

三、Redis 特性

3.1 速度快

​编辑3.2 基于键值对的数据结构服务器

3.3 丰富的功能

3.4 简单稳定

🐶

3.6 持久化(Persistence)

3.7 主从复制(Replication)

3.8 高可用(High Availability)和分布式(Distributed)

四、Redis 使用场景

4.1 Redis 可以做什么

4.2 Redis 不可以做什么

五、Redis 重大版本


redis学习 🥰

一、初识Redis

Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。

对于存储数据的理解:在单机程序中,我们可以直接通过变量的方式来存储数据;但是对于分布式系统,各个主机以及进程间是隔离的,而redis就是基于网络,可以把自己内存中的变量给别的进程,甚至别的主机的进程进行使用;

对于数据库的理解:redis和mysql一样都可以当作数据库来使用,mysql基于磁盘的,访问速度比较慢,存储容量大;redis基于内存的,相较于mysql来说存储速度快,但是存储容量小;虽然有不少的互联网产品,对于性能要求比较高,但更多的互联网产品对于性能要求没那么高,mysql相较于redis也提供了更丰富的增删改查功能,因此对于数据库的使用mysql仍是首选;

对于高速缓存的理解:我们既想要有mysql的大容量,也想要有redis的存储效率,那就可以将mysql和redis结合起来,mysql存储全量数据,redis存储热点数据,但这样的设计【二八原则:20%的热点数据,能够满足80%的访问需求】会导致系统的复杂度大大提升,而且,如果数据发生修改,也会涉及到mysql和redis的数据同步问题;

对于消息队列的理解:redis的初心就是用来作为一个“消息中间件”(也就是消息队列),为了实现分布式系统下的生产者消费者模型,当前很少会直接使用redis作为消息中间件来使用,业界有更好的选择;


二、盛赞 Redis

Redis 是一种基于键值对(key-value)的 NoSQL 数据库,与很多键值对数据库不同的是,Redis

中的值可以是由 string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集

合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此

Redis可以满足很多的应用场景,而且因为 Redis 会将所有数据都存放再内存中,所以它的读写性能非

常惊人。不仅如此,Redis还可以将内存的数据利用快照和日志的形式保存到硬盘上,这样在发生类似

断电或者机器故障的时候,内存中的数据不会“丢失”。除了上述功能以外,Redis还提供了键过期、发

布订阅、事务、流水线、Lua 脚本等附加功能。总之,如果在合适的场景使用号 Redis,它就会像一把

瑞士军刀一样所向披靡。

2008年,Redis 的作者 Salvatore Sanfilippo 在开发一个叫 LLOOGG 的网站时,需要实现一个高

性能的队列功能,最开始是使用 MySQL 来实现的,但后来发现无论怎么优化 SQL 语句等都不能使网

站的性能提高上去,再加上自己囊中羞涩,于是他决定自己做一个专属于 LLOOGG 的数据库,这个就

是 Redis 的前身。后来,Salvatore Sanfilippo 将 Redis 1.0 的源码发布到 Github 上,可能连他自

没想到,Redis 后来如此受欢迎。

假如现在有人问 Redis 的作者都有谁在使用 Redis,我想他可以开句玩笑的回答:还有谁不使Redis,

当然这只是开玩笑,但是从Redis 的官方公司统计来看,有很多重量级的公司都在使用Redis,如国外

的 Twitter、Instagram、Stack Overflow、Github 等,国内就更多了,如果单单从体量来统计,新浪

微博可以说是全球最大的 Redis 使用者,除了新浪微博,还有像阿里巴巴、腾讯、搜狐、优酷土豆、

美团、小米、唯品会等公司都是 Redis 的使用者。除此之外,许多开源技术像 ELK 等已经把 Redis 作

为它们组件中的重要一环,而且 Redis还提供了模块系统让第三方人员实现功能扩展,让 Redis 发挥

出更大的威力。所以,可以这么说,熟练使用和运维 Redis 已经成为开发运维人员的一个必备技能。

三、Redis 特性

Redis 之所以受到如此多公司的青睐,必然有之过人之处,下面是关于 Redis 的 8 个重要特性。

3.1 速度快

正常情况下,Redis 执行命令的速度非常快,官方给出的数字是读写性能可以达到 10 万/秒,当然这也

取决于机器的性能,但这里先不讨论机器性能上的差异,只分析一下是什么造就了Redis 如此之快,可

以大概归纳为以下四点:

1. Redis 的所有数据都是存放在内存中的,表 1-1 是谷歌公司 2009年给出的各层级硬件执行速度,所以把数据放在内存中是 Redis 速度快的最主要原因;

2. Redis 是用 C 语言实现的,一般来说 C 语言实现的程序 “距离” 操作系统更近,执行速度相对会更快;

3. Redis 使用了单线程,预防了多线程可能产生的竞争问题。

Redis 在 6.0 版本引入了多线程机制,但主要也是在处理网络和IO,不涉及到数据命令,即命令

的执行仍然采用了单线程模式。

4. 作者对于 Redis 源代码可以说是精打细磨,曾经有人评价 Redis 是少有的集性能和优雅于一身的开源代码。

3.2 基于键值对的数据结构服务器

几乎所有的编程语言都提供了类似字典的功能,例如 C++ 里的 map、Java 里的 map、Python 里的

dict 等,类似于这种组织数据的方式叫做基于键值对的方式,与很多键值对数据库不同的是,Redis 中

的值不仅可以是字符串,而且还可以是具体的数据结构,这样不仅能便于在许多应用场景的开发,同

时也能提高开发效率。Redis 的全程是 REmote Dictionary Server,它主要提供了5 种数据结构:字

符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(ordered set/zet),同时

在字符串的基础之上演变出了位图(Bitmaps)和 HyperLogLog 两种神奇的 ”数据结构“,并且随着

LBS(Location Based Service,基于位置服务)的不断发展,Redis 3.2. 版本种加入有关 GEO(地

理信息定位)的功能,总之在这些数据结构的帮助下,开发者可以开发出各种 “有意思” 的应用。

3.3 丰富的功能

除了5 种数据结构,Redis还提供了许多额外的功能:

  • 提供了键过期功能,可以用来实现缓存;
  • 提供了发布订阅功能,可以用来实现消息系统;
  • 支持 Lua 脚本功能,可以利用 Lua 创造出新的 Redis命令;
  • 提供了简单的事务功能,能在一定程度上保证事务特性;
  • 提供了流水线(Pipeline)功能,这样客户端能将一批命令一次性传到 Redis,减少了网络的开销。

3.4 简单稳定

Redis 的简单主要表现在三个方面。首先,Redis 的源码很少,早期版本的代码只有 2 万行左右,3.0

版本以后由于添加了集群特性,代码增至 5 万行左右,相对于很多 NoSQL 数据库来说代码量相对要

少很多,也就意味着普通的开发和运维人员完全可以 “吃透”它。其次,Redis 使用单线程模型 ,这样

不仅使得 Redis 服务端处理模型变得简单,而且也使得客户端开发变得简单。最后,Redis 不需要依

赖于操作系统中的类库(例如 Memcache 需要依赖 libevent 这样的系统类库),Redis自己实现了事

件处理的相关功能。

但与简单相对的是 Redis 具备相当的稳定性,在大量使用过程中,很少出现因为 Redis 自身 BUG 而

导致宕掉的情况。

3.5 客户端语言多

Redis提供了简单的 TCP 通信协议,很多编程语言可以很方便地接入到 Redis,并且由于 Redis 受到

社区和各大公司的广泛认可,所以支持 Redis 的客户端语言也非常多,几乎涵盖了主流的编程语言,

例如 C、C++、Java、PHP、Python、NodeJS 等,后续我们会对 Redis 的客户端使用做详细说

明。

3.6 持久化(Persistence)

通常看,将数据放在内存中是不安全的,一旦发生断电或者机器故障,重要的数据可能就会丢失,因

此 Redis 提供了两种持久化方式:RDB 和 AOF,即可以用两种策略将内存的数据保存到硬盘中

(如图 1-1 所示),这样就保证了数据的可持久性,后续我们将对 Redis 的持久化进行详细说明。

图 1-1 Redis 内存到硬盘的持久化

3.7 主从复制(Replication)

Redis 提供了复制功能,实现了多个相同数据的 Redis 副本(Replica)(如图 1- 2 所示),复制

功能是分布式 Redis 的基础。后续我们会对 Redis 的复制功能进行详细演示。

图 1-2 Redis 主从复制架构

 

3.8 高可用(High Availability)和分布式(Distributed)

Redis 提供了高可用实现的 Redis 哨兵(Redis Sentinel),能够保证 Redis 结点的故障发现和故障自

动转移。也提供了 Redis 集群(Redis Cluster),是真正的分布式实现,提供了高可用、读写和容量

的扩展性。

四、Redis 使用场景

上节我们已经了解了Redis 的若干个特性,本节来看一下 Redis 的典型应用场景有哪些?

4.1 Redis 可以做什么

要充分理解 Redis 的作用,需要读者对网站的架构有一定的基础理解,考虑到部分读者缺少这方面的

背景知识,建议先移步为大家准备的 《服务端高并发分布式结构演进之路》篇对该领域的基础知

识做一定学习后,再度继续本篇的学习。

1. 缓存(Cache)

缓存机制几乎在所有大型网站都有使用,合理地使用缓存不仅可以加速数据的访问速度,而且能够有

效地降低后端数据源的压力。Redis提供了键值过期时间设置,并且也提供了灵活控制最大内存和内存

溢出后的淘汰策略。可以这么说,一个合理的缓存设计能够为一个网站的稳定保驾护航。

2. 排行榜系统

排行榜系统几乎存在于所有的网站,例如按照热度排名的排行榜,按照发布时间的排行榜,按照各种

复杂维度计算出的排行榜,Redis 提供了列表和有序集合的结构,合理地使用这些数据结构可以很方便

地构建各种排行榜系统。

3. 计数器应用

计数器在网站中的作用至关重要,例如视频网站有播放数、电商网站有浏览数,为了保证数据的实时

性,每一次播放和浏览都要做加 1 的操作,如果并发量很大对于传统关系型数据的性能是一种挑战。

Redis 天然支持计数功能而且计数的性能也非常好,可以说是计数器系统的重要选择。

4. 社交网络

赞/踩、粉丝、共同好友/喜好、推送、下拉刷新等是社交网站的必备功能,由于社交网站访问量通常比

较大,而且传统的关系型数据不太合适保存这种类型的数据,Redis提供的数据结构可以相对比较容易

地实现这些功能。

5. 消息队列系统

消息队列系统可以说是一个大型网站的必备基础组件,因为其具有业务解耦、非实时业务削峰等特

性。Redis 提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列比还不够足够强大,但是

对于一般的消息队列功能基本可以满足。

4.2 Redis 不可以做什么

实际上和任何一门技术一样,每个技术都有自己的应用场景和边界,也就是说 Redis并不是万金油,有

很多合适它解决的问题,但是也有很多不合适它解决的问题。我们可以站在数据规模和数据冷热的角

度来进行分析。

站在数据规模的角度看,数据可以分为大规模数据和小规模数据,我们知道 Redis 的数据是存放在内

存中的,虽然现在内存已经足够便宜,但是如果数据量非常大,例如每天有几亿的用户行为数据,使

用 Redis 来存储的话,基本上是个无底洞,经济成本相当高。

站在数据冷热的角度 ,数据分为热数据和冷数据,热数据通常是指需要频繁操作的数据,反之为冷数

据,例如对于视频网站来说,视频基本信息基本上在各个业务线都是经常要操作的数据,而用户的观

看记录不一定是经常需要访问的数据,这里暂且不讨论两者数据规模的差异,单纯站在数据冷热的角

度上看,视频信息属于热数据,用户观看记录属于冷数据。如果将这些冷数据放在 Redis 上,基本上

是对于内存的一种浪费,但是对于一些热数据可以放在 Redis 中加速读写,也可以减轻后端存储的负

载,可以说是事半功倍。

所以,Redis 并不是万金油,相信随着我们对 Redis 的逐步学习,能够清楚 Redis 真正的使用场景。

五、Redis 重大版本

Redis 借鉴了Linux 操作系统对于版本号的命名规则:版本号第二位如果是奇数,则为非稳定版本

(例如 2.7、2.9、3.1),如果是偶数,则为稳定版本(例如 2.6、2.8、3.0、3.2)。当前奇数版本就

是下一个稳定版本的开发版本,例如 2.9 版本是 3.0 版本的开发版本。所以我们生产环境通常选取偶

数版本的 Redis,如果对于某些新的特性想提前了解和使用,可以选择最新的奇数版本。目前最新的版

本是 7.0 版本。本小节将对 Redis 发展过程中的一些重要版本及特性进行说明。

1. Redis 2.6

Redis 2.6 在 2012年正式发布,相比于 Redis 2.4,主要特性如下:

  • 服务端支持 Lua 脚本;
  • 去掉虚拟内存相关功能;
  • 放开对客户端连接数的硬编码限制;
  • 键的过期时间支持毫秒;
  • 从结点提供只读功能;
  • 两个新的位图命令:bitcount 和 bitop;
  • 增强了 redis-benchmark 的功能:支持定制化的压测、CSV 格式输出等功能;
  • 基于浮点数自增命令:incrbyfloat 和 hincrbyfloat;
  • redis-cli 可以使用 --eval 参数实现 Lua 脚本执行;
  • shutdown 命令增强;
  • Info 可以按照 setction 输出,并且添加了一些统计项;
  • 重构了大量的核心代码,所有集群相关的代码都去掉了,会在 3.0 支持 cluster 功能;
  • sort 命令优化;

2. Redis 2.8

Redis 2.8 在 2013 年正式发布,相比于 Redis 2.6,主要特性如下:

  • 添加部分主从复制的功能,在一定程度上降低了由于网络问题,造成频繁全量复制生成 RDB 对系统
  • 造成的压力;
  • 尝试性地支持 IPv6;
  • 可以通过 config set 命令设置 maxclients;
  • 可以用 bind 命令绑定多个 IP 地址;
  • Redis 设置了明显的进程名,方便使用 ps 命令查看系统进程;
  • config rewrite 命令可以将 config set 持久化到 Redis 配置文件中;
  • 发布订阅添加了 pubsub 命令;
  • Redis Sentinel 第二版,相比于 Redis 2.6 的 Redis Sentinel,此版本已经变成生产可用;

3. Redis 3.0

Redis 3.0 在 2015 年正式发布,相比于 Redis 2.8,主要特性如下:

  • Redis Cluster:Redis 提供的官方分布式实现;
  • 全新的 embedded string 对象编码结果,优化了小对象内存访问,在特定的工作负载时,下载速度大幅提高;
  • 优化了 LRU 算法,大幅提供性能;
  • migrate 链接缓存,大幅提供键迁移的速度;
  • migrate 命令新增两个参数:copy 和 replace;
  • client pause 命令,在指定时间内中止处理客户端请求;
  • bitcount 命令性能提高;
  • config set 设置 maxmemory 时候能够设置不一样的单位(以前只能是字节);
  • Redis日志小作调整:日志中会反应当前实例的角色(master 或者 slave);
  • incr命令性能提高;

4. Redis 3.2

Redis 3.2 在 2016 年正式发布,相比于 Redis 3.0,主要特性如下:

  • 添加 GEO 相关功能;
  • SDS 在速度和节省空间上都作了优化;
  • 支持用 upstart 或者 systemd 管理 Redis 进程;
  • 新的 List 编码类型:quicklist;
  • 从节点读取过时数据保证一致性;
  • 添加了 hstrlen 命令;
  • 加强了 debug 命令,支持了更多的参数;
  • Lua 脚本功能加强;
  • 添加了 Lua Debugger;
  • config set 支持更多的配置参数;
  • 优化了 Redis 崩溃后的相关报告;
  • 新的 RDB 格式,可是仍然兼容旧的 RDB;
  • 加速 RDB 的加载速度;
  • spop 命令支持个数参数;
  • cluster nodes 命令获得加速;
  • Jemalloc 更新到 4.0.3 版本;

5. Redis 4.0

Redis 4.0 在 2017 年正式发布,相比于 Redis 3.2,主要特性如下:

  • 提供了模块系统(module),方便第三方开发者拓展 Redis 的功能;
  • PSYNC 2.0:优化了以前版本中,主从节点切换必然引发全量复制的问题;
  • 提供了新的缓存剔除算法:LFU(Last Frequently Used),注意 LFU 和 LRU 算法的不同之处,LRU 的淘汰规则是基于访问时间,而 LFU 是基于访问次数的,并对已有算法进行了优化;
  • 提供了非阻塞 del 和 flushall / flushdb 功能,新添加了unlink命令,这个命令是 del 命令的异步版本,它可以将删除指定键的操作放在后台线程里面执行;
  • 提供了 memory 命令,实现对内存更为全面的监控统计;
  • 提供了交互数据库功能,实现 Redis 内部数据库的数据置换;
  • 提供了 RDB-AOF 混合持久化格式,充分利用了 AOF 和 RDB 各自优点;
  • Redis Cluster 兼容 NAT 和 docker;

6. Redis 5.0

Redis 5.0 在 2018 年正式发布,相比于 Redis 4.0,主要特性如下:

  • 新的流数据类型(stream);
  • 新的 Redis 模块API:定时器、集群和字典 API;
  • RDB 现在可存储 LFU 和 LRU 信息;
  • redis-cli 中的集群管理器从 Ruby(redis-trib.rb)移植到了C 语言代码。执行`redis-cli -- cluster help`命令以了解更多信息;
  • 新的有序集合(sorted set)命令:zpopmin / zpopmax 和 阻塞变体(blocking variants);
  • 升级 Active defragmentation 至 v2 版本;
  • 增强 HyperLogLog 的实现;
  • 更好的内存统计报告;
  • 许多包含子命令的命令现在都有一个 help 子命令;
  • 客户端频繁连接和断开连接时,性能表现更好;
  • 许多错误修复和其他方面的改进;
  • 升级 Jemalloc 至 5.1 版本;
  • 引入 client unblock 和 client id;
  • 新增 lolwut 命令;
  • 在不存在需要保持向后兼容性的地方,弃用 "slave" 术语;
  • 网络层中的差异优化;
  • 增强对 Lua 的支持:将 Lua 脚本更好地传播到 replicas / AOF、Lua 脚本现在可以超时并在副本中进入 -BUSY 状态;
  • 引入动态的 HZ(Dynamic HZ)以平衡空闲 CPU 使用率和响应性;
  • 对 Redis 核心代码进行了重构并在许多方面进行了改进;

7. Redis 6.0

Redis 6.0 在 2020 年正式发布,相比于 Redis 5.0,主要特性如下:

  • Redis 6.0 引入多线程 IO,但多线程部分只是用来处理网络数据的读写和协议解析,执行命令仍然是单线程;
  • 实现了client-side-caching(客户端缓存)功能。放弃了caching slot,而只使用 key names;
  • Redis 6.0 开始在兼容 RESP 2 的基础上,开始支持 RESP 3(RESP,Redis Serialization Protocol 是 Redis 服务端与客户端之间通信的协议);
  • 连接支持 SSL,更加安全;
  • 增强 ACL 权限控制:支持对客户端的权限控制,实现对不同的 key 授予不同的操作权限、新增一个新的ACL 日志命令,允许查看所有违反 ACL 的客户机、访问不应该访问的命令、访问不应该访问的密钥,或者验证尝试失败。这对于调试 ACL 问题非常有用;
  • 提升了RDB日志加载速度;
  • 发布官方的 Redis 集群代理模块 Redis Cluster Proxy;
  • 提供了众多的新模块(modules)API;

8. Redis 7.0

Redis 7.0 在 2022 年正式发布,相比于 Redis 6.0,主要特性如下:

  • 将 AOF 文件的存储方式改为在一个文件夹下存储多个文件;
  • 将持久化文件 RDB 的版本升级为 10,与之前的 RDB 文件版本不再兼容;
  • 在读取老的 RDB 文件格式的时候将 ziplist 转换为 listpack,这种转换发生于两种情况之下:从磁盘读取文件或者从一个主节点进行复制文件的时候;
  • 在 redis.conf 配置文件中,protected-mode 默认更改为 yes,只有当你希望你的客户端在没有
  • 授权的情况下可以连接到 Redis server 的时候可以将 protected-mode 设置为 no;
  • 在 ACL 中,pub / sub channel 默认是被阻塞的;
  • 在从节点中,TTL 的时间标识的是绝对时间,不再是相对时间,从而保证了过期数据被及时删除;
  • 不再支持 gopher 协议;
  • 当在配置文件中设置 replica-serve-stale-data=no,当主节点不再提供服务时,ping 命令得不到返回值;

学习打卡🥳!!!

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

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

相关文章

虚拟机Linux Red Hat 7.9 Docker部署.Net 7 Zr.Admin项目(后端)

0、环境信息 应用部署在虚拟机里的docker,里面的应用访问宿主主机的MySQL 1、开启MySQL远程访问 使用非安装版MySQL参考Windows 使用 非安装版MySQL 8 为了避免出现 Host is not allowed to connect to this MySQL server 使用root用户登录 cmd进入到MySQL的bi…

UE小白学习日记

Level UE中的Level(关卡)和Unity中的Scene(场景)在概念和用途上非常相似,都是用来组织和管理3D环境的基本单位。让我为您详细对比一下: 相似之处: 它们都是游戏世界的容器,可以包含游戏对象、光照、地形等元素都支持场景/关卡的切换和加载都可以用来划分游戏内容,比如不同关…

cmake - build MS STL project

文章目录 cmake - build MS STL project概述笔记END cmake - build MS STL project 概述 MS在github上开源了VS IDE 用的STL实现。 想看看微软的测试用例中怎么用STL. 想先用CMake编译一个MS STL发布版出来。 笔记 CMake需要3.30以上, 拟采用 cmake-3.30.6-windows-x86_64.…

微信小程序之历史上的今天

微信小程序之历史上的今天 需求描述 今天我们再来做一个小程序,主要是搜索历史上的今天发生了哪些大事,结果如下 当天的历史事件或者根据事件选择的历史事件的列表: 点击某个详细的历史事件以后看到详细信息: API申请和小程序…

错误修改系列---基于RNN模型的心脏病预测(pytorch实现)

前言 前几天发布了pytorch实现,TensorFlow实现为:基于RNN模型的心脏病预测(tensorflow实现),但是一处繁琐地方 一处错误,这篇文章进行修改,修改效果还是好了不少;源文章为:基于RNN模型的心脏病…

vue.js+vite搭建一个简单的新春祈福活动网站

vue.jsvite搭建一个简单的新春祈福活动网站&#xff01;使用canvas技术&#xff0c;绘制视觉特效。 功能有&#xff1a;燃放烟花&#xff0c;和撞钟祈福。祈福撞钟我设计了是按钮事件&#xff0c;播放一个mp4动画&#xff0c;配上播放一段撞钟的生效文件mp3. <template>&…

有机物谱图信息的速查技巧有哪些?

谱图信息是化学家解读分子世界的“语言”&#xff0c;它们在化学研究的各个领域都发挥着不可或缺的作用。它们是理解和确定分子结构的关键&#xff0c;对化学家来说极为重要&#xff0c;每一种谱学技术都提供了不同的视角来观察分子&#xff0c;从而揭示其独特的化学和物理特性…

视频转码对画质有影响吗?视频融合平台EasyCVR支持哪些转码格式?

视频转码过程是将视频文件从一种编码格式转换为另一种格式的过程&#xff0c;这一过程在现代数字媒体中扮演着至关重要的角色。众所周知&#xff0c;视频转码不仅仅是简单的格式转换&#xff0c;它涉及多个关键参数的改变&#xff0c;例如视频编码格式、比特率、分辨率以及帧率…

微信小程序防止重复点击事件

直接写在app.wpy里面&#xff0c;全局可以调用 // 防止重复点击事件preventActive(fn) {const self this;if (this.globalData.PageActive) {this.globalData.PageActive false;if (fn) fn();setTimeout(() > {self.globalData.PageActive true;}, 3000); //设置该时间内…

STM32-WWDG/IWDG看门狗

WWDG/IWDG一旦开启不能关闭&#xff0c;可通过选项字节在上电时启动硬件看门狗&#xff0c;看门狗计数只能写入不能读取。看门狗启用时&#xff0c;T6bit必须置1&#xff0c;防止立即重置。 一、原理 独立看门狗-超时复位 窗口看门狗-喂狗&#xff08;重置计数器&#xff0c;…

C++初阶—CC++内存管理

第一章&#xff1a;C/C内存分布 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(si…

排序的本质、数据类型及算法选择

排序的本质、数据类型及算法选择 一、排序的本质二、排序的数据类型三、排序算法的选择依据 前两天老金写了篇 “十大排序简介”&#xff0c;有点意犹未尽&#xff0c;这一回老金想把排序连根拔起&#xff0c;从排序的本质说道说道。 一、排序的本质 从字面上理解&#xff0c…

arcgisPro加载天地图(CGCS2000)影像

1、注册天地图账号&#xff1b; 2、申请key&#xff1b; 3、添加WMTS服务器。 这里已经办好了前两步&#xff0c;下面详细介绍最后一步。 添加WMTS服务器。 在天地图网站&#xff0c;找到如下页面&#xff0c; 复制网址&#xff0c;如&#xff1a;http://t0.tianditu.gov.cn…

【测试】持续集成CI/CD

近期更新完毕&#xff0c;建议关注收藏点赞&#xff5e; 目录 概括gitJenkinspostman集成jenkins代码集成jenkins 概括 CI/CD stands for Continuous Integration and Continuous Deployment 定义 团队成果持续集成到公共平台。一天可以集成1次or多次 本地代码管理 git 远程代…

python基础和redis

1. Map函数 2. filter函数 numbers generate_numbers() filtered_numbers filter(lambda x: x % 2 0, numbers) for _ in range(5):print(next(filtered_numbers)) # 输出: 0 2 4 6 83. filter map 和 reduce 4. picking and unpicking 5. python 没有函数的重载&#xff0…

【再谈设计模式】模板方法模式 - 算法骨架的构建者

一、引言 在软件工程、软件开发过程中&#xff0c;我们经常会遇到一些算法或者业务逻辑具有固定的流程步骤&#xff0c;但其中个别步骤的实现可能会因具体情况而有所不同的情况。模板方法设计模式&#xff08;Template Method Design Pattern&#xff09;就为解决这类问题提供了…

安卓app抓包总结(精)

前言 这里简单记录一下相关抓包工具证书的安装 burp证书安装 安装证书到移动设备(安卓7以后必须上传到设备系统根证书上) 导出证书 openssl x509 -inform DER -in cacert.der -out cacert.pem 转换格式 openssl x509 -inform PEM -subject_hash_old -in cacert.pem …

【pycharm发现找不到python打包工具,且无法下载】

发现找不到python打包工具,且无法下载 解决方法&#xff1a; 第一步&#xff1a;安装distutils&#xff0c;在CMD命令行输入&#xff1a; python -m ensurepip --default-pip第二步&#xff1a;检查和安装setuptools和wheel&#xff1a; python -m pip install --upgrade …

2025年VGC大众汽车科技社招入职测评综合能力英语口语SHL历年真题汇总、考情分析

早在1978年&#xff0c;大众汽车集团就开始了与中国的联系。1984年&#xff0c;集团在华的第一家合资企业—上汽大众汽车有限公司奠基成立&#xff1b;1991年&#xff0c;一汽-大众汽车有限公司成立&#xff1b;2017年&#xff0c;大众汽车&#xff08;安徽&#xff09;有限公司…

【NLP 18、新词发现和TF·IDF】

目录 一、新词发现 1.新词发现的衡量标准 ① 内部稳固 ② 外部多变 2.示例 ① 初始化类 NewWordDetect ② 加载语料信息&#xff0c;并进行统计 ③ 统计指定长度的词频及其左右邻居字符词频 ④ 计算熵 ⑤ 计算左右熵 ​编辑 ⑥ 统计词长总数 ⑦ 计算互信息 ⑧ 计算每个词…