Redis 基本全局命令

server/2024/12/26 8:20:43/

个人主页:C++忠实粉丝
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C++忠实粉丝 原创

Redis 基本全局命令

收录于专栏[redis]
本专栏旨在分享学习Redis的一点学习笔记,欢迎大家在评论区交流讨论💌

目录

KEYS

EXISTS 

DEL 

EXPIRE 

TTL

TYPE 


Redis 有 5 中数据结构,但它们都是键值对中的值,对于键来说有一些通用的命令。

KEYS

返回所有满足样式(pattern)的key。支持如下统配样式。

• h?llo 匹配 hello , hallo 和 hxllo

• h*llo 匹配 hllo 和 heeeello

• h[ae]llo 匹配 hello 和 hallo 但不匹配 hillo

• h[^e]llo 匹配 hallo , hbllo , ... 但不匹配 hello

• h[a-b]llo 匹配 hallo 和 hbllo 

语法:

KEYS pattern

命令有效版本:1.0.0 之后

时间复杂度:O(N)

返回值:匹配 pattern 的所有 key。

示例:

MSET:将多个键值对一次性存储到 Redis 中。如果指定的某个键已经存在,MSET 会覆盖它的值。如果某个键对应的值不存在,MSET 会新建该值。

注意:

keys 命令的时间复杂度是 O(N)

所以,在生产环境中,一般都会禁用 keys 命令,尤其是大杀器 keys * => 查询所有的 key!

因为生产环境中 key 可能会非常多!而 redis 是一个单线程的服务器,执行 keys* 的时间非常长,就使 redis 服务器被阻塞了,无法给其他客户端提供服务!

这样的后果可能是灾难性的~


redis 经常用于做缓存,挡在 mysql 前面,替 mysql 负重潜行的人,万一 redis 被一个 keys* 阻塞住了,此时其他的查询 redis 操作就超时了,此时这些请求就会直接查数据库,突然一大波请求过来了,mysql 措手不及,就容易挂了,整个系统就基本瘫痪了。如果你要是没能及时发现,及时恢复的话。。。

EXISTS 

判断某个 key 是否存在。 

语法:

EXISTS key [key ...]

命令有效版本:1.0.0 之后

时间复杂度:O(1)

返回值:key 存在的个数。

示例: 

 

注意:

分开的写法,会产生更多轮次的网络通信。

进行网络通信的时候,发送方发送一个数据,这个数据就要从应用层,到物理层,层层封装。(每一层协议都要加上报头或者尾)=> 发一个快递,要包装一下,要包装很多层,接收方收到一个数据,这个数据就要从物理层,到应用层层层分用(把每一层协议中的报头或者尾给拆掉)=> 收到一个快递,要拆快递,要拆很多层。 

DEL 

删除指定的 key。

语法:

DEL key [key ...]

命令有效版本:1.0.0 之后

时间复杂度:O(1) 

返回值:删除掉的 key 的个数 

示例:

 

Redis VS MySQL 的区别:

之前学 MySQL 的时候,当时强调,删除类的操作:

drop database

drop table

delete from...

都是非常危险的操作!!

一旦删除之后,数据就没有了~


但是 redis 主要的应用场景就是作为缓存~~

此时 redis 里存放的只是一个热点数据,全量数据是在 MySQL 数据库中。

此时,如果把 redis 中的 key 删除了几个,一般来说,问题不大~

但是,当然如果把所有的数据或者一大半数据一下都干没,这种影响会很大。(本来 redis 是帮 MySQL 负重前行,redis 没数据了,大部分的请求就直接打给 MySQL 然后就容易把 MySQL 搞挂)

相比之下,如果是 MySQL 这样的数据,哪怕误删了一个数据,都是可能影响很大的~

如果是把 redis 作为数据库,此时误删数据的影响就很大了

如果是把redis 作为消息队列(mq),这种情况误删数据影响不大,就需要具体分析了。

EXPIRE 

为指定的 key 添加秒级过期时间(Time to live TTL)

语法:

EXPIRE key seconds

命令有效版本:1.0.0 之后

时间复杂度:O(1)

返回值:1表示设置成功。0 表示设置失败

示例: 

TTL

获取指定 key 的过期时间,秒级。

语法:

TTL key

命令有效时间:1.0.0 之后

时间复杂度:O(1)

