当前位置: 首页 > news >正文

Redis通用命令详解

文章目录

  • 一、Redis概述
    • 1.1 KEYS:查看符合模板的所有 key
    • 1.2 DEL:删除一个指定的 key
    • 1.3 EXISTS:判断 key 是否存在
    • 1.4 EXPIRE:给一个 key 设置有效期,有效期到期时该 key 会被自动删除
    • 1.5 TTL:查看一个 key 的剩余有效期
    • 1.6 COPY:复制 Redis 数据库中的数据到另一个数据库中
    • 1.7 MOVE:将 Redis 中的指定键移动到另一个数据库中
    • 1.8 TOUCH:修改指定键的最后访问时间
    • 1.9 RENAME: 修改一个键的名称
    • 1.10 RENAMENX:新名称的键不存在时执行修改
    • 1.11 TYPE:返回键所存储的值的类型
    • 1.12 PERSIST:移除 Redis 键的过期时间


一、Redis概述

Redis概述

在这里插入图片描述

1.1 KEYS:查看符合模板的所有 key

在这里插入图片描述

KEYS 命令在处理大量数据时可能会影响 Redis 服务器的性能,因为它会遍历所有 key 来寻找匹配的项。

在这里插入图片描述

在生产环境中,应该谨慎使用 KEYS 命令,尤其是在数据量巨大的情况下。

redis> MSET firstname Jack lastname Stuntman age 35
"OK"
redis> KEYS *name*
1) "lastname"
2) "firstname"
redis> KEYS a??
1) "age"
redis> KEYS *
1) "lastname"
2) "age"
3) "firstname"
redis> 

首先使用 MSET 命令设置了多个 key-value 对,分别为 firstnamelastnameage。然后使用 KEYS 命令查找符合指定模式的 key。

  • 第一个 KEYS 命令使用模式 *name*,返回所有包含 “name” 的 key,即 lastnamefirstname
  • 第二个 KEYS 命令使用模式 a??,返回所有以字母 “a” 开头并且后面有两个字符的 key,即 age
  • 最后一个 KEYS 命令使用模式 *,返回所有存在的 key,即 lastnameagefirstname

1.2 DEL:删除一个指定的 key

在这里插入图片描述

在 Redis 中,DEL 命令用于删除指定的 key,并返回成功删除的 key 的数量。

在这里插入图片描述

redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> DEL key1 key2 key3
(integer) 2
redis> 

使用 DEL 命令删除了两个 key,即 key1key2。因为这两个 key 存在且被成功删除,所以返回的结果是 (integer) 2

如果执行 DEL 命令删除了不存在的 key,那么返回的结果将是 (integer) 0,表示没有成功删除任何 key。


1.3 EXISTS:判断 key 是否存在

在这里插入图片描述

EXISTS 命令用于判断给定的 key 是否存在于 Redis 中。它可以同时接受多个 key,并返回存在的 key 的数量。如果 key 存在,则返回 1;如果 key 不存在,则返回 0。
在这里插入图片描述

redis> SET key1 "Hello"
"OK"
redis> EXISTS key1
(integer) 1
redis> EXISTS nosuchkey
(integer) 0
redis> SET key2 "World"
"OK"
redis> EXISTS key1 key2 nosuchkey
(integer) 2
redis> 

使用 SET 命令分别设置了 key1key2 的值。然后使用 EXISTS 命令来检查指定的 key 是否存在。

  • 第一个 EXISTS 命令执行 EXISTS key1,返回结果为 (integer) 1,表示 key1 存在。
  • 第二个 EXISTS 命令执行 EXISTS nosuchkey,返回结果为 (integer) 0,表示 nosuchkey 不存在。
  • 接下来执行 EXISTS key1 key2 nosuchkey,返回结果为 (integer) 2,表示其中两个 key 存在,即 key1key2,而 nosuchkey 不存在。

Tips:
在这里插入图片描述
如果在参数中多次提到相同的现有键,它将被计算多次。如果somekey存在,exists somekey somekey将返回2。


1.4 EXPIRE:给一个 key 设置有效期,有效期到期时该 key 会被自动删除

 命令用于设置键的过期时间,让键在一定时间后自动删除。这里是命令的详细解释:

