[Redis#6] list | 命令 | 应用 | 消息队列 | 微博 Timeline
目录
List 列表
特点
2. 命令
头插和尾插
下标 range 查询
头删和尾删
LINSERT
LLEN
LREM
LTRIM
LSET
阻塞命令
BLPOP
BRPOP
操作 总结
3. 内部编码
ziplist(压缩列表)
linkedlist(链表)
✔️quicklist(快速链表) -> (现行方案)
4.使用场景
1. 消息队列
2. 分频道的消息队列
如何确定是哪个消费者“抢到”了元素?
1. 阻塞命令机制
2. 客户端处理逻辑
3. 微博 Timeline
示例
实现栈和队列:
List 列表
- 列表类型用于 存储多个有序的字符串,如
a
、b
、c
、d
、e
五个元素从左到右组成一个有序列表,每个字符串称为元素,最多可存储 (2^{32}-1) 个元素。 - 列表支持 两端插入(
push
)、弹出(pop
)、获取指定范围或索引的元素等操作 - 列表可充当栈和队列的角色,在实际开发中应用广泛。
特点
- 有序性:通过 索引 下标 可获取特定或范围内的元素。
- 支持 前后 插入删除 的设计
- 获取与删除 区别:如
lrem 1 b
删除列表中第一个b
元素,而lindex 4
仅获取元素,不影响列表长度。 - 元素可重复:列表允许包含重复元素
2. 命令
头插和尾插
LPUSH:
- 从左侧插入元素,时间复杂度 (O(1)) 或 (O(N))。
- 注意:是按照键入在命令中的顺序,从左向右将命令中的元素插入到
list
中的
-
- 例如:
LPUSH key 1 2 3 4
,那么最后list
呈现的结果为:4 3 2 1
,采取的为头插
- 例如:
LPUSHX:
- 若键存在,则从左侧插入元素,否则返回。
RPUSH:
- 从右侧插入元素,时间复杂度 (O(1)) 或 (O(N))。
RPUSHX:
- 若键存在,则从右侧插入元素,否则返回。
下标 range 查询
LRANGE:
- 获取指定范围的元素,时间复杂度 (O(N))。
- 注意:Redis会尽可能地获取到给定区间的元素,如果给定区间非法,比如超出下标,就会尽可能地获取到对应的内容
-
- Redis对于下标越界地处理方式类似于Python的切片操作
此处list
有一个命名上的注意点:
lpush
:left push
,从左侧插入,即头插rpush
:right push
,从右侧插入,即尾插lrange
:list range
,输出列表指定范围
同样是l
开头,有时候表示list
,有时候表示left
,这个要注意。
另外的:
lpushx
:left push exists
,存在时插入
此处的x
是选用了exsis
中的一个字母,表示只有key
存在才插入。
同样插入1 2 3 4 5
,顺序与之前lpush
插入刚好是反着的,因为rpush
是尾插。
头删和尾删
LPOP:
- 从左侧弹出元素,时间复杂度 (O(1))。
RPOP:
- 从右侧弹出元素,时间复杂度 (O(1))。
注意:可一次删除多个
LINSERT
- 功能:在指定位置插入元素。
- 语法:
linsert key before|after pivot element
- 说明:在元素
pivot
的前面或者后面插入element
元素。如果有多个pivot
元素,只在第一个pivot
的位置插入。 - 示例:
LLEN
- 功能:获取列表的长度。
- 语法:
llen key
- 说明:返回列表的长度,如果列表不存在则返回 0。
- 示例:假设列表为
a b c
,执行llen mylist
返回 3。
LREM
- 功能:删除元素。
- 语法:
lrem key count element
- 说明:删除
count
个element
元素。count
的取值有三种:
-
count > 0
:从左往右删除。count < 0
:从右往左删除。count = 0
:删除所有元素。
- 示例:
如果传入-2 hello
,此时从右往左删除,只有第一个hello
被保留。
LTRIM
- 功能:指定范围内元素保留,剩余的元素删除。
- 语法:
ltrim key start stop
- 说明:只保留
[start, stop]
闭区间内部的元素,其余的元素全部删除。 - 示例:
LSET
- 功能:修改指定下标的元素。
- 语法:
lset key index element
- 说明:将下标为
index
的元素改为element
,支持负数下标。如果下标越界,会返回一个报错。 - 示例:
第一次修改,将下标为3
的元素修改为666
。第二次插入,操作下标为100
的元素,由于不存在,报错了。
阻塞命令
- 先前的所有命令均为非阻塞命令,可以直接操作并立即得到结果。
- 然而,Redis 的列表类型还提供了一些具有 阻塞性质 的命令
在多线程中,有一个生产消费模型,其可以基于阻塞队列实现,主要满足以下两个性质:
- 如果阻塞队列满了,那么生产者阻塞
- 如果阻塞队列空了,那么消费者阻塞
在Redis
中,list
只考虑队列为空的情况,也就是消费者。用户读取数据时,队列为空,那么用户陷入阻塞,直到队列有数据。
BLPOP
- 功能:读取并删除列表头部元素,如果列表为空则用户陷入阻塞。
- 语法:
blpop key [key ...] timeout
- 返回值:取出的元素或者
nil
说明:
- 可以同时指定多个 key,即多个列表,只要任意一个列表有数据,就返回结果。
- 设置超时时间
timeout
,以秒为单位,超过时间则返回nil
。 - 超时时间设为 0,则一直阻塞,不会超时。
- 阻塞发生在客户端,Redis 会将指令放入后台等待,继续处理其他请求。
示例:
此处启用了两个客户端,左侧客户端blpop
一个空列表,等待20s
,随后陷入阻塞。接着右侧客户端插入一个元素到list9
,随后左侧客户端立刻拿到数据并进行头删
BRPOP
- 功能:读取并删除列表尾部元素,如果列表为空则用户陷入阻塞。
- 语法:
brpop key [key ...] timeout
- 说明:与
blpop
类似,但操作的是列表尾部。
操作 总结
操作类型 | 命令 |
添加 | rpush、lpush、linsert |
查找 | lrange、lindex、llen |
删除 | lpop、rpop、lrem、ltrim |
修改 | lset |
阻塞 | blpop、brpop |
3. 内部编码
ziplist(压缩列表)
- 描述:一种内存紧凑的存储方式,适合存储数量较少且元素较小的列表。
- 条件:(不用记数字,掌握思想~
- 优点:
-
- 内存节省:使用连续的内存块存储数据,减少内存碎片和开销。
- 结构简单:适合小规模数据,尤其在内存资源有限的情况下。
- 缺点:
-
- 操作效率:数据量增加时,读写效率下降,线性查找特性导致操作复杂度较高。
- 扩展性差:不适合大规模数据存储。
linkedlist(链表)
- 描述:当列表类型无法满足
ziplist
条件时,使用linkedlist
作为内部实现。 - 优点:
-
- 头尾的插入删除非常高效。
- 缺点:
-
- 中间部分的插入删除时间复杂度较高。
✔️quicklist(快速链表) -> (现行方案)
- 描述:Redis 4.0 版本之后引入的更高效的列表编码方式,结合了
ziplist
和linkedlist
的优点。 - 结构:
-
- 外层列表仍然是
linkedlist
双链表结构。 - 每个链表节点都是一个
ziplist
,对中间部分的节点进行一定程度的压缩,提高效率。
- 外层列表仍然是
在之前配置文件中的list-max-ziplist-entries和list-max-ziplist-value这两个属性由于list底层编码方式的改变,现在都不再使用了.
4.使用场景
1. 消息队列
- 实现:Redis 可以使用
lpush
+brpop
命令组合实现经典的阻塞式生产者-消费者模型队列。 - 流程:
-
- 生产者:客户端使用
lpush
从列表左侧插入元素。 - 消费者:多个消费者客户端使用
brpop
命令阻塞式地从队列中“争抢”队首元素。
- 生产者:客户端使用
- 特点:
-
- 通过多个客户端来保证消费的负载均衡和高可用性。
- 只有一个消费者能“抢到”元素。
2. 分频道的消息队列
- 实现:Redis 同样使用
lpush
+brpop
命令,但通过不同的键模拟频道的概念。 - 流程:
-
- 生产者:将消息推送到不同的键值(频道)。
- 消费者:通过
brpop
不同的键值,实现订阅不同频道的理念。
- 特点:
-
- 每个频道只有一个消费者能“抢到”元素。
- 不同的消费者可以订阅不同的频道,确保某个主题的数据出现问题时不会影响其他频道。
思考
如何确定是哪个消费者“抢到”了元素?
1. 阻塞命令机制
brpop
命令:当消费者调用brpop
命令时,如果指定的列表为空,消费者将进入阻塞状态,等待列表中有元素可用。- 多个消费者竞争:如果有多个消费者同时调用
brpop
命令,Redis 会确保只有一个消费者能够成功获取到元素。这个消费者 是第一个被唤醒并成功执行brpop
命令的 消费者。
2. 客户端处理逻辑
- 唯一标识:每个消费者在执行
brpop
命令时,可以记录自己的唯一标识(如消费者ID)。 - 日志记录:当消费者成功获取到元素后,可以在日志中记录这次操作,包括消费者ID、获取的元素内容和时间戳等信息。
- 回调函数:在消费者应用中,可以设置回调函数来处理
brpop
命令的结果。回调函数中可以包含记录日志、更新状态等操作。
示例
假设我们有两个消费者(Consumer A 和 Consumer B)订阅同一个频道 key-1
,生产者将消息推送到 key-1
。
生产者
lpush key-1 message1
消费者 A
import redisclient = redis.StrictRedis()def handle_message(message):print(f"Consumer A got message: {message}")# 记录日志with open('consumer_a_log.txt', 'a') as log_file:log_file.write(f"Consumer A got message: {message}\n")while True:message = client.brpop('key-1')if message:handle_message(message[1].decode('utf-8'))
消费者 B 同上类似
日志记录
Consumer A 的日志文件 consumer_a_log.txt
:
Consumer A got message: message1
Consumer B 的日志文件 consumer_b_log.txt
:
总结
- 唯一标识:每个消费者有自己的唯一标识。
- 日志记录:成功获取到元素后,记录日志。
- 回调函数:设置回调函数处理
brpop
命令的结果。
通过上述方法,可以明确地知道是哪个消费者“抢到”了元素。
3. 微博 Timeline
- 需求:每个用户都有属于自己的 Timeline(微博列表),需要分页展示文章列表。
- 实现:
- 每篇微博使⽤哈希结构存储,例如微博中3个属性:
title、timestamp、content
:
hmset mblog:1 title xx timestamp 1476536196 content xxxxx
...
hmset mblog:n title xx timestamp 1476536196 content xxxxx
2.向⽤⼾Timeline添加微博,user::mblogs
作为微博的键:
lpush user:1:mblogs mblog:1 mblog:3
...
lpush user:k:mblogs mblog:9
博客目录 通过 list 将每篇博客数据(hash) 组织起来了
3.分页获取:分页获取用户的 Timeline,例如获取用户 1 的前 10 篇微博:
keylist = lrange user:1:mblogs 0 9
for key in keylist {hgetall key
}
问题:
- 1 + n 问题:如果每次分页获取的微博个数较多,需要执行多次
hgetall
操作,此时可以考虑使用 pipeline(流水线)模式批量提交命令 - 或者微博不采用哈希类型,而是使用序列化的 字符串类型,使用
mget
获取。 - 中间元素获取性能:
lrange
在列表两端表现较好,获取列表中间的元素表现较差,此时可以考虑将列表做拆分。
拆分的实现:
- 假设某个用户发了 1w 个微博,list 长度就是 1w。
- 就可以把这 1w 个微博拆成 10 份,每份就是 1k。
- 如果是想获取到 5k 个左右的微博,只用读取 5 份~
Pipeline (流水线)
虽然咱们是多个 Redis 命令,但是把这些 命令合并成一个网络请求进行通信,大大降低客户端和服务端之间的交互次数了。
思考:
- Quicklist:Quicklist 的外层是一个双向链表(
linkedlist
),每个节点是一个 (局部数据合并为)ziplist
存储,是一种高效的列表内部编码方式。 - Pipeline:是一种客户端技术,用于将多个命令合并成一个网络请求发送给服务器,从而减少网络往返时间,提高命令执行效率。
- 区别:Quicklist 是一种数据结构优化,而 Pipeline 是一种网络通信优化。
实现栈和队列:
- 同侧存取:
lpush
+lpop
或者rpush
+rpop
为栈。- 异侧存取:
lpush
+rpop
或者rpush
+lpop
为队列。
相关文章:
[Redis#6] list | 命令 | 应用 | 消息队列 | 微博 Timeline
目录 List 列表 特点 2. 命令 头插和尾插 下标 range 查询 头删和尾删 LINSERT LLEN LREM LTRIM LSET 阻塞命令 BLPOP BRPOP 操作 总结 3. 内部编码 ziplist(压缩列表) linkedlist(链表) ✔️quicklist(快速链…...
服务器数据恢复—raid6阵列硬盘被误重组为raid5阵列的数据恢复案例
服务器存储数据恢复环境: 存储中有一组由12块硬盘组建的RAID6阵列,上层linux操作系统EXT3文件系统,该存储划分3个LUN。 服务器存储故障&分析: 存储中RAID6阵列不可用。为了抢救数据,运维人员使用原始RAID中的部分…...
Xcode15(iOS17.4)打包的项目在 iOS12 系统上启动崩溃
0x00 启动崩溃 崩溃日志,只有 2 行,看不出啥来。 0x01 默认配置 由于我开发时,使用的 Xcode 14.1,打包在另外一台电脑 Xcode 15.3 Xcode 14.1 Build Settings -> Asset Catalog Compliter - Options Xcode 15.3 Build S…...
Netty的心跳机制怎么实现的?
大家好,我是锋哥。今天分享关于【Netty的心跳机制怎么实现的?】面试题。希望对大家有帮助; Netty的心跳机制怎么实现的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Netty 的心跳机制用于维持客户端和服务器之间的…...
常用函数的使用错题汇总
目录 new/delete malloc/free1. 语言和类型2. 内存分配3. 内存释放4. 安全性和类型安全5. 其他特性总结 线程停止文件流 new/delete malloc/free malloc/free 和 new/delete 是 C/C 中用于动态内存管理的两种方式,它们有一些重要的区别。以下是这两种方式的比较&…...
使用 `aircrack-ng`扫描、获取握手包
使用 aircrack-ng 工具集来扫描 5GHz WiFi 网络的过程与扫描 2.4GHz 网络类似,但需要注意一些特定的配置和命令。以下是一个详细的步骤指南,帮助你在 5GHz 频段上扫描 WiFi 网络并捕获握手包。 ### 前提条件 1. **操作系统**:通常在 Linux 系…...
css—轮播图实现
一、背景 最近和朋友在一起讨论的时候,我们提出了这样的一个提问,难道轮播图的效果只能通过js来实现吗?经过我们的一系列的争论,发现了这是可以通过纯css来实现这一效果的,CSS轮播图也是一种常见的网页展示方式&#x…...
Ardusub源码剖析(1)——AP_Arming_Sub
代码 AP_Arming_Sub.h #pragma once#include <AP_Arming/AP_Arming.h>class AP_Arming_Sub : public AP_Arming { public:AP_Arming_Sub() : AP_Arming() { }/* Do not allow copies */CLASS_NO_COPY(AP_Arming_Sub);bool rc_calibration_checks(bool display_failure)…...
ESP32-S3模组上跑通ES8388(10)
接前一篇文章:ESP32-S3模组上跑通ES8388(9) 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回解析了es8388_init函数中的第3段代码(也是实际与ES8388寄存器打交道的第1段代码),本回继续往下解析。为了便于理…...
AI/ML 基础知识与常用术语全解析
目录 一.引言 二.AI/ML 基础知识 1.人工智能(Artificial Intelligence,AI) (1).定义 (2).发展历程 (3).应用领域 2.机器学习(Machine Learning,ML) (1).定义 (2).学习方式 ①.监督学习 ②.无监督…...
【C#设计模式(15)——命令模式(Command Pattern)】
前言 命令模式的关键通过将请求封装成一个对象,使命令的发送者和接收者解耦。这种方式能更方便地添加新的命令,如执行命令的排队、延迟、撤销和重做等操作。 代码 #region 基础的命令模式 //命令(抽象类) public abstract class …...
Could not resolve com.android.tools.build:gradle:7.4.2.
Android Studio编译项目报错如下,始终无法下载解析7.4.2的gradle classpath A problem occurred configuring root project aistudyclient_questionlib. > Could not resolve all files for configuration :classpath.> Could not resolve com.android.tools…...
uniapp在App端定义全局弹窗,当打开关闭弹窗会触发onShow、onHide生命周期怎么解决?
在uniapp(App端)中实现自定义弹框,可以通过创建一个透明页面来实现。点击进入当前页面时,页面背景会变透明,用户可以根据自己的需求进行自定义,最终效果类似于弹框。 遇到问题:当打开弹窗(进入弹窗页面)就会触发当前页…...
2024 ccpc 辽宁省赛 E(构造 思维?)L(二分+一点点数论知识?)
E 题意: 可以注意到: 我的两种方格都四个方格的大小。 所以 如果存在一种摆放方式 那么 4|nm。 再考虑一种特殊的情况 22 ,此时虽然我的积是4 但是无法摆放的。 1>对于 4 | n,或者 4 | m.我直接摆放第二种方格就可以了。 如果我n 是4 的…...
IIC 随机写+多次写 可以控制写几次
verilog module icc_tx#(parameter SIZE 2 , //用来控制写多少次 比如地址是0000 一个地址只能存放8bit数据 超出指针就会到下一个地址0001parameter CLK_DIV 50_000_000 ,parameter SPEED 100_000 ,parameter LED 50 )( input wire c…...
基于SpringBoot+Vue的汽车票网上预订系统-无偿分享 (附源码+LW+调试)
目录 1. 项目技术 2. 功能菜单 3. 部分功能截图 4. 研究背景 5. 研究目的 6. 可行性分析 6.1 技术可行性 6.2 经济可行性 6.3 操作可行性 7. 系统设计 7.1 概述 7.2 系统流程和逻辑 7.3 系统结构 8. 数据库设计 8.1 数据库ER图 (1)公告信…...
net9 abp vnext 多语言通过数据库动态管理
通过数据库加载实现动态管理,用户可以自己修改界面显示的文本,满足国际化需求 如图所示,前端使用tdesign vnext 新建表TSYS_Localization与TSYS_LocalizationDetail 国旗图标下载网址flag-icons: Free Country Flags in SVG 在Shared下创建下图3个文件 …...
pip安装github上的开源软件包
1、若本机中安装的有git,可使用githttps方式安装 # 以安装pyfolio软件包为例,安装指令如下 pip install githttps://github.com/quantopian/pyfolio.git 2、若本机中没有安装git,可以直接使用软件包的zip地址进行安装 # 以安装pyfolio软件包为例,安装…...
【LeetCode刷题之路】120:三角形最小路径和的两种解法(动态规划优化)
LeetCode刷题记录 🌐 我的博客主页:iiiiiankor🎯 如果你觉得我的内容对你有帮助,不妨点个赞👍、留个评论✍,或者收藏⭐,让我们一起进步!📝 专栏系列:LeetCode…...
架构04-透明多级分流系统
零、文章目录 架构04-透明多级分流系统 1、透明多级分流系统 (1)概述 **定义:**透明多级分流系统是指在用户请求从客户端发出到最终查询或修改数据库信息的过程中,通过多个技术部件对流量进行合理分配,以提高系统的…...
云原生后端开发:构建现代化可扩展的服务
随着微服务架构的普及和容器化技术的成熟,云原生后端开发成为了构建现代化、可扩展系统的关键。本文将从云原生理念出发,结合实际案例,探讨如何使用 Kubernetes、服务网格、微服务架构等技术构建高效的云原生后端。 一、云原生的核心理念 1.…...
在Windows和Linux系统上获取网卡MAC地址及相关信息所有常用方法整理
摘要 在网络管理和故障排除中,了解如何获取网卡的MAC地址、IP地址以及网卡名称是系统管理员必备的技能。本文将介绍在Windows和Linux系统上手动获取网卡MAC地址的方法,并提供脚本以自动化获取服务器中网卡信息的过程。这些技巧和工具将帮助新手系统管理…...
制作苹果IOS.APP所使用步骤和方法-有步骤视情况待完善
1.获取开发工具 首先,您需要下载并安装Xcode。Xcode是苹果开发iOS和macOS应用程序的官方集成开发环境(IDE)。它包含了必要的工具,例如代码编辑器、调试器、编译器和界面构建器。Xcode可在Mac App Store中免费下载。 2.学习Swift或…...
【conda】全面解析 Conda 配置文件:从完整示例到最佳实践
目录 引言一、Conda 配置文件示例1.1 中英文注释示例1.2 文件编码格式 二、详细解释2.1 ssl_verify: true2.2 channels2.3 envs_dirs2.4 pkgs_dirs2.5 custom_channels2.6 remote_read_timeout_secs 和 remote_connect_timeout_secs2.7 show_channel_urls2.8 default_packages2…...
ffmpeg命令详解
原文网址:ffmpeg命令详解_IT利刃出鞘的博客-CSDN博客 简介 本文介绍ffmpeg命令的用法。 命令示例 1.mp4和avi的基本互转 ffmpeg -i D:\input.mp4 E:\output.avi ffmpeg -i D:\input.avi E:\output.mp4 -i 表示input,即输入。后面填一个输入地址和一…...
asyncio.run() 里面嵌套 asyncio.run() 可以吗?
[TOC](asyncio.run() 里面嵌套 asyncio.run() 可以吗?) 在 Python 的异步编程中,asyncio 是一个非常重要的模块,它提供了编写单线程并发代码的基础设施。asyncio.run() 是一个方便的函数,用于运行一个协程并管理事件循环的生命周…...
flutter in_app_purchase google支付 PG-GEMF-01错误
问题:PG-GEMF-01错误 flutter 使用in_app_purchase插件升降级订阅时报错PG-GEMF-01。 解决方案: 升降级订阅时,确保不调用 MethodCallHandlerImpl.java文件中的 setObfuscatedAccountId()方法、setObfuscatedProfileId()方法 原因…...
Flink 离线计算
文章目录 一、样例一:读 csv 文件生成 csv 文件二、样例二:读 starrocks 写 starrocks三、样例三:DataSet、Table Sql 处理后写入 StarRocks四、遇到的坑 <dependency><groupId>org.apache.flink</groupId><artifactId&…...
排序算法之插入排序篇
插入排序 思路: 就是将没有排序的元素逐步地插入到已经排好序的元素后面,保持元素的有序 视频的实现过程如下: 插入排序全过程 代码实现过程如下: public static void Insertion(int[] arr) { for (int i 1; i < arr.length…...
(11)(2.2) BLHeli32 and BLHeli_S ESCs(二)
文章目录 前言 1 传递支持 前言 BLHeli 固件和配置应用程序的开发是为了允许配置 ESC 并提供额外功能。带有此固件的 ESC 允许配置定时、电机方向、LED、电机驱动频率等。在尝试使用 BLHeli 之前,请按照 DShot 设置说明进行操作(DShot setup instructions)。 1 传…...
Unity之一键创建自定义Package包
内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity之一键创建自定义Package包 TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进取! …...
【AI】JetsonNano启动时报错:soctherm OC ALARM
1、问题描述 将JetsonNano烧写SD卡镜像为Ubuntu20.04后,启动时报错:soctherm OC ALARM,启动失败;然后系统一直重启 2、原因分析 “soctherm OC ALARM”是检测到系统温度超过安全阈值时发出的过热警告。 “soctherm”代表系统…...
道路机器人识别交通灯,马路,左右转,黄线,人行道,机器人等路面导航标志识别-使用YOLO标记
数据集分割 train组66% 268图片 validation集22% 91图片 test集12% 48图片 预处理 没有采用任何预处理步骤。 增强 未应用任何增强。 数据集图片: 交通灯 马路 右转 向右掉头 机器人识别 人行横道 黄线 直行或右转 数据集下载: 道路…...
电子应用设计方案-31:智能AI音响系统方案设计
智能 AI 音响系统方案设计 一、引言 智能 AI 音响作为一种新兴的智能家居设备,通过融合语音识别、自然语言处理、音频播放等技术,为用户提供便捷的语音交互服务和高品质的音乐体验。本方案旨在设计一款功能强大、性能稳定、用户体验良好的智能 AI 音响系…...
SQL优化与性能——数据库设计优化
数据库设计优化是提高数据库性能、确保数据一致性和支持业务增长的关键环节。无论是大型企业应用还是小型项目,合理的数据库设计都能够显著提升系统性能、减少冗余数据、优化查询响应时间,并降低维护成本。本章将深入探讨数据库设计中的几个关键技术要点…...
脑网络组织与心跳动力学之间的耦合测量
摘要 近年来,人们对脑心相互作用的研究兴趣日益浓厚。许多研究提出了新的方法来探究大脑与心脏如何通信,从而对一些神经功能有了新的认识。然而,大多数框架只关注单个脑区域与心跳动态之间的相互作用,忽略了大脑的功能网络会随着…...
图像显示的是矩阵的行和列,修改为坐标范围。
x 3; y 3; f1x x^2 y^2; guance1 f1x; F (x, y) sqrt((x.^2 y.^2 - guance1).^2); % 使用点乘 [x, y] meshgrid(0:1:5, 0:1:5); Z F(x, y); figure; imagesc(Z); % 由于 imagesc 使用矩阵索引作为坐标,我们需要手动添加刻度 % 这里我们假设 x 和 y 的范围…...
一体化数据安全平台uDSP 入选【年度创新安全产品 TOP10】榜单
近日,由 FreeBuf 主办的 FCIS 2024 网络安全创新大会在上海隆重举行。大会现场揭晓了第十届 WitAwards 中国网络安全行业年度评选获奖名单,该评选自 2015 年举办以来一直饱受赞誉,备受关注,评选旨在以最专业的角度和最公正的态度&…...
[免费]SpringBoot+Vue景区订票(购票)系统【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue大景区订票(购票)系统,分享下哈。 项目视频演示 【免费】SpringBootVue景区订票(购票)系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 现代经济快节奏发展以及不断完善升级的信息…...
力扣215:数组中第K大的元素
给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入: [3,2,1,5,6,4],k 2 …...
永久停用PostgreSQL 归档功能
文章目录 引言永久停用归档功能归档的优势归档的劣势开启归档的情况关闭归档的情况see also引言 PostgreSQL 是一个开源的关系型数据库系统,支持数据归档(WAL),可以实现数据备份、恢复和灾难恢复等功能。在使用 PostgreSQL 的过程中,如果 PostgreSQL 数据库开启了归档(a…...
23种设计模式-原型(Prototype)设计模式
文章目录 一.什么是原型设计模式?二.原型模式的特点三.原型模式的结构四.原型模式的优缺点五.原型模式的 C 实现六.原型模式的 Java 实现七. 代码解析八.总结 类图: 原型设计模式类图 一.什么是原型设计模式? 原型模式(Prototype…...
【Linux】-学习笔记06
第二章、时间同步服务器 2.1时间同步服务器的使用 2.1.1系统时区时间的管理 timedatectl set-time "2024-02-13 10:41:55" ##设定系统时间 timedatectl list-timezones ##显示系统的所有时区 timedatectl set-timezone "Asia/Shangh…...
李永平:以科技创新为引擎,驱动中国国际未来产业研究院不断前行
作者:李望 在科技创新与产业升级的滚滚洪流中,唯有洞察未来者,方能引领时代浪潮。近日,中国国际未来产业研究院迎来了重量级嘉宾——李永平院士。他的加盟,为研究院注入了全新的活力。作为业界的领军人物,李永平院士将担任研究院常务副院长、资深专家及高级法律顾问,共同规划未…...
netconf 代码架构
NETCONF(Network Configuration Protocol)是一种基于 XML 的网络配置管理协议,主要用于在网络设备之间进行配置管理、状态监控和操作。它被设计为一种可扩展的协议,并且在自动化网络管理中扮演着重要角色。NETCONF 通过安全的通信…...
【查询目录】.NET开源 ORM 框架 SqlSugar 系列
.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…...
广域网技术
企业需要通过广域网将这些分散在不同地理位置的分支机构连接起来 早期广域网技术概述 广域网:连接不同地区局域网的网络,能够横跨几个洲提供远距离通信,形成国际性的远程网络 广域网设备角色介绍: CE:用户端连接服务…...
基于Java Springboot 求职招聘平台
一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue2、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA 数据库&…...
C学习:移位幻影之左移一个负数,会发生什么?
C学习:移位幻影之左移一个负数,会发生什么? 问题背景无符号数移位问题有符号数移位操作使低位置零问题 问题背景 C语言中,移位是个简单的问题,但又是个高风险的问题。 简单在于,大部分场景都可以理解为乘或…...
[2024年3月10日]第15届蓝桥杯青少组stema选拔赛C++中高级(第二子卷、编程题(2))
方法一(string): #include <iostream> #include <string> using namespace std;// 检查是否为回文数 bool isPalindrome(int n) {string str to_string(n);int left 0, right str.size() - 1;while (left < right) {if (s…...