Redis KEY操作实战手册:从设计到维护的全面指南

news2024/12/29 9:48:02

 🌈 个人主页:danci_
🔥 系列专栏:《设计模式》《MYSQL》
💪🏻 制定明确可量化的目标,坚持默默的做事。


✨欢迎加入探索Redis的key的相关操作之旅✨
    👋 大家好!文本学习和探索Redis的key的相关操作。✨Redis是一款高效的内存数据库,作为开发者,你是否想要充分发挥它的潜力呢?🎯在这篇文章中,我们将深入探索Redis中最基础却极其重要的操作——KEY操作。无论你是Redis的新手,还是希望进一步优化你的代码,这里都有你需要的技巧和窍门!💡快来和我一起揭开Redis KEY操作的神秘面纱吧!


目录

一、DEL 删除KEY

二、EXPIRE 设置过期时间

三、PERSIST 移除给定KEY的生存时间

四、EXPIREAT 设置过期时间-时间戳

五、TTL 获取剩余过期时间

六、PTTL 获取剩余过期时间

七、RENAME 重命名KEY

八、RENAMENX 重命名KEY

九、EXISTS 判断KEY是否存在

十、KEYS 按模式匹配KEY

十一、SORT 排序

11.1 SORT key asc|desc 数字排序

11.2 SORT key alpha 字符串排序

11.3 sort key limit start size 限制返回数量

十二、DUMP 序列化给定 KEY

十三、RESTORE 反序列化给定 KEY

十四、OBJECT 查看KEY内部存储信息

十五、TYPE 查值的类型


一、DEL 删除KEY

DEL key [key ...]:删除给定的一个或多个 key

  • 若key不存在,则忽略
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set name lisi    # 初始化key
OK
127.0.0.1:6379> set age 22
OK
(integer) 1
127.0.0.1:6379> lpush mylist apple banana orange pear
(integer) 4
127.0.0.1:6379> del name age mylist address # 删除key
(integer) 3    # 删除成功的key数量(不存在的key忽略)

时间复杂度:

  • 对于字符串类型的 key ,时间复杂度为O(N), N 为被删除的 key 的数量
  • 列表、集合、有序集合或哈希表类型的 key,时间复杂度为O(M), M 为以上数据结构内的元素数量

返回:

  • 被删除 key 的数量

二、EXPIRE 设置过期时间

EXPIRE key seconds:为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除

  • 如果一个命令只是修改(alter)一个带生存时间的 key 的值而不是用一个新的 key 值来代替(replace)它的话,那么生存时间不会被改变
  • 对一个 key 执行 INCR 命令,对一个列表进行 LPUSH 命令,或者对一个哈希表执行 HSET 命令,这类操作都不会修改 key 本身的生存时间
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> expire age 20
(integer) 1
127.0.0.1:6379> get age    # 查看age值
"21"
127.0.0.1:6379> get age    # 过20秒再查看
(nil)
  • 对一个 key 进行改名,那么改名后的 key 的生存时间和改名前一样
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> expire name 20    # 设置过期时间为20秒
(integer) 1
127.0.0.1:6379> rename name name2 # 重命名key为name2
OK
127.0.0.1:6379> keys *       # 查看库中有多少key
1) "name2"
127.0.0.1:6379> get name2    # 查看name2信息
"lisi"
127.0.0.1:6379> get name2    # 过20秒再获取name2信息
(nil)
  • 使用PERSIST 可以删除key的生存时间(不删除key)
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> expire name 20    # 设置过期时期
(integer) 1
127.0.0.1:6379> persist name      # 对key为name执行persist命令
(integer) 1
127.0.0.1:6379> get name          # 获取name信息
"lisi"
127.0.0.1:6379> get name          # 过20秒再获取name信息
"lisi"
  • 多次对同一个KEY执行 EXPIRE 命令,后面的生存时间覆盖之前的生存时间
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> expire name 50
(integer) 1
127.0.0.1:6379> expire name 20
(integer) 1
127.0.0.1:6379> expire name 5
(integer) 1
127.0.0.1:6379> get name
"lisi"
127.0.0.1:6379> get name    # 过5秒后查name信息
(nil)