EXPIRE key seconds [NX | XX | GT | LT]
  • key:要设置过期时间的键名。

  • seconds:过期时间,单位为秒。键在指定秒数后将会被自动删除。

  • NX:(可选)仅在键不存在时设置过期时间。

  • XX:(可选)仅在键已存在时设置过期时间。

  • GT:(可选)仅在键的当前过期时间大于给定过期时间时设置过期时间。

  • LT:(可选)仅在键的当前过期时间小于给定过期时间时设置过期时间。

  • NXXX 选项都未指定时,默认行为是设置键的过期时间,如果键不存在则创建键并设置过期时间。

  • NXXX 选项可以与 GTLT 选项结合使用,从而提供更精确的过期时间控制。

  1. 设置键 mykey 在 60 秒后过期:

    EXPIRE mykey 60
    
  2. 仅当键 mykey 存在时,设置它在 120 秒后过期:

    EXPIRE mykey 120 XX
    
  3. 仅当键 mykey 不存在时,设置它在 300 秒后过期:

    EXPIRE mykey 300 NX
    
  4. 仅当键 mykey 的当前过期时间大于 180 秒时,设置它在 180 秒后过期:

    EXPIRE mykey 180 GT
    
  5. 仅当键 mykey 的当前过期时间小于 240 秒时,设置它在 240 秒后过期:

    EXPIRE mykey 240 LT
    

在这里插入图片描述

redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
redis> SET mykey "Hello World"
"OK"
redis> TTL mykey
(integer) -1
redis> EXPIRE mykey 10 XX
(integer) 0
redis> TTL mykey
(integer) -1
redis> EXPIRE mykey 10 NX
(integer) 1
redis> TTL mykey
(integer) 10
redis> 

1.5 TTL:查看一个 key 的剩余有效期

在这里插入图片描述

TTL 命令用于获取 Redis 键的剩余生存时间(Time To Live,TTL)。

TTL key
  • key:要查询剩余生存时间的键名。

返回值

redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
redis> 
  • 返回键的剩余生存时间(TTL):

    • 如果键不存在或者键没有设置过期时间,返回 -1
    • 如果键存在且设置了过期时间,返回剩余生存时间的秒数。
  • 返回 -1 表示键不存在或者键没有设置过期时间。

  • 返回 0 表示键存在并且没有剩余生存时间,即键已经过期。

  • TTL 返回的时间单位是秒。


1.6 COPY:复制 Redis 数据库中的数据到另一个数据库中

在这里插入图片描述
COPY 命令用于复制 Redis 数据库中的数据到另一个数据库中。

COPY source destination [DB destination-db] [REPLACE]
  • source:要复制数据的源键名。

  • destination:目标键名,复制后的数据将存储在这个键中。

  • DB destination-db:(可选)目标数据库的索引号。默认为 0(即默认数据库)。

  • REPLACE:(可选)如果目标键 destination 已存在且有数据,使用 REPLACE 选项将会覆盖现有数据。如果未指定 REPLACE,并且目标键已存在,则 COPY 命令将会失败。

  • sourcedestination 参数必须是有效的键名。

  • 可以指定一个不同的目标数据库索引号,使数据被复制到该索引号对应的数据库中。

  • 使用 REPLACE 选项可以在目标键已存在时覆盖现有数据,否则命令会失败。

示例

  1. 将键 mykey 中的数据复制到键 mykey_copy 中:

    COPY mykey mykey_copy
    
  2. 将键 mylist 中的数据复制到键 mylist_backup 中,并指定目标数据库索引号为 1:

    COPY mylist mylist_backup DB 1
    
  3. 将键 myset 中的数据复制到键 myset_new 中,如果 myset_new 已存在则覆盖现有数据:

    COPY myset myset_new REPLACE
    

1.7 MOVE:将 Redis 中的指定键移动到另一个数据库中

在这里插入图片描述

MOVE 命令用于将 Redis 中的指定键移动到另一个数据库中。

