Redis - 1 ( 7000 字 Redis 入门级教程 )
一: Redis
1.1 Redis 简介
Redis 是一种基于键值对(key-value)的 NoSQL 数据库,与其他键值对数据库不同,Redis 的值可以是多种数据结构和算法的组合,如字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(zset)、位图(Bitmaps)、HyperLogLog 和地理信息定位(GEO)等,因此能够满足多种应用场景。Redis 将所有数据存储在内存中,具备极高的读写性能,同时通过快照和日志的方式将数据持久化到硬盘上,保证在断电或机器故障等情况下数据不会丢失。此外,Redis 还提供了键过期、发布订阅、事务、流水线、Lua 脚本等功能,灵活强大。在合适的场景中,Redis 如同一把功能丰富的瑞士军刀,发挥出强大的作用。
1.2 Redis 的特性
1.2.1 速度快
正常情况下 Redis 执行命令的速度非常快,根据官方数据,读写性能可以达到每秒 10 万次。当然,这也与机器性能有关,但这里暂不讨论硬件差异,仅从以下四个方面分析 Redis 高速性能的原因:
原因 | 描述 |
---|---|
数据存储在内存中 | Redis 的所有数据都存储在内存中,根据 Google 2009 年给出的各层级硬件执行速度表明,内存的高访问速度是 Redis 快速性能的主要原因。 |
使用 C 语言实现 | Redis 使用 C 语言编写,C 语言与操作系统的交互更紧密,程序执行速度相对更快。 |
单线程架构 | Redis 使用单线程架构,避免了多线程可能导致的竞争问题,从而提高了执行效率。6.0 版本引入了多线程机制,但仅用于处理网络和 IO,不涉及命令执行,命令仍采用单线程模式。 |
精细优化的源代码 | Redis 源代码经过精心打磨,既追求性能又兼顾优雅,被评价为少有的性能与设计俱佳的开源代码。 |
1.2.2 基于键值对的数据结构服务器
几乎所有编程语言都提供类似字典的数据结构,例如 C++ 的 map、Java 的 map、Python 的 dict 等,这种以键值对方式组织数据的方式在开发中非常常见。而 Redis 不同于普通的键值对数据库,除了支持字符串作为值,还支持多种复杂的数据结构,这不仅方便应对多种应用场景,还能显著提高开发效率。Redis 的全称是 Remote Dictionary Server,主要提供五种数据结构:字符串(string)、哈希(hash)、列表(list)、集合(set)和有序集合(ordered set/zset)。此外,在字符串基础上,衍生出了位图(Bitmaps)和 HyperLogLog 等特殊数据结构,并在 Redis 3.2 版本中增加了 GEO(地理信息定位)功能,以支持 LBS(基于位置服务)的开发。在这些强大数据结构的帮助下,开发者可以构建出更多“有趣”和实用的应用。
1.2.3 丰富的功能
除了 5 种数据结构,Redis 还提供了许多额外的功能:
功能 | 描述 |
---|---|
键过期功能 | 提供键的过期机制,可用于实现缓存功能。 |
发布订阅功能 | 支持发布订阅机制,可以用来构建消息系统。 |
Lua 脚本支持 | 支持 Lua 脚本功能,可以利用 Lua 创造出新的 Redis 命令,增强灵活性。 |
简单事务支持 | 提供简单的事务功能,可以在一定程度上保证事务特性,支持多命令的原子性操作。 |
流水线(Pipeline)功能 | 客户端可以将一批命令一次性发送到 Redis,减少网络开销,提高执行效率。 |
1.2.4 简单稳定
Redis 的简单性主要体现在以下三个方面:首先,Redis 的源码非常精简,早期版本只有约 2 万行代码,3.0 版本后由于增加了集群功能,代码量也仅增至约 5 万行,相较于许多 NoSQL 数据库,代码量要少得多,这使得开发和运维人员完全可以深入理解其源码。其次,Redis 使用单线程模型,这不仅让服务端的处理模型更简单,同时也简化了客户端开发。最后,Redis 不依赖操作系统的外部类库(例如 Memcached 依赖 libevent),而是自行实现了事件处理的相关功能。尽管 Redis 设计简单,但其稳定性极高,在大量使用场景中,因 Redis 自身 BUG 导致宕机的情况非常少见。
1.2.5 客户端语言多
Redis 提供了简单的 TCP 通信协议,使得许多编程语言可以轻松接入。同时,Redis 因受到社区和各大公司的广泛认可,支持它的客户端语言也非常丰富,几乎涵盖了所有主流编程语言,如 C、C++、Java、PHP、Python、NodeJS 等。后续将对 Redis 的客户端使用进行详细说明。
1.2.6 持久化
通常情况下,将数据存放在内存中存在一定风险,一旦断电或机器故障,重要数据可能会丢失。为了解决这一问题,Redis 提供了两种持久化方式:RDB 和 AOF。这两种策略可以将内存中的数据保存到硬盘,从而保障数据的持久性。后续将对 Redis 的持久化机制进行详细说明。
1.2.7 主从复制
Redis 提供了复制功能,可以创建多个数据完全相同的 Redis 副本(Replica),这也是实现分布式 Redis 的基础。后续将对 Redis 的复制功能进行详细演示。
1.2.8 高可用和分布式
Redis 提供了高可用的实现方式,如 Redis 哨兵(Redis Sentinel),用于故障检测和自动故障转移。同时,Redis 还支持 Redis 集群(Redis Cluster),实现真正的分布式架构,具备高可用性、读写扩展性和容量扩展能力。
1.3 Redis 的应用场景
应用场景 | 描述 |
---|---|
缓存(Cache) | 缓存机制广泛应用于大型网站,可加速数据访问速度并降低后端数据源压力。Redis 提供键值过期时间设置、灵活的内存控制和淘汰策略,为网站稳定性保驾护航。 |
排行榜系统 | Redis 提供列表和有序集合结构,支持按热度、发布时间或复杂维度构建排行榜系统,是开发各种排行榜功能的理想选择。 |
计数器应用 | 计数器在网站中至关重要,如视频播放数或电商浏览数。Redis 天然支持计数功能,性能卓越,可轻松应对高并发场景,是计数器系统的重要选择。 |
社交网络 | Redis 支持社交网站的关键功能,如赞/踩、粉丝、共同好友/喜好、推送和下拉刷新。其灵活的数据结构可轻松实现这些功能,并高效处理大规模访问量。 |
消息队列系统 | 消息队列是大型网站的基础组件,具有业务解耦和削峰特性。Redis 提供发布订阅和阻塞队列功能,虽然不如专业消息队列强大,但足以满足一般消息队列需求。 |
1.4 Redis 重要文件及作用
Redis 的安装过程就跳过了,我们直接讲 Redis 中重要文件的作用
程序/工具 | 描述 |
---|---|
redis-server | Redis 服务器程序,是 Redis 的核心运行程序。 |
redis-check-aof | 修复 AOF 文件的工具,是 redis-server 的软链接。 |
redis-check-rdb | 修复 RDB 文件的工具,是 redis-server 的软链接。 |
redis-sentinel | Redis 哨兵程序,用于监控 Redis 集群的高可用性,是 redis-server 的软链接。 |
redis-cli | Redis 命令行客户端程序,常用于学习和测试 Redis 操作。 |
redis-benchmark | 用于对 Redis 性能进行基准测试的工具。 |
redis-shutdown | 专用于停止 Redis 的脚本程序。 |
文件/目录 | 描述 |
---|---|
/etc/redis.conf | Redis 服务器的配置文件,用于定义 Redis 的运行参数和行为。 |
/etc/redis-sentinel.conf | Redis Sentinel 的配置文件,用于配置 Redis 哨兵程序的运行参数和行为。 |
/var/lib/redis/ | Redis 持久化文件(RDB 和 AOF)的默认存储目录,持久化时会在该目录下生成相关文件。 |
/var/log/redis/ | Redis 日志文件的默认存储目录。运行期间生成的日志按天分割,过期日志会以 gzip 格式压缩保存,方便查看运行情况。 |
1.5 Redis 命令行客户端
现在我们已经启动了 Redis 服务,接下来介绍如何使用 redis-cli 来连接和操作 Redis 服务。redis-cli 提供了两种方式连接 Redis 服务器,具体如下。
连接方式 | 描述 |
---|---|
交互式方式 | 使用 redis-cli -h {host} -p {port} 连接到 Redis 服务,连接后可以在交互式环境中执行所有操作,无需重复输入 redis-cli。 |
命令方式 | 使用 redis-cli -h {host} -p {port} {command} 直接执行命令并获取返回结果,无需进入交互式环境。 |
- 交互方式:
[root@host ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set key hello
OK
127.0.0.1:6379> get key
"hello"
- 命令方式:
[root@host ~]# redis-cli -h 127.0.0.1 -p 6379 ping
PONG
[root@host ~]# redis-cli -h 127.0.0.1 -p 6379 set key hello
OK
[root@host ~]# redis-cli -h 127.0.0.1 -p 6379 get key
"hello"
二: 预备知识
2.1 KEYS pattern
KEYS pattern 返回匹配指定 pattern 的所有键。
通配样式 | 描述 | 解释 |
---|---|---|
h?llo | 匹配 hello、hallo 和 hxllo | ? 表示匹配任意一个字符 |
h*llo | 匹配 hllo 和 heeeello | * 表示匹配零个或多个任意字符 |
h[ae]llo | 匹配 hello 和 hallo,但不匹配 hillo | [ae] 表示匹配 a 或 e |
h[^e]llo | 匹配 hallo、hbllo 等,但不匹配 hello | [^e] 表示匹配除 e 之外的任意一个字符 |
h[a-b]llo | 匹配 hallo 和 hbllo | [a-b] 表示匹配 a 到 b 范围内的任意一个字符 |
MSET firstname Jack lastname Stuntman age 35
"OK"KEYS *name*
1) "firstname"
2) "lastname"KEYS a??
1) "age"KEYS *
1) "age"
2) "firstname"
3) "lastname"
2.2 EXISTS
EXISTS 用于判断一个或多个 key 是否存在,返回存在的 key 的数量。
redis> SET key1 "Hello"
"OK"redis> EXISTS key1
(integer) 1redis> EXISTS nosuchkey
(integer) 0redis> SET key2 "World"
"OK"redis> EXISTS key1 key2 nosuchkey
(integer) 2
2.3 DEL
DEL 命令用于删除一个或多个 key,返回值为成功删除的 key 的数量。
redis> SET key1 "Hello"
"OK"redis> SET key2 "World"
"OK"redis> DEL key1 key2 key3
(integer) 2
2.4 EXPIRE
EXPIRE 命令为指定的 key 添加秒级的过期时间。如果设置成功返回值为 1;如果设置失败返回值为 0,因为 key 可能不存在,所以导致设置失败。
redis> SET mykey "Hello"
"OK"redis> EXPIRE mykey 10
(integer) 1redis> TTL mykey
(integer) 10
2.5 TTL
TTL 用于获取指定 key 以秒为单位的剩余过期时间。返回值为剩余的过期时间;如果返回 -1 表示该 key 没有设置过期时间,返回 -2 表示该 key 不存在。
redis> SET mykey "Hello"
"OK"redis> EXPIRE mykey 10
(integer) 1redis> TTL mykey
(integer) 10
2.6 TYPE
TYPE 命令用于返回指定 key 的数据类型,可能的返回值包括:none(key 不存在)、string(字符串)、list(列表)、set(集合)、zset(有序集合)、hash(哈希)和 stream(流)。
redis> SET key1 "value"
"OK"redis> LPUSH key2 "value"
(integer) 1redis> SADD key3 "value"
(integer) 1redis> TYPE key1
"string"redis> TYPE key2
"list"redis> TYPE key3
"set"
2.7 Redis 数据结构和内部编码
Redis 提供多种数据结构,包括 string(字符串)、list(列表)、hash(哈希)、set(集合)和 zset(有序集合),这些是对外暴露的基本数据类型。实际上,Redis 针对每种数据结构都有多种底层内部编码实现,并会根据具体场景自动选择最适合的内部编码,以优化性能和存储效率。
数据结构 | 内部编码 |
---|---|
string | raw, int, embstr |
hash | hashtable, ziplist |
list | linkedlist, ziplist |
set | hashtable, intset |
zset | skiplist, ziplist |
内部编码 | 作用 |
---|---|
raw | 用于存储较大的字符串,直接以原始格式保存,适合处理大数据量的字符串值。 |
int | 用于存储整型数据,将字符串转换为整数存储,减少内存消耗,提高操作效率。 |
embstr | 用于存储小的、不可变的字符串,提供高效的内存分配和释放,适合短字符串的快速存取操作。 |
hashtable | 用于存储哈希表,适用于包含较多键值对或键值对较大的情况,支持快速查找、插入和删除操作。 |
ziplist | 用于存储紧凑型的数据,适用于元素数量较少且每个元素较小的情况,通过连续内存存储节省空间,但在元素较多时性能会下降。 |
linkedlist | 适用于列表元素数量较多或每个元素较大的情况,通过指针连接元素,支持快速插入和删除,适合处理大规模数据。 |
intset | 用于存储小范围的整数集合,元素较少时内存占用低,适合集合元素为整数且数量较少的场景。 |
skiplist | 用于存储有序集合的数据,支持快速范围查找和排序操作,适合处理大范围的有序数据,如排名或分值范围查询。 |
quicklist | 是 ziplist 和 linkedlist 的结合体,既保留了 ziplist 的内存紧凑性,又支持 linkedlist 的快速插入删除操作,适合复杂列表场景。 |
可以看到每种数据结构通常都有两种或以上的内部编码实现,例如 list 数据结构包含 linkedlist 和 ziplist 两种编码。同时,一些内部编码(如 ziplist)可以被多种数据结构共用作为其内部实现。具体的内部编码可以通过执行 object encoding 命令进行查询。
127.0.0.1:6379> set hello world
OK127.0.0.1:6379> lpush mylist a b c
(integer) 3127.0.0.1:6379> object encoding hello
"embstr"127.0.0.1:6379> object encoding mylist
"quicklist"
可以看出,键 hello 的值采用了 embstr 编码,而键 mylist 的值则使用了 ziplist 编码。Redis 的这种设计带来了两个重要优势:
优势 | 描述 |
---|---|
可改进内部编码 | 内部编码的优化不会影响外部数据结构和命令。比如 Redis 3.2 引入了 quicklist,将 ziplist 和 linkedlist 的优点结合,为列表类型提供了更优的内部编码实现,用户几乎无感知。 |
场景化优化 | 不同的内部编码在不同场景下发挥优势。比如 ziplist 节省内存,但在列表元素较多时性能下降,此时 Redis 会根据配置自动将编码切换为 linkedlist,用户无需干预,完全无感知。 |
2.8 单线程架构
Redis 采用单线程架构来实现高性能的内存数据库服务。下面通过多个客户端命令调用的示例,说明 Redis 单线程的命令处理机制;接着分析其单线程模型为何能够实现如此高的性能;最后解释为什么理解单线程模型是使用和运维 Redis 的关键。首先我们开启三个 redis-cli 客户端同时执行命令
- 客⼾端 1 设置⼀个字符串键值对:
127.0.0.1:6379> set hello world
- 客⼾端 2 对 counter 做⾃增操作:
127.0.0.1:6379> incr counter
- 客⼾端 2 对 counter 做⾃增操作:
127.0.0.1:6379> incr counter
Redis 客户端发送的命令经历了发送命令、执行命令、返回结果三个阶段,其中重点在于命令的执行过程。Redis 的单线程模型指的是:尽管从宏观上看,多个客户端似乎同时向 Redis 发送命令,但从微观角度来看,这些命令是以线性方式逐条执行的。虽然命令的执行顺序可能不确定,但一定不会有两条命令同时被执行。可以将 Redis 想象成只有一个服务窗口,多个客户端按照到达的先后顺序排队接受服务。例如,两条 incr 命令无论执行顺序如何,结果一定是正确的,不会发生并发问题,这就是 Redis 单线程执行模型的核心特点。
通常情况下,单线程的处理能力往往不如多线程。例如,运输 10,000 公斤货物,如果每辆车一次只能运载 200 公斤,需要 50 次才能完成;但如果有 50 辆车合理分工,只需一次即可完成任务。然而,Redis 使用单线程模型仍然能够实现每秒万级别的处理能力,这主要归结于以下三点原因。
原因 | 描述 |
---|---|
纯内存访问 | Redis 将所有数据存储在内存中,内存的响应时长大约为 100 纳秒,这是 Redis 达到每秒万级别访问的重要基础。 |
非阻塞 IO | Redis 使用 epoll 作为 I/O 多路复用技术,并通过自身的事件处理模型将连接、读写、关闭等操作转换为事件,避免在网络 I/O 上浪费时间。 |
单线程避免线程切换和竞态 | 单线程简化了数据结构和算法的实现,使程序模型更加简单;同时避免了多线程环境下因线程竞争共享数据而导致的切换和等待消耗。 |
虽然单线程为 Redis 带来了许多优势,但也存在一个致命的问题:对单个命令的执行时间有严格要求。如果某个命令执行时间过长,其他命令将被阻塞在等待队列中,无法及时响应,从而导致客户端阻塞。这对 Redis 这样的高性能服务来说是非常严重的。因此,Redis 更适用于需要快速执行的场景。
相关文章:
Redis - 1 ( 7000 字 Redis 入门级教程 )
一: Redis 1.1 Redis 简介 Redis 是一种基于键值对(key-value)的 NoSQL 数据库,与其他键值对数据库不同,Redis 的值可以是多种数据结构和算法的组合,如字符串(string)、哈希&#…...
[羊城杯 2024]不一样的数据库_2
题目描述: 压缩包6 (1).zip需要解压密码: 尝试用ARCHPR工具爆破一下: (字典可自行在github上查找) 解压密码为:753951 解压得到13.png和Kee.kdbx文件: 二维码图片看上去只缺了正常的三个角&…...
租赁系统的数字化转型与高效管理新模式分析
内容概要 在当今瞬息万变的市场环境中,租赁系统的数字化转型显得尤为重要。信息技术的迅猛发展不仅改变了我们的生活方式,也迫使企业重新审视其运营模式。为了顺应这一潮流,租赁系统亟需通过高效管理新模式来提升运营效率,从而保…...
Selenium+Java(21):Jenkins发送邮件报错Not sent to the following valid addresses解决方案
问题现象 小月妹妹近期在做RobotFrameWork自动化测试,并且使用Jenkins发送测试邮件的时候,发现报错Not sent to the following valid addresses,明明各个配置项看起来都没有问题,但是一到邮件发送环节,就是发送不出去,而且还不提示太多有用的信息,急的妹妹脸都红了,于…...
【每日学点鸿蒙知识】文字识别、快捷登录、输入法按钮监听、IDE自动换行、资产访问等
【每日学点鸿蒙知识】24.09.07 1、API使用: hms.ai.ocr.textRecognition(文字识别)? 需要接入API文档https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/core-vision-text-recognition-api-V5中的文字识别…...
LabVIEW化工实验室设备故障实时监测
化工实验室中,各类设备的运行状态直接影响实验的精度与安全性。特别是重要分析仪器的突发故障,可能导致实验中断或数据失效。为了实现设备运行状态的实时监控与故障快速响应,本文提出了一套基于LabVIEW的解决方案,通过多参数采集、…...
小程序学习05——uniapp路由和菜单配置
目录 一、路由 二、如何管理页面及路由? 三、pages.json 页面路由 四、 tabBar 一、路由 路由:在前端,往往指代用不同地址请求不同页面,决定了用户如何在应用的不同页面之间导航。 菜单:对于每个路径(…...
漏洞分析 | Apache Struts文件上传漏洞(CVE-2024-53677)
漏洞概述 Apache Struts是美国阿帕奇(Apache)基金会的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架。 近期,网宿安全演武实验室监测到Apache Struts在特定条件下,存在文件上传漏洞(网宿评…...
【VBA】EXCEL - VBA 遍历工作表的 5 种方法,以及注意事项
目录 1. 遍历单列数据并赋值 2. 遍历整个工作表的数据区域并赋值 3. 遍历指定范围的数据并赋值 4. 遍历多列数据并赋值 5. 遍历所有工作表中的数据并赋值 注意事项: 1. 遍历单列数据并赋值 Sub UpdateColumnData()Dim ws As WorksheetSet ws ThisWorkbook.S…...
CSS浮动
浮动 可以让块级元素待在一行,紧挨着,没有空格 float:left 浮动的元素会脱离正常的文档系统,像浮云一样飘起来浮动元素后面的正常元素会自动补位浮动元素会被父元素的宽高所束缚,所以不算完全的脱离文档流当浮动元素…...
gitlab 还原合并请求
事情是这样的: 菜鸡从 test 分支切了个名为 pref-art 的分支出来,发布后一机灵,发现错了,于是在本地用 git branch -d pref-art 将该分支删掉了。之后切到了 prod 分支,再切出了一个相同名称的 pref-art 分支出来&…...
【GPT】Coze使用开放平台接口-【8】创建应用
coze 可以用来创建简单的应用啦,这样测试起来会比原本的 Agent 更加方便,我们来看看如何创建一个“语音Real不Real”的应用。这个应用就是来检测语音是否是伪造的,克隆或者是合成的。先看下原本 Agent 的样子: 深度伪造语音检测&a…...
海外盲盒系统开发,助力企业全球化发展
近几年来,在海外市场中,盲盒已经成为了一种新的时尚单品,深受东南亚等海外消费者的喜爱。同时,泡泡玛特在海外的成功也为国内企业提供了发展机遇,盲盒出海具有广阔的发展前景! 随着信息技术的快速发展&a…...
pytorch 梯度判断函数介绍
PyTorch 提供了一些函数用于判断当前的梯度计算状态以及张量是否需要梯度。这些函数帮助开发者在训练、推理和调试过程中了解和控制梯度计算行为。 PyTorch 梯度判断函数 1. torch.is_grad_enabled() 功能: 判断当前是否启用了全局的梯度计算状态。返回值: 布尔值,True 表…...
每日一题 367. 有效的完全平方数
367. 有效的完全平方数 低效率法 class Solution { public:bool isPerfectSquare(int num) {if(num 1){return true;}long num1 num;for(int i1;i< num/2;i){if((long)(i)*i num){return true;}}return false;} };二分法 class Solution { public:bool isPerfectSquar…...
图像转换 VM与其他格式互转
目录 前言 图像转换 1.相机取流转VM对应类型图像格式 1.1 相机采图转流程输入和Group输入(ImageBaseData_V2) 1.2 相机采图转图像源SDK输入(ImageBaseData) 1.3 相机采图转模块输入(InputImageData) 1.4 相机采图转算子输入(CmvdImage) 2.Bitmap取图与VM对应图像格式互…...
streamlit、shiny、gradio、fastapi四个web APP平台体验
streamlit、shiny、gradio、fastapi四个web APP平台体验 经常被问的问题就是:web APP平台哪个好?该用哪个?刚开始只有用streamlit和shiny,最近体验了一下gradio和fastapi,今天根据自己的体会尝试着回答一下。 使用R语…...
BootstrapTable处理表格
需求背景 历史项目使用 BootstrapTable 作为前端组件 应客户需要调整: 冻结前四列对于大文本文字显示部分内容,鼠标悬浮显示完整内容 冻结列 1、引入相关CSS,JS CSS <link rel"stylesheet" href"/css/bootstrap.min.css"> …...
家政预约小程序04活动管理表结构设计
目录 1 创建活动表2 创建活动规则表3 创建活动参与记录表总结 为了满足我们日常的营销,我们通常需要搞一些活动,比如满减、折扣、团购等。启动活动后,会在首页进行显示,当用户访问小程序的时候,就可以参与活动…...
WPF使用OpenCvSharp4
WPF使用OpenCvSharp4 创建项目安装OpenCvSharp4 创建项目 安装OpenCvSharp4 在解决方案资源管理器中,右键单击项目名称,选择“管理 NuGet 包”。搜索并安装以下包: OpenCvSharp4OpenCvSharp4.ExtensionsOpenCvSharp4.runtime.winSystem.Man…...
STM32-笔记23-超声波传感器HC-SR04
一、简介 HC-SR04 工作参数: • 探测距离:2~600cm • 探测精度:0.1cm1% • 感应角度:<15 • 输出方式:GPIO • 工作电压:DC 3~5.5V • 工作电流:5.3mA • 工作温度:-40~85℃ 怎么…...
4G报警器WT2003H-16S低功耗语音芯片方案开发-实时音频上传
一、引言 在当今社会,安全问题始终是人们关注的重中之重。无论是家庭、企业还是公共场所,都需要一套可靠的安全防护系统来保障人员和财产的安全。随着科技的飞速发展,4G 报警器应运而生,为安全防范领域带来了全新的解决方案。…...
机器学习中的欠拟合
当模型不能够准确地表达输入与输出的关系时,就是欠拟合。它在训练集和未见过的数据都会产生高误差率。过度拟合则在训练集表现出低误差率,只有对未见过的数据表现出高误差率。 当模型太过于简单时,它需要更多的训练时间、更多的输入特征、更…...
数据结构之栈和队列
栈的定义: 我们要记住这8个字,先进后出,后进先出 我们对于栈的操作只有两个,进栈和出栈 栈的顺序结构初始化:(和顺序表差不多) 代码实现: 栈的顺序结构进栈: 代码实现…...
【北京迅为】iTOP-4412全能版使用手册-第六十九章 Linux内核裁剪与定制
iTOP-4412全能版采用四核Cortex-A9,主频为1.4GHz-1.6GHz,配备S5M8767 电源管理,集成USB HUB,选用高品质板对板连接器稳定可靠,大厂生产,做工精良。接口一应俱全,开发更简单,搭载全网通4G、支持WIFI、蓝牙、…...
MF248:复制工作表形状到Word并调整多形状位置
我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…...
若依框架之简历pdf文档预览功能
一、前端 (1)安装插件vue-pdf:npm install vue-pdf (2)引入方式:import pdf from "vue-pdf"; (3)components注入方式:components:{pdf} (4&…...
常用的数据库类型都有哪些
在Java开发和信息系统架构中,数据库扮演着存储和管理数据的关键角色。数据库种类繁多,各有特色,适用于不同的应用场景。 1. 关系型数据库(RDBMS): • 关系型数据库是最为人熟知的数据库类型,数据…...
使用apisix+oidc+casdoor配置微服务网关
一、服务架构图 二、安装配置 1. 安装配置apisix (1). 快速启动及验证: curl -sL https://run.api7.ai/apisix/quickstart | sh该命令启动 apisix-quickstart 和 etcd 两个容器,APISIX 使用 etcd 保存和同步配置。APISIX 和 etcd 容器使用 Docker 的 …...
【系统分析师】- 案例 -数据库特训
目录 1、规范化与逆规范化 2、数据库视图 3、数据库索引 4、SQL优化 5、数据库分区 6、分布式数据库 7、NoSql 8、读写分离(主从复制) 9、缓存一致性 10、云数据库 11、主题数据库 12、数据同步 1、规范化与逆规范化 规范化: 优点…...
创建型设计模式、结构型设计模式与行为型设计模式 上下文任务通用方案 设计模式 大全
设计模式(Design Pattern)是一种面向对象编程思想,分为创建型模式、结构型模式与行为型模式三大类,提供在特定上下文中解决常见任务通用方案,旨在让程序(软件)具有更好特点,如降低耦…...
2412git,gitdiff与编码
原文 除了git命令行工具外,还有其他工具或服务可让你查看git历史记录中的更改.最有趣的是那些按拉请的一部分更改的情况,因为这些是你正在审查和批准的更改. 但一个常见的问题是,它们给你展示的可能不是实际改变的内容. 我把讨论限制在我有经验的服务和工具上,即它是git命令…...
什么是 Git Hooks?
在团队开发中,当成员提交代码的描述信息不符合约定提交规范的时候,需要阻止当前的提交,而要实现这个目的,我们就需要先来了解一个概念,叫做 Git hooks,即Git 在执行某个事件之前或之后进行一些其他额外的操…...
Android中加载一张图片占用的内存
在安卓(Android)系统中,加载图片占用内存的大小并不是图片本身的大小,比如一张图片大小为100kb,那当他加载到Android上时其占用的内存大小并不是100kb。 加载图片到内存中占用的内存大小取决于多种因素,包括…...
【竞技宝】LOL:IG新赛季分组被质疑
北京时间2024年12月31日,今天已经2024年的最后一天,在进入一月之后,英雄联盟将迎来全新的2025赛季。而目前新赛季第一阶段的抽签结果已经全部出炉,其中人气最高的IG战队在本次抽签中抽到了“绝世好签”引来了网友们的质疑。 首先介…...
智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之12 方案再探之3:特定于领域的模板 之2 首次尝试和遗留问题解决
本文提要 现在就剩下“体”本身的 约定了--这必然是 自律自省的,或者称为“戒律” --即“体”的自我训导discipline。完整表述为: 严格双相的庄严“相” (<head>侧),完全双性的本质“性”(<boot>侧&…...
超融合时间节点同步
1. 执行以下命令停止相关进程。 l 节点为主机,执行: perl /opt/galax/gms/common/config/restartCnaProcess.pl l 节点为VRM,执行: sh /opt/omm/ha/module/hacom/script/stop_ha.sh 2. 执行以下命令修改节…...
【分布式文件存储系统Minio】2024.12保姆级教程
文章目录 1.介绍1.分布式文件系统2.基本概念 2.环境搭建1.访问网址2.账号密码都是minioadmin3.创建一个桶4.**Docker安装miniomc突破7天限制**1.拉取镜像2.运行容器3.进行配置1.格式2.具体配置 4.查看桶5.给桶开放权限 3.搭建minio模块1.创建一个oss模块1.在sun-common下创建2.…...
pycharm pytorch tensor张量可视化,view as array
Evaluate Expression 调试过程中,需要查看比如attn_weight 张量tensor的值。 方法一:attn_weight.detach().numpy(),view as array 方法二:attn_weight.cpu().numpy(),view as array...
LeetCode 3219.切蛋糕的最小总开销 II:贪心——先切贵的
【LetMeFly】3219.切蛋糕的最小总开销 II:贪心——先切贵的 力扣题目链接:https://leetcode.cn/problems/minimum-cost-for-cutting-cake-ii/ 有一个 m x n 大小的矩形蛋糕,需要切成 1 x 1 的小块。 给你整数 m ,n 和两个数组&…...
【PDF物流单据提取明细】批量PDF提取多个区域内容导出表格或用区域内容对文件改名,批量提取PDF物流单据单号及明细导出表格并改名的技术难点及小节
相关阅读及下载: PDF电子物流单据: 批量PDF提取多个区域局部内容重命名PDF或者将PDF多个局部内容导出表格,具体使用步骤教程和实际应用场景的说明演示https://mp.weixin.qq.com/s/uCvqHAzKglfr40YPO_SyNg?token720634989&langzh_CN扫描…...
Redis到底支不支持事务啊?
大家好,我是锋哥。今天分享关于【Redis到底支不支持事务啊?】面试题。希望对大家有帮助; Redis到底支不支持事务啊? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis 支持事务,但它的事务模型与传统的…...
Druid连接Oracle数据库,连接失效导致SQL无法执行
原始配置: type: com.alibaba.druid.pool.DruidDataSource druid:initial-size: 5max-active: 25min-idle: 5max-wait: 10000testWhileIdle: truetestOnBorrow: falsetestOnReturn: falsetimeBetweenEvictionRunsMillis: 2000minEvictableIdleTimeMillis: 600000ma…...
JVM 及内存管理:掌握 Java 8 的内存模型与垃圾回收机制
Java 虚拟机(JVM)是运行 Java 程序的核心,它负责代码执行和内存管理。Java 8 引入了一些重要的内存模型和垃圾回收机制优化。本文将详细解析 JVM 的内存模型、垃圾回收机制,并配以相关图解,帮助你深刻理解 JVM 的工作原…...
用户界面的UML建模06
4.1 抽象表示层的结构(Abstract Presentation Structure) 如图6 所示,抽象表示层模型具有一个顶层的容器(container),《apm》AbstractForm,其包含了许多组件,《apm》AbstractCompon…...
HTML——41有序列表
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>有序列表</title></head><body><!--有序列表:--><!--1.列表中各个元素在逻辑上有先后顺序,但不存在一定的级别关系-->…...
REDIS1.0
redis的基础知识: NOsql: not only sql 非关系型数据库:主流的数据库以外,基本上都是nosql 非关系型数据库也有库,库是系统自带的,而且也不需要创建,也不能创建,也无需在裤子创建…...
【HarmonyOS之旅】ArkTS语法(二) -> 动态构建UI元素
目录 1 -> Builder 2 -> BuilderParam8 2.1 -> 引入动机 2.2 -> 参数初始化组件 2.3 -> 尾随闭包初始化组件 3 -> Styles 4 -> Extend 5 -> CustomDialog 1 -> Builder 可通过Builder装饰器进行描述,该装饰器可以修饰一个函数&…...
【漫话机器学习系列】028.CP
Mallows’ Cp:标准化公式解析与应用 Mallows’ Cp 是一种常用的模型选择工具,用于在一系列候选模型中权衡拟合度和复杂性,帮助我们选择性能最优的模型。本文将基于其标准化公式展开详细解析,并探讨其应用场景、实现方法、优点与局…...
【SpringBoot教程】搭建SpringBoot项目之编写pom.xml
🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 👏今天毛毛张分享的内容主要是Maven 中 pom 文件🆕,涵盖基本概念、标签属性、配置等内容 文章目录 1.前言🥭2.项目基本…...