时间复杂订O(1)。

返回:

  • 生成返回1
  • 失败返回0

三、PERSIST 移除给定KEY的生存时间

PERSIST key:将这个 key 从(带生存时间 key )的过期时间删除

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> expire name 10
(integer) 1
127.0.0.1:6379> persist name
(integer) 1
127.0.0.1:6379> ttl name
(integer) -1    # name的过期时间已清除,所以返回-1
127.0.0.1:6379> persist name
(integer) 0
127.0.0.1:6379> persist name1
(integer) 0

时间复杂度O(1)。

返回:

  • 当生存时间移除成功时,返回 1 
  • key 不存在或 key 没有设置生存时间,返回 0 

四、EXPIREAT 设置过期时间-时间戳

EXPIREAT key timestamp:操作与EXPIRE相似

  • 不同点:EXPIREAT的过期时间单位为时间戳,而EXPIRE的过期时间单位为秒

五、TTL 获取剩余过期时间

TTL key:以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)

127.0.0.1:6379> set name lisi ex 20
OK
127.0.0.1:6379> ttl name
(integer) 18
127.0.0.1:6379> ttl name
(integer) 6
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> get name
(nil)

时间复杂度O(1)

返回值:

  • 当 key 不存在时,返回 -2
  • 当 key 存在但没有设置剩余生存时间时,返回 -1 
  • 否则,以秒为单位,返回 key 的剩余生存时间

六、PTTL 获取剩余过期时间

PTTL key:操作类似于TTL

  • 不同点:PTTL以毫秒为单位返回,而TTL以秒为单位返回

七、RENAME 重命名KEY

RENAME key newkey:将 key 改名为 newkey 

  • 当 key 不存在时,返回一个错误
  • 当 newkey 已经存在时, RENAME 命令将覆盖旧值
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> rename name address    # key不存在
(error) ERR no such key
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> rename name name2      # 执行rename命令
OK
127.0.0.1:6379> set address guiyang
OK
127.0.0.1:6379> keys *
1) "address"
2) "name2"
127.0.0.1:6379> rename name2 address    # 执行rename命令
OK
127.0.0.1:6379> keys *                  # newkey已存在,直接覆盖,只剩下address一个key
1) "address"
127.0.0.1:6379> get address
"lisi"

时间复杂度O(1)。

返回值:

  • 改名成功时提示 OK 
  • 失败时候返回一个错误

八、RENAMENX 重命名KEY

RENAMENX key newkey:操作与RENAME相似

  • 不同点:当且仅当 newkey 不存在时,将 key 改名为 newkey

九、EXISTS 判断KEY是否存在

EXISTS key:检查给定 key 是否存在

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> exists name
(integer) 0
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> exists name
(integer) 1

时间复杂度O(1)。

返回:

  • 若 key 存在,返回 1 ,否则返回 0 

十、KEYS 按模式匹配KEY

KEYS pattern:查找所有符合给定模式 pattern 的 key

  • KEYS * :匹配数据库中所有 key(不推荐使用该命令)
  • KEYS h?llo :第二个字符字符匹配一个任何字符。如 匹配 hello,hallo 和 hxllo 等
  • KEYS h*llo :匹配第一个字符和最后三个字符,中间匹配任意字符。如 hllo 和 heeeeello 等
  • KEYS h[ae]llo: 第二个字符为a或e。如 hello 和 hallo ,但不匹配 hillo
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set hello 1
OK
127.0.0.1:6379> set hallo 2
OK
127.0.0.1:6379> set hxllo 3
OK
127.0.0.1:6379> set hillo 4
OK
127.0.0.1:6379> set habcdello 5
OK
127.0.0.1:6379> keys *
1) "habcdello"
2) "hallo"
3) "hello"
4) "hillo"
5) "hxllo"
127.0.0.1:6379> keys h?llo
1) "hallo"
2) "hello"
3) "hillo"
4) "hxllo"
127.0.0.1:6379> keys h*llo
1) "habcdello"
2) "hallo"
3) "hello"
4) "hillo"
5) "hxllo"
127.0.0.1:6379> keys h[ae]llo
1) "hallo"
2) "hello"