MOVE key db
  • key:要移动的键名。

  • db:目标数据库的索引号,用于指定移动到哪个数据库中。

  • key 参数是要移动的键名,必须存在于当前数据库中。

  • db 参数是目标数据库的索引号,用于指定移动到哪个数据库中。索引号从 0 开始,Redis 默认支持 16 个数据库,可以通过配置进行扩展。

  1. 将键 mykey 移动到数据库索引号为 1 的数据库中:

    MOVE mykey 1
    
  • 如果目标数据库 db 不存在(例如超过了默认的 0 到 15 的范围),那么 MOVE 命令会返回错误。

  • 如果键 key 已经存在于目标数据库 db 中,那么 MOVE 命令将无效,不会导致任何数据移动。

  • 当键成功移动到目标数据库时,返回 1

  • 如果键已经存在于目标数据库中,或者数据库索引号超出范围,返回 0


1.8 TOUCH:修改指定键的最后访问时间

在这里插入图片描述

在 Redis 中,TOUCH 命令用于修改指定键的最后访问时间(last access time),从而更新键的过期时间。

TOUCH key [key ...]
  • key:一个或多个要更新最后访问时间的键名。

  • key 参数是一个或多个键名,用空格分隔。

  • TOUCH 命令主要用于更新 Redis 键的最后访问时间:

    1. 持久化存储:如果键设置了过期时间,通过 TOUCH 命令可以防止 Redis 自动清除这些键。
    2. 活跃用户追踪:可以用于跟踪哪些键最近被访问,用作活跃用户的标记或统计。
    3. LRU(最近最少使用)策略:Redis 在使用 LRU 策略管理内存时,可以通过 TOUCH 命令更新键的访问时间,从而影响键的淘汰顺序。
  1. 更新键 mykey 的最后访问时间:

    TOUCH mykey
    
  2. 更新多个键的最后访问时间:

    TOUCH key1 key2 key3
    
  • TOUCH 命令仅更新键的最后访问时间,不改变键的值或其他属性。
  • 如果指定的键不存在,TOUCH 命令会忽略该键,不会报错。
  • TOUCH 命令可以用于确保键不会在达到过期时间后被 Redis 主动清理,适用于需要持久化存储的场景。

返回值

redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> TOUCH key1 key2
(integer) 2
redis> 
  • 返回更新的键数目,即成功更新了多少个键的最后访问时间。

1.9 RENAME: 修改一个键的名称

在这里插入图片描述
在 Redis 中,RENAME 命令用于修改一个键的名称。

RENAME key newkey
  • key:要修改名称的键名。

  • newkey:键的新名称。

  • RENAME 命令用于将一个键的名称修改为新的名称。如果新的键名已经存在,则会覆盖原有键的值。

  1. 将键 mykey 的名称修改为 newkey

    RENAME mykey newkey
    
  • 如果键 key 不存在,则 RENAME 命令会返回错误。
  • 如果键 newkey 已经存在,它的值将被覆盖。

返回值

redis> SET mykey "Hello"
"OK"
redis> RENAME mykey myotherkey
"OK"
redis> GET myotherkey
"Hello"
redis> 
  • 当命令成功执行时,返回 OK。

1.10 RENAMENX:新名称的键不存在时执行修改

在这里插入图片描述

在 Redis 中,RENAMENX 命令用于将一个键的名称修改为新的名称,但只在新名称的键不存在时执行修改。

RENAMENX key newkey
  • key:要修改名称的键名。

  • newkey:键的新名称。

  • RENAMENX 命令会检查新名称 newkey 是否已经存在。

  • 如果 newkey 已经存在,则不执行任何操作,返回 0

  • 如果 newkey 不存在,则将 key 的名称修改为 newkey

  • 如果 key 不存在,则 RENAMENX 命令会返回错误。

  • RENAMENX 命令是原子操作,即在执行过程中不会出现部分成功的情况。

redis> SET mykey "Hello"
"OK"
redis> SET myotherkey "World"
"OK"
redis> RENAMENX mykey myotherkey
(integer) 0
redis> GET myotherkey
"World"
redis> 
  • 当成功将 key 的名称修改为 newkey 时,返回 1
  • 如果 newkey 已经存在,没有执行修改操作,则返回 0

1.11 TYPE:返回键所存储的值的类型

在这里插入图片描述
TYPE 命令用于返回键所存储的值的类型。

TYPE key
  • key:要查询类型的键名。
redis> SET key1 "value"
"OK"
redis> LPUSH key2 "value"
(integer) 1
redis> SADD key3 "value"
(integer) 1
redis> TYPE key1
"string"
redis> TYPE key2
"list"
redis> TYPE key3
"set"
redis> 