返回值:剩余过期时间。-1 表示没有关联过期时间,-2 表示 key 不存在

示例: 

一个 redis 中可能同时存在很多很多 key,这些 key 中可能很大一部分有过期时间,此时 redis 服务器咋知道哪些 key 已经过期要被删除,哪些 key 还没有过期?? 

redis 的整体策略是 :

1. 定期删除:

每次抽取一部分,进行验证过期时间,保证这个抽取检查的过程足够快!因为 redis 是单线程的程序,主要的任务(处理每个命令的任务)如果扫描过期 key 消耗的时间太多了,就可能导致正常处理请求被阻塞了。(产生了类似于执行 keys * 这样的效果) 

2. 惰性删除

假设这个 key 已经到过期时间了,但是暂时还没删它,key 还存在

紧接着,后面依次访问,正好用到了这个 key,于是这次访问就会让 redis 服务器触发删除 key 的操作,同时再返回一个 nil。

3. redis 为了对上述进行补充,还提供了一系列的内存淘汰策略,后面讲

TYPE 

返回 key 对应的数据类型。

语法:

TYPE key

命令有效版本:1.0.0 之后

时间复杂度:O(1)

返回值:none,string,list,set,zset,hash and stream。

示例:

本章只是抛砖引玉,给出几个通用的命令,为5中数据结构的使用做一个热身,后续我将对键管理做一个更为详细的介绍。感兴趣的宝子们千万不要错过啊~~ 


http://www.ppmy.cn/server/153271.html

相关文章

Llama 3 模型系列解析(一)

目录 1. 引言 1.1 Llama 3 的简介 1.2 性能评估 1.3 开源计划 1.4 多模态扩展 ps 1. 缩放法则 2. 超额训练(Over-training) 3. 计算训练预算 4. 如何逐步估算和确定最优模型? 2. 概述 2.1 Llama 3 语言模型开发两个主要阶段 2.2…

013__作用域(空间)

[ 基本难度系数 ]:★★☆☆☆ 一、基本概念 C语言中,标识符都有一定的可见范围,这些可见范围保证了标识符只能在一个有限的区域内使用,这个可见范围,被称为作用域(scope)。 软件开发中,尽量缩…

卷积神经网络(CNN)模型 CIFAR-10 数据集 例子

使用 TensorFlow 构建一个简单的卷积神经网络(CNN)模型,完成对 CIFAR-10 数据集的图像分类任务。 使用自动编码器作为特征提取器,先通过自动编码器对图像数据进行降维,将图像从高维映射到低维特征空间,然后…

【论文阅读】Comprehensive Review of End-to-End Video Compression

摘要: 近年来,端到端视频压缩作为一种新兴且有前景的解决方案开始在视频压缩领域受到关注。本文对端到端视频编码和解码技术的发展与现状进行了全面的综述,详细介绍了传统混合编码器和端到端编码器的基本原理。本研究深入探讨了从传统视频压…

【视觉惯性SLAM:相机成像模型】

相机成像模型介绍 相机成像模型是计算机视觉和图像处理中的核心内容,它描述了真实三维世界如何通过相机映射到二维图像平面。相机成像模型通常包括针孔相机的基本成像原理、数学模型,以及在实际应用中如何处理相机的各种畸变现象。 一、针孔相机成像原…

HarmonyOS NEXT 实战之元服务:静态案例效果--- 歌手推荐

背景: 前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考 先上本期效果图 ,里面图片自行替换 效果图1完整代码案例如下: import { authentication } …

AppAgent 源码 (xml 解析)

1. 数据准备 adb shell uiautomator dump /sdcard/output.xml # 获取手机ui界面的xml文件 adb pull /sdcard/output.xml output.xml # 将手机上的xml文件拉取到电脑上具体的xml文件&#xff1a; <?xml version1.0 encodingUTF-8 standaloneyes ?> <hierarchy ro…

威联通NAS部署openwrt软路由保姆级教程附镜像文件

创作立场&#xff1a;原创不易&#xff0c;拒绝搬运~ hello 大家好&#xff0c;我是你们的老伙伴&#xff0c;稳重的大王~ 本期教程为大家分享&#xff0c;怎么在NAS里面部署软路由&#xff0c;下面是软路由的镜像文件&#xff0c;有两个版本&#xff0c;400M的是定制版~ Sh…