时间复杂度为O(N), N 为数据库中 key 的数量

返回:

  • 符合给定模式的 key 列表

十一、SORT 排序

SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC | DESC] [ALPHA] [STORE destination]

  • 返回或保存给定列表、集合、有序集合 KEY 中经过排序的元素
  • 排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较
  • 默认排序对象为数字

11.1 SORT key asc|desc 数字排序

 

127.0.0.1:6379> lpush mylist 2 4 3 1
(integer) 4
127.0.0.1:6379> sort mylist        # 默认为 asc
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> sort mylist desc
1) "4"
2) "3"
3) "2"
4) "1"

 

11.2 SORT key alpha 字符串排序

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> lpush mylist a g b e j
(integer) 5
127.0.0.1:6379> sort mylist
(error) ERR One or more scores can't be converted into double # 字符串排序报错
127.0.0.1:6379> sort mylist alpha    # 添加alpha进行对字符串排序
1) "a"
2) "b"
3) "e"
4) "g"
5) "j"

 

11.3 sort key limit start size 限制返回数量

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> lpush mylist a g b e j
(integer) 5
127.0.0.1:6379> sort mylist asc alpha limit 0 2
1) "a"
2) "b"

 

  • start:开始位置
  • size:数量

十二、DUMP 序列化给定 KEY

 

DUMP key:序列化给定 key ,并返回被序列化的值,使用 RESTORE 命令可以将这个值反序列化为 Redis 键

  • 它带有 64 位的校验和,用于检测错误, RESTORE 在进行反序列化之前会先检查校验和
  • 值的编码格式和 RDB 文件保持一致
  • RDB 版本会被编码在序列化值当中,如果因为 Redis 的版本不同造成 RDB 格式不兼容,那么 Redis 会拒绝对这个值进行反序列化操作
127.0.0.1:6379> flushdb # 清空库
OK
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> dump name # dump存在的key
"\x00\x04lisi\t\x00\xd2p\xcc\xfe6\x8d\xd9\x15"

127.0.0.1:6379> dump age  # dump不存在的key
(nil)

时间复杂度:

  • 查找给定键的复杂度为 O(1) 
  • 对键进行序列化的复杂度为 O(N*M) ,其中 N 是构成 key 的 Redis 对象的数量,而 M 则是这些对象的平均大小
  • 若序列化的对象是比较小的字符串,那么复杂度为 O(1)

返回值:

  • 返回序列化之后的值
  • 若 key 不存在,那么返回 nil

十三、RESTORE 反序列化给定 KEY

 

RESTORE key ttl serialized-value:反序列化给定的序列化值,并将它和给定的 key 关联

  • 参数 ttl 以毫秒为单位为 key 设置生存时间;如果 ttl 为 0 ,那么不设置生存时间
  • 反序列化前校验RDB版本的数据完整性,版本不同或不完整报错
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> dump name    # 序列化
"\x00\x04lisi\t\x00\xd2p\xcc\xfe6\x8d\xd9\x15"
127.0.0.1:6379> restore name2 0 "\x00\x04lisi\t\x00\xd2p\xcc\xfe6\x8d\xd9\x15" # 反序列化
OK
127.0.0.1:6379> keys *
1) "name2"
2) "name"
127.0.0.1:6379> get name
"lisi"
127.0.0.1:6379> get name2
"lisi"
127.0.0.1:6379> restore name2 0 "\x00\x04lisi\t\x00\xd2p\xcc\xfe6"    
(error) BUSYKEY Target key name already exists.    # 序列化值不完整,报错