返回值

  • 返回键存储值的类型,可能的返回值有:
    • "none":键不存在。
    • "string":字符串类型。
    • "list":列表类型。
    • "set":集合类型。
    • "zset":有序集合类型。
    • "hash":哈希类型。
    • "stream":流类型。

注意事项

  • 如果键不存在,命令会返回 "none"
  • 如果键存储的值类型不在预期范围内,可能是由于该键已被其他操作修改。
  • 在 Redis 中,同一个键可以在不同时间存储不同类型的值。

1.12 PERSIST:移除 Redis 键的过期时间

在这里插入图片描述

PERSIST 命令用于移除 Redis 键的过期时间,使得键成为永久有效的,不再自动过期。

PERSIST key
  • key:要移除过期时间的键名。

返回值

redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
redis> PERSIST mykey
(integer) 1
redis> TTL mykey
(integer) -1
redis> 
  • 如果成功移除过期时间,返回 1
  • 如果键不存在过期时间,或者键不存在,返回 0

注意事项

  • 只有带有过期时间的键才能使用 PERSIST 命令来移除过期时间。
  • 如果键之前已经被设置为永不过期(即没有设置过期时间),PERSIST 命令会返回 0
  • 移除过期时间后,键将永久存在于 Redis 中,直到显式删除。

更多的通用命令可以去官网https://redis.io/docs/latest/commands/?group=generic查看哦~
在这里插入图片描述

相关文章:

Redis通用命令详解

文章目录 一、Redis概述1.1 KEYS:查看符合模板的所有 key1.2 DEL:删除一个指定的 key1.3 EXISTS:判断 key 是否存在1.4 EXPIRE:给一个 key 设置有效期,有效期到期时该 key 会被自动删除1.5 TTL:查看一个 ke…...

物联网设备安装相关知识整理

拓扑图 对于ADAM-4150先接设备的整体的供电。 ADAM-4150就涉及到几个电子元器件的连接,一个是485-232的转换器,一个是将RS-232转换为USB的转接口,因为现在的计算机很多都去掉了RS-232接口而使用USB接口。 4150右侧有个拨码,分别两…...

React实现H5手势密码

监测应用进入前后台 在JavaScript中,监听H5页面是否在前台或后台运行,主要依赖于Page Visibility API。这个API在大多数现代浏览器中都是支持的,包括苹果的Safari和谷歌的Chrome(也就基本覆盖了Android和iOS平台)。下…...

[leetcode hot 150]第十五题,三数之和

题目: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复…...

视频AI分析定时任务思路解析

序言: 最近项目中用到视频ai分析,由于sdk涉及保密,不便透露,仅对定时任务分析的思路作出分享,仅供参考。 1、定时任务 由于ai服务器的性能上限,只能同时对64个rtsp流分析一种算法,或者对8个rts…...

tcp 粘包和拆包 及 解决粘包方案

什么是粘包和拆包 .TCP 是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的 socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使…...

【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索20页论文及Python代码

【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索20页论文及Python代码 相关链接 【2024泰迪杯】A 题:生产线的故障自动识别与人员配置 Python代码实现 【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索Python代码实现 【2024泰迪…...

华为设备telnet 远程访问配置实验简述

一、实验需求: 1、AR1模拟电脑telnet 访问AR2路由器。 二、实验步骤: 1、AR1和AR2接口配置IP,实现链路通信。 2、AR2配置AAA模式 配置用户及密码 配置用户访问级别 配置用户telnet 访问服务 AR2配置远程服务数量 配置用户远程访问模式为AAA 配置允许登录…...

在HTML中,如何正确使用语义化标签?

在HTML中&#xff0c;使用语义化标签可以使得网页结构更加清晰和易于理解。以下是一些正确使用语义化标签的方法&#xff1a; 使用合适的标题标签&#xff08;h1-h6&#xff09;来标识网页的标题&#xff0c;以及页面中的各个区块的标题。 <h1>网页标题</h1> <…...

WHAT - 高性能和内存安全的 Rust(一)

目录 一、介绍1.1 示例代码1.2 关键特性内存安全零成本抽象&#xff1a;高效性能示例代码&#xff1a;使用迭代器的零成本抽象示例代码&#xff1a;泛型和单态化总结 并发编程&#xff1a;防止数据竞争Rust 并发编程示例Rust 的所有权系统防止数据竞争总结 丰富的类型系统包管理…...

