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

 🌈 个人主页: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.ppmy.cn/news/1519352.html

相关文章

spring入门(一)spring简介

一、spring简介 Spring技术是JavaEE开发必备技能&#xff0c;企业开发技术选型命中率>90% spring能够简化开发&#xff0c;降低企业级开发的复杂性。框架整合&#xff0c;高效整合其他技术&#xff0c;提高企业级应用开发与运行效率。 主要学习&…

《计算机操作系统》(第4版)第12章 保护和安全 复习笔记

第12章 保护和安全 一、安全环境 1.实现“安全环境”的主要目标和面临的威胁 实现“安全环境”的主要目标和威胁如表12-1所示。 目标 威胁 数据机密性 对应的威胁为有人通过各种方式窃取系统中的机密信息使数据暴露 数据完整性 对应的威胁为攻击者擅自修改系统中所保存的数…

metallb-speaker缓存

手动修改metallb-config arping返回2个mac地址 删除pod mac正常返回 pkill 进程 返回2个mac

SQL进阶技巧:用户不同 WiFi 行为区间划分分析 | 断点分组问题

目录 0 场景描述 1 数据准备 2 问题分析 3 小结 0 场景描述 现有用户扫描或连接 WiFi 记录表 user_wifi_log ,每一行数据表示某时刻用户扫描或连接 WiFi 的日志。 现需要进行用户行为分析,如何划分用户不同 WiFi 行为区间?满足: 1)行为类型分为两种:连接(scan)、…

OceanbaseV4模拟题解析

使用 Docker 部署的 OceanBase 可以作为MetaDB&#xff0c;供OceanBase相关产品作为元数据数据库来使用。以下哪类产品需要MetaDB?&#xff08;AD&#xff09; ​ A OCP ​ B OBProxy ​ C OAT ​ D OMS MetaDB&#xff1a;基于容器部署的 OceanBase 数据库服务&#xff0c;可…

SpringBoot 集成JprotoBuf实现protobuf类型的接口

文章目录 前言一、实现protobuf类型的接口1. 编写 Controller2. 模拟客户端发起请求3. Postman中发起请求二、教程源码获取前言 这篇文章我们讲解了protoBuf和JprotoBuf的区别,并实现SpringBoot集成JprotoBuf:SpringBoot JprotoBuf序列化与反序列化的实现 本文将基于以上文…

大模型参数高效微调技术原理综述(三)-Prefix Tuning

Prefix Tuning是LLM微调技术中另一个重要的技术分支&#xff0c;于2021年由Stanford提出。 本文通过解读论文**《Prefix-Tuning: Optimizing Continuous Prompts for Generation》**&#xff0c;与小伙伴们一起学习理解Prefix Tuning思想和方法。 1.Abstract(摘要) 首先我们看…

Shell函数:递归函数、阶乘和函数库

文章目录 递归函数示例1&#xff1a;阶乘计算示例2&#xff1a;递归列出目录 函数库 递归函数 递归是指函数在其内部调用自身。递归函数常用于解决像阶乘、斐波那契数列等问题。 示例1&#xff1a;阶乘计算 阶乘&#xff08;Factorial&#xff09;是数学中的一种运算&#x…

计算机毕业设计hadoop+spark知识图谱课程推荐系统 课程预测系统 课程大数据 课程数据分析 课程大屏 mooc慕课推荐系统 大数据毕业设计

1.主要技术&#xff1a; 1.前端: Vue.js 2.后端: SpringBootMybatis - plus数据库: MySQL neo4j 3.算法(机器学习、深度学习):协同过滤算法(基于用户、基于物品全部实现)、神经网络混合CF推荐算法、MLP深度学习算法、SVD深度学习算法、线性回归、预测KNN、CNN卷积神经、LSTM情…

电子邮件混淆策略逃避安全保护

几十年来,网络攻击者一直使用电子邮件混淆技术将恶意代码或数据隐藏在文件、脚本或网络流量中。电子邮件混淆方法有很多,例如将地址放入机器人无法读取的图像、验证码或文本中。这种传统的电子邮件混淆策略众所周知,安全控制措施历来擅长修补和阻止它们。但最近,我们的威胁…