时间复杂度

  • 查找给定键的复杂度为 O(1) ,对键进行反序列化的复杂度为 O(N*M) ,其中 N 是构成 key 的 Redis 对象的数量,而 M 则是这些对象的平均大小。
  • 有序集合(sorted set)的反序列化复杂度为 O(N*M*log(N)) ,因为有序集合每次插入的复杂度为 O(log(N)) 。
  • 如果反序列化的对象是比较小的字符串,那么复杂度为 O(1) 

返回值:

  • 反序列化成功,返回OK
  • 否则报错

十四、OBJECT 查看KEY内部存储信息

 

OBJECT subcommand [arguments [arguments]]:允许从内部察看给定 key 的 Redis 对象

  • 通常用在除错或者了解为了节省空间而对 key 使用特殊编码的情况
  • 将Redis用作缓存程序时,你也可以通过 OBJECT 命令中的信息,决定 key 的驱逐策略(eviction policies)

子命令:

  • OBJECT REFCOUNT <key> 返回给定 key 引用所储存的值的次数。此命令主要用于除错
  • OBJECT ENCODING <key> 返回给定 key 锁储存的值所使用的内部表示(representation)
  • OBJECT IDLETIME <key> 返回给定 key 自储存以来的空转时间(idle, 没有被读取也没有被写入),以秒为单位
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> set code 123456789901234567890
OK
127.0.0.1:6379> lpush mylist 1 2 3 4 5 b c d e f g h j 
(integer) 13
127.0.0.1:6379> hset myhash name lisi age 20 address 'guiyang'
(integer) 3
127.0.0.1:6379> sadd myset 1 2 3 a b c d e f hello world
(integer) 11
127.0.0.1:6379> zadd mysset 1 a 3 c 2 d 5 5 6 1a
(integer) 5
127.0.0.1:6379> object encoding name
"embstr"                                # 字符串
127.0.0.1:6379> object encoding age
"int"                                   # 数字
127.0.0.1:6379> object encoding code
"embstr"                                # 大的数字被编码为字符串
127.0.0.1:6379> object encoding mylist
"quicklist"                             # 列表
127.0.0.1:6379> object encoding myhash
"ziplist"                               # 集合
127.0.0.1:6379> object encoding myset
"hashtable"                             # hash
127.0.0.1:6379> object encoding mysset
"ziplist"                               # 有序集合

时间复杂度为O(1)。

返回值:

  • OBJECT REFCOUNT key 返回数字
  • OBJECT IDLETIME key 返回数字
  • OBJECT ENCODING key 返回相应的编码类型

十五、TYPE 查值的类型

 

TYPE key:返回 key 所储存的值的类型。 

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> set code 123456789901234567890
OK
127.0.0.1:6379> lpush mylist 1 2 3 4 5 b c d e f g h j 
(integer) 13
127.0.0.1:6379> hset myhash name lisi age 20 address 'guiyang'
(integer) 3
127.0.0.1:6379> sadd myset 1 2 3 a b c d e f hello world
(integer) 11
127.0.0.1:6379> zadd mysset 1 a 3 c 2 d 5 5 6 1a
(integer) 5
127.0.0.1:6379> type address
none
127.0.0.1:6379> type name
string                        # 字符串
127.0.0.1:6379> type age
string                        # 字符串
127.0.0.1:6379> type code
string                        # 字符串
127.0.0.1:6379> type mylist
list                          # 列表
127.0.0.1:6379> type myhash
hash                          # 哈希
127.0.0.1:6379> type myset
set                           # 集合
127.0.0.1:6379> type mysset
zset                          # 有序集合

时间复杂度O(1)。

返回:

  • none (key不存在)
  • string (字符串)
  • list (列表)
  • hash (哈希表)
  • set (集合)
  • zset (有序集)