八、C#运算符

C#运算符 晕杜甫是一种告诉编辑器执行特定的数学或逻辑操作的符号。C#有丰富的内置运算符&#xff0c;分类如下&#xff1a; 算术运算符关系运算符逻辑运算符位运算符赋值运算符其他运算符 算术运算符 下表显示了 C# 支持的所有算术运算符。假设变量 A 的值为 10&#xff0c…...

【HiveSQL】join关联on和where的区别及效率对比

测试环境&#xff1a;hive on spark spark版本&#xff1a;3.3.1 一、执行时机二、对结果集的影响三、效率对比1.内连接1&#xff09;on2&#xff09;where 2.外连接1&#xff09;on2&#xff09;where 四、总结PS 一、执行时机 sql连接中&#xff0c;where属于过滤条件&#…...

如何解决windows自动更新,释放C盘更新内存

第一步&#xff1a;首先关闭windows自动更新组件 没有更新windows需求&#xff0c;为了防止windows自动更新&#xff0c;挤占C盘空间&#xff0c;所以我们要采取停止Windows Update服务。按下WinR打开运行对话框&#xff0c;输入services.msc&#xff0c; 然后按Enter。在服务…...

初学51单片机之PWM实例呼吸灯以及遇到的问题(已解答)

PWM全名Pulse Width Modulation中文称呼脉冲宽度调制 如图 这是一个周期10ms、频率是100HZ的波形&#xff0c;但是每个周期内&#xff0c;高低电平宽度各不相同&#xff0c;这就是PWM的本质。 占空比是指高电平占整个周期的比列,上图第一个波形的占空比是40%&#xff0c;第二个…...

手机天线都去哪里了?

在手机的演变历程中&#xff0c;天线的设计和位置一直是工程师们不断探索和创新的领域。你是否好奇&#xff0c;现在的手机为什么看不到那些曾经显眼的天线了呢&#xff1f; 让我们一起揭开这个谜题。 首先&#xff0c;让我们从基础开始&#xff1a;手机是如何发出电磁波的&…...

计算机网络 —— 应用层(电子邮件)

计算机网络 —— 应用层&#xff08;电子邮件&#xff09; 电子邮件发送电子邮件的过程SMTP特性工作流程 电子邮件格式MIME关键组件工作方式 POP/IMAPPOP&#xff08;邮局协议&#xff09;IMAP&#xff08;因特网邮件访问协议&#xff09; 基于万维网的电子邮箱特点优势常见的基…...

Java18新特性(极简)

一、引言 自1995年Java语言首次亮相以来&#xff0c;它已经成为企业级应用、移动应用和游戏开发等领域不可或缺的一部分。随着技术的不断进步&#xff0c;Java也在持续演化&#xff0c;每个新版本都带来了诸多新特性和性能优化&#xff0c;旨在提升开发者的编程效率和应用程序的…...

vscode连接ssh远程服务器

当使用Visual Studio Code (VSCode) 连接SSH远程服务器时&#xff0c;可以遵循以下步骤。这些步骤将帮助你设置并连接到远程服务器&#xff0c;包括免密登录的设置&#xff08;如果需要&#xff09;。 一、安装并配置Remote-SSH插件 下载并安装VSCode&#xff1a;确保你已经下…...

【趣味测试】

编程过程中遇到的趣味知识 1 Cpp 1.1 浮点数计算 if (0.1 0.2 0.3) {std::cout << "0.1 0.2 0.3 true" << std::endl;} else {std::cout << "0.1 0.2 0.3 false" << std::endl;}if (0.1 0.3 0.4) {std::cout << &…...

数据结构经典面试之数组——C#和C++篇

文章目录 1. 数组的基本概念与功能2. C#数组创建数组访问数组元素修改数组元素数组排序 3. C数组创建数组访问数组元素修改数组元素数组排序 4. 数组的实际应用与性能优化5. C#数组示例6. C数组示例总结 数组是编程中常用的数据结构之一&#xff0c;它用于存储一系列相同类型的…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...

【实施指南】Android客户端HTTPS双向认证实施指南

&#x1f510; 一、所需准备材料 证书文件&#xff08;6类核心文件&#xff09; 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...