【HTML】开源模拟输入框动画

代码地址&#xff1a; https://uiverse.io/eslam-hany/strange-goose-48代码地址&#xff1a; https://uiverse.io/vnuny/moody-swan-60代码地址&#xff1a; https://uiverse.io/boryanakrasteva/hard-pig-16代码地址&#xff1a; https://uiverse.io/Harsha2lucky/lovely…

Ubuntu/Debian 上删除未使用的软件包

随着时间的推移&#xff0c;Linux 系统可能会有大量不再使用的软件包。这些软件包会占用大量磁盘空间&#xff0c;并可能降低系统的整体性能。 本指南将向您展示如何轻松地删除这些未使用的包。保持系统的干净和高效是很重要的&#xff0c;但是要小心&#xff0c;删除必要的软…

docker 镜像仓库的管理

目录 1 docker 镜像仓库介绍 1.1 什么是docker仓库 1.2 docker hub 2 docker仓库的工作原理 2.1 仓库中的三个角色 2.2 pull原理 2.3 push原理 3 使用互联网上提供的托管镜像仓库 3.1 docker hub 镜像仓库 3.1.1 docker hub 镜像仓库介绍 3.1.2 docker hub的使用方法 4 搭建doc…

学习日志30

论文名称&#xff1a;IBM Q Experience as a versatile experimental testbed for simulating open quantum systems 论文内容&#xff1a; 这篇论文详细探讨了IBM Q Experience作为一个实验平台&#xff0c;用于模拟和研究开放量子系统的多种模型和现象。开放量子系统是指那些…

更改了ip地址怎么改回来

在日常的网络使用中&#xff0c;‌我们有时会因为特定的需求更改设备的IP地址&#xff0c;‌比如解决IP冲突、‌访问特定网络资源或进行网络测试等。‌然而&#xff0c;‌更改IP地址后&#xff0c;‌我们可能又因为某些原因需要将IP地址改回原来的设置。‌本文将详细介绍如何改…

【国考】特值法

特值法 题干中存在乘除关系&#xff0c;且对应量未知。 例3&#xff1a;甲、乙、丙三个工程队的效率比为6&#xff1a;5&#xff1a;4,现将A、B两项工作量相同的工程交给这三个工程队,甲队负责A工程,乙队负责B工程,丙队参与A工程若干天后转而参与B工程.两项工程同时开工,耗时16…

新手如何学单片机

新手学习单片机可以按照以下步骤进行&#xff1a; 一、基础知识准备 学习电子基础知识&#xff1a;了解电压、电流、电阻等基本概念&#xff0c;以及它们在电路中的作用。学习计算机体系结构&#xff1a;理解计算机的基本组成和工作原理&#xff0c;包括CPU、内存、输入输出设…

【UE5】控件蓝图——树视图(TreeView)的基本使用

目录 前言 效果 步骤 一、显示根节点 二、显示子节点 前言 我们在视口中添加1个方块&#xff0c;2个球体&#xff0c;5个圆柱 它们在大纲视图中的层级关系如下&#xff0c;那么如何将这种层级关系显示在树视图中是本篇文章要解决的问题。 效果 步骤 一、显示根节点 1…

【设计模式】创建型模式——抽象工厂模式

抽象工厂模式 1. 模式定义2. 模式结构3. 实现3.1 实现抽象产品接口3.2 定义具体产品3.3 定义抽象工厂接口3.4 定义具体工厂3.5 客户端代码 4. 模式分析4.1 抽象工厂模式退化为工厂方法模式4.2 工厂方法模式退化为简单工厂模式 5. 模式特点5.1 优点5.2 缺点 6. 适用场景6.1 需要…

3.6 Browser -- useFullscreen

3.6 Browser – useFullscreen https://vueuse.org/useFullscreen 作用 响应式的Fullscreen API。可以让特定的元素占满屏幕&#xff0c;就是全屏的效果。 官方示例 const el ref<HTMLElement | null>(null)const { isFullscreen, enter, exit, toggle } useFulls…