PS:还有 SCAN迭代键、RANDOMKEY随机返回键、MIGRATE原子键跨实例移动、MOVE库之间移动等命令几乎用不上,有需要的同学请移步到官网查阅https://redis.io。

    好了,今天分享到这里。希望你喜欢这次的探索之旅!不要忘记 "点赞" 和 "关注" 哦,我们下次见!🎈

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

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

相关文章

在 Ubuntu 环境下使用 VSCode 和 PlatformIO 下载程序到 Arduino Uno

安装 VSCode 访问 VSCode 官网 下载 .deb 包使用以下命令安装&#xff1a;sudo dpkg -i <下载的文件名>.deb sudo apt-get install -f安装 PlatformIO 扩展 在 VSCode 中&#xff0c;转到扩展市场&#xff08;CtrlShiftX&#xff09;搜索 “PlatformIO IDE”点击 “安装”…

刷题记录-HOT 100(一)40道

记录题解和思路。 一、哈希表解决问题 1、两数之和 思路&#xff1a; 创建哈希表&#xff1a; 初始化了一个空字典来存储已经访问过的数字及其对应的索引。 遍历数组&#xff1a; 逐一遍历数组中的每个元素。在遍历过程中&#xff0c;针对每个元素 num&#xff0c;计算出它…

手机FM LNA方案设计

一 概述 关于手机FM的使用&#xff0c;较为传统的则是在打开FM应用前先插入有线耳机才能使用FM应用。然而随着智能手机的进步以及有线耳机日益被无线蓝牙耳机所代替&#xff0c;内置FM LNA方案被应用的越来越多&#xff0c;无需插入有线耳机&#xff0c;复用例如GSM天线也能实…

跨语言障碍:全球语言翻译神器崛起

1.背景 工作中经常要查看纯英文文档和纯英文视频&#xff0c;尽管本人经历了1年多的英语培训&#xff0c;看英文资料依然非常吃力。 大模型出来后&#xff0c;KIMI能够帮助翻译纯英文的文档内容&#xff0c;但视频翻译还没有一个很好的工具。最近发现了一款通过大模型翻译文档…

yolov9目标检测pyside6可视化检测界面python源码-用于计数统计-摄像头可用

项目概述 此项目旨在利用YOLOv9&#xff08;You Only Look Once version 9&#xff09;这一先进的目标检测模型&#xff0c;实现实时视频流中的物体识别与计数。通过集成PySide6库&#xff0c;我们能够构建一个直观且易于使用的图形用户界面&#xff08;GUI&#xff09;&#…

基于SpringBoot+Vue+MySQL的社区维修平台

系统背景 系统管理也都将通过计算机进行整体智能化操作&#xff0c;对于社区维修平台所牵扯的管理及数据保存都是非常多的&#xff0c;例如住户管理、社区公告管理、维修工管理、维修订单管理、接单信息管理、订单信息管理、在线沟通管理、举报信息管理、留言板管理、系统管理等…

VR虚拟驾驶未来发展_vr自动驾驶汽车所带来的改变

在自动驾驶汽车的基础上&#xff0c;VR虚拟现实技术的应用也让自动驾驶汽车更加智能化&#xff0c;能够实现更高级的驾驶体验&#xff0c;今天这篇文章就和大家一起探讨一下 VR虚拟驾驶未来发展的趋势&#xff0c;以及虚拟现实自动驾驶汽车所带来的几个改变。 一、VR 虚拟驾驶未…

WebAssembly技术实践

文章目录 知识学习优点 开启本地临时服务器方式一、命令安装方式二、直接在vscode的插件 测试程序异常处理 最近在看WebAssembly相关的知识&#xff0c;在本地运行&#xff0c;记录下来&#xff0c;方便备查。 知识学习 WebAssembly是一种高性能二进制格式、用于在各种现代硬件…

C++基础面试题 | C++中static的作用?什么场景下会使用static?

回答重点&#xff1a;修饰局部变量 修饰全局变量或函数 修饰类的成员变量或函数 修饰局部变量&#xff1a;当static用于修饰局部变量时&#xff0c;该变量的存储位置在程序执行期间保持不变&#xff0c;并且只在程序执行到该变量的声明处时初始化一次。即使函数被多次调用&…

【Python报错已解决】“ModuleNotFoundError: No module named ‘packaging‘“

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引言&#xff1a;一、问题描述1.1 报错示例&#xff1a;尝试导入不存在的模块时&#xff0c;可能会看到以下错误信息。…

详解CSS

目录 CSS 语法 引入方式 选择器 标签选择器 类选择器 ID选择器 通配符选择器 复合选择器 常用CSS color font-size border width和height padding 外边距 CSS CSS(Cascading Style Sheet)&#xff0c;层叠样式表, ⽤于控制⻚⾯的样式. CSS 能够对⽹⻚中元素位置…

带你深入浅出之QT编程:一、掌握信号与槽的奥秘

此为QT编程的第一谈&#xff01;关注我&#xff0c;带你快速学习QT编程的学习路线&#xff01; 每一篇的技术点都是很很重要&#xff01;很重要&#xff01;很重要&#xff01;但不冗余&#xff01; 我们通常采取总-分-总和生活化的讲解方式来阐述一个知识点&#xff01; 码…

《python语言程序设计》第8章第11题将反向字符串 编写一个函数反向一个字符串,reverse(s)

def reverse(text_arrange):len_text len(text_arrange)dec_text ""for i in range(1, len_text 1):# print(i)dec_text text_arrange[-i]print(f"反向输出{dec_text}")reverse("12345678") reverse("abcdefg")

利润率问题【简单】

小张收购一台手机&#xff0c;然后转手卖出&#xff0c;赚取了30%的利润。一星期后&#xff0c;客户要求退货&#xff0c;小张和客户达成协议&#xff0c;以当时交易价格的90%回收了这台手机&#xff0c;后来小张又以最初的收购价格将其卖出。小张在这台手机交易中的利润率是&a…

双系统报错verifiying shim SBAT data falled: Security Pollcy Violation

文章目录 问题背景原因分析解决方案 问题背景 双系统&#xff0c;在windows更新后&#xff0c;出现如下报错 原因分析 系统更新后&#xff0c;自动打开了Secure Boot 解决方案 方案一&#xff1a; 开机进入BIOS-》选择Security -> Secure Boot, 设置为Disabled, 保存 …

部署1panel

1Panel是一个现代化、开源的Linux服务器运维管理面板&#xff0c;它通过Web图形界面为用户提供了丰富的服务器管理功能。 Docker管理 容器管理&#xff1a;1Panel深度集成了Docker和docker-compose&#xff0c;允许用户通过Web界面轻松管理Docker容器。用户可以在1Panel中启动…

Cubase操作:就地渲染 配和弦技巧 合并多段音频 隐藏标记轨序号 删除素材池多余音频

“授人以鱼&#xff0c;不如授之以渔&#xff0c;授人以鱼只救一时之急&#xff0c;授人以渔则可解一生之需。” ​有时侯做音乐最重要的就是不要太死板和要多思考&#xff01;如果被教的只有一部分&#xff0c;只学一部分&#xff0c;有时是很难理解的&#xff0c;一些人可能只…

Servlet, Filter, Listener 启动与执行顺序

Servlet, Filter, Listener 启动与执行顺序 1、启动顺序 **Listener -> Filter -> Servlet**2、记忆口诀3、执行顺序 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java Web应用中&#xff0c;Servlet、Filter和Listener的启动与执…

QT +ffmpeg-4.2.2-win64-shared 拉取 RTMP/http-flv 流播放

拉取HTTP-FLV视频流处理逻辑&#xff1a; 1.在子线程中从流媒体服务端拉取视频流、使用ffmpeg进行解码&#xff0c;转成QImage &#xff0c;发送给主线程。 2.主线程接收QImage后在界面显示。 pro文件&#xff1a; QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT…

Driver.js——实现页面引导

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…