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

【Redis基础】Redis基本的全局命令

✅作者简介:大家好,我是小杨
📃个人主页:「小杨」的csdn博客

🐳希望大家多多支持🥰一起进步呀!


Redis基本的全局命令

1,KEYS命令

语法:KEYS pattern

KEYS命令用来查询服务器上所有满足样式(pattern)的 key,使用该命令的时间复杂度为O(N)。

注:在生产环境上一般会禁止使用KEYS命令,这是因为Redis是一个单线程服务器,当Redis中的数据量较多时,执行KEYS命令的时间较长,就导致Redis服务器阻塞,进而无法给其他客户端提供服务。

KEYS命令⽀持如下统配样式:

  1. ?:匹配一个任意字符,如:h?llo 匹配 hello,hallo 和 hxllo。
  2. *:匹配0个或多个任意字符,如:h*llo 匹配 hllo 和 heeeello。
  3. [abc]:只能匹配到[]里面指定的字符,如:h[ae]llo 匹配 hello 和 hallo 但不匹配 hillo。
  4. [^a]:排除[]里面指定的字符,如:h[^e]llo 匹配 hallo,hbllo,… 但不匹配 hello。
  5. [a-c]:匹配[]里面指定的字符范围,包含两侧边界,如:h[a-b]llo 匹配 hallo 和 hbllo。

数据准备:

image-20231124111952253

具体实例:

1)?:匹配一个任意字符

image-20231124111918131

2)*:匹配0个或多个任意字符

image-20231124112205218

3)[ae]:只能匹配到[]里面指定的字符

image-20231124112442087

4)[ ^abc]:排除[]里面指定的字符

image-20231124112549510

5)[a-b]:匹配[]里面指定的字符范围

image-20231124112704974


2,EXISTS命令

语法:EXISTS key [key …]

EXISTS命令是判断指定的KEY是否存在,KEY可以是一个也可以是多个,返回的是KEY存在的个数。

一次查询多个KEY是否存在与分多次查询KEY是否存在相比的好处是:减少了网络开销和调用内存的开销,执行效率更高。

在实际应用中,选择哪一种方式通常取决于具体的需求,如果是为了减少网络开销,使用一次查询多个KEY;如果想更精细地判断每个键的存在性,使用分多次查询KEY比较合适。

数据准备:

image-20231124112844247

具体操作:

image-20231124113045961


3,DEL命令

语法:DEL key [key …]

DEL命令是删除指定的KEY,KEY可以是一个也可以是多个,返回的是删除Key的个数。

数据准备:

image-20231124112844247

具体操作:

image-20231124113203427


4,EXPIRE命令

语法:EXPIRE key seconds

EXPIRE命令用于给指定的KEY设置过期时间,设置的时间单位为秒,返回的结果是0或1。【0表示设置失败,1表示设置成功】

EXPIRE命令通常与TTL命令搭配使用,当KEY存活时间超过所设置的过期时间,就会被自动删除。

EXPIRE命令可用于很多业务场景,例如规定时间内完成业务操作【倒计时】,基于Redis实现分布式锁。

具体操作:

image-20231124113538564


问1:Redis的Key的过期策略是怎么实现的?

答:Redis 使用的是一种被称为惰性删除(Lazy Expire)的过期策略。具体来说,Redis 不会立即删除已过期的键值对,而是在访问某个键时,会检查该键是否过期,如果过期则会进行删除操作。

问2:使用惰性删除的过期策略有哪些优点和缺点?

答:使用惰性删除的过期策略的优点是:可以减少系统开销,只在需要时删除过期数据,提高性能和效率,避免了堵塞;而其缺点是:可能导致存储空间的浪费,因为过期数据并不立即删除,而是等到访问时才进行清理,不适用于对实时性要求非常高的业务场景。

问3:有没有其他的方法作为Redis的Key过期策略?

  1. 定期删除: Redis会定期地随机抽取一部分设置了过期时间的键,检查它们是否过期,如果过期则删除。这样可以在一定程度上避免惰性删除可能导致的键在内存中存留的时间较长问题。但定期删除也有可能带来一些性能开销,特别是在扫描大量键时。
  2. 定时任务: 基于优先级队列和基于时间轮的定时器是两种常见的实现方式,定时检查并删除过期的键。这是一种手动维护的方式,适用于对过期键的管理要求较为严格的场景。

问4:基于优先级队列的定时器简单介绍?

在基于优先级队列的定时器中,会将需要执行的任务按照执行时间加入优先级队列,优先级规则为过期时间越早,其优先级就越高;定时器会定期检查队列头部,查看队首任务的执行时间是否已经到期,如果已经过期,就会执行删除key的操作并将其从队列中移除。而在这个过程中,不需要遍历所有的key,只需要关注队列的头部。

另外,在检查队首元素的过期时间操作不能够太频繁,过于频繁会影响性能,此时的做法是根据当前系统的时间和队首元素的过期时间设置一个线程等待时间,当到了时间,就唤醒线程执行对应的操作,这种做法就避免了频繁检查,减少CPU开销,使得性能更高。【当线程在休眠时,新增一个更早过期的key,这时就要先唤醒当前线程,然后再重新根据当前系统时间和队首时间设置删除等待时间 …】

问5:基于时间轮的定时器简单介绍?

在基于时间轮的定时器中,通常使用时间轮数据结构来实现定时任务的调度和执行。时间轮是一种将时间划分为若干个槽(slot)的数据结构,每个槽表示一个时间单位。时间轮按照时间的流逝,不断地顺时针移动,使得每个槽的时间逐渐增加。

时间轮调度器的时间精度不是很高,对于精度要求特别高的调度任务可能不太适合,因为时间轮算法的精度取决于时间段指针单元的最小粒度大小。比如时间轮的格子是一秒跳一次,那么调度精度小于一秒的任务就无法被时间轮所调度。

时间轮底层采用数组实现,数组中的每个元素可以存放一个定时任务列表(TimerTaskList)。TimerTaskList 是一个环形的双向链表,链表中的每一项表示的都是定时任务项(TimerTaskEntry),其中封装了真正的定时任务 TimerTask。

image-20231124132255694

5,PEXPIRE命令

语法:PEXPIRE key milliseconds

PEXPIRE命令用于给指定的KEY设置过期时间,设置的时间单位为毫秒,返回的结果是0或1。【0表示设置失败,1表示设置成功】

PEXPIRE命令通常与PTTL命令搭配使用,当KEY存活时间超过所设置的过期时间,就会被自动删除。


6,TTL命令

语法:TTL key

TTL命令用于查询指定的KEY剩余的生存时间,以秒为单位,返回的是给定key的剩余生存时间(TTL,time to live)。

TTL命名有三种返回值,分别为【key的剩余生存时间】,-1【key未设置过期时间】,-2【key不存在】。

具体操作:


7,PTTL命令

语法:PTTL key

PTTL命令用于查询指定的KEY剩余的生存时间,以毫秒为单位,返回的是给定key的剩余生存时间。

PTTL命名有三种返回值,分别为【key的剩余生存时间】,-1【key未设置过期时间】,-2【key不存在】。


8,TYPE命令

语法:TYPE key

TYPE命令用于判断指定KEY的Value数据类型,返回的是key所储存的值的类型,可以是none,string,list,set,zset,hash,stream … 。

数据准备:

image-20231124114124041

具体操作:

image-20231124114218165


本文小结:Redis有哪些基本全局命令?

  1. KEYS:查询服务器中所有满足 pattern 的 KEY。语法:keys pattern,
  2. EXISTS:判断指定的KEY是否存在,返回KEY存在的个数。语法:exists key [key …]
  3. DEL:删除指定的KEY,返回的是删除KEY的个数。语法:del key [key …]
  4. EXPIRE/PEXPIRE:给指定的KEY设置过期时间,返回的结果是0或1。语法:expire/pexpire key seconds/milliseconds
  5. TTL/PTTL:查询指定的KEY剩余的生存时间,返回的结果是key的剩余生存时间,-1【key未设置过期时间】,-2【key不存在】。语法:ttl/pttl key
  6. TYPE:判断指定KEY的Value数据类型,返回的是key所储存的值的类型。语法:type key

结语

这就是本期博客的全部内容啦!如果有什么其他的问题无法自己解决,可以在评论区留言哦!

最后,如果你觉得这篇文章写的还不错的话或者有所收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(点赞👍,评论✍,收藏📖),多多支持一下!各位的支持是我最大的动力,后期不断更新优质的内容来帮助大家,一起进步。那我们下期见!

在这里插入图片描述


相关文章:

【Redis基础】Redis基本的全局命令

✅作者简介:大家好,我是小杨 📃个人主页:「小杨」的csdn博客 🐳希望大家多多支持🥰一起进步呀! Redis基本的全局命令 1,KEYS命令 语法:KEYS pattern KEYS命令用来查询服…...

Vite 了解

1、vite 与 create-vite 的区别 2、vite 解决的部分问题 3、vite配置文件的细节 3.1、vite语法提示配置 3.2、环境的处理 3.3、环境变量 上图补充 使用 3.4、vite 识别,vue文件的原理 简单概括就是,我们在运行 npm润dev 的时候,vite 会搭起…...

oracle常用通用sql脚本——查询前用户的表空间信息

oracle常用通用sql脚本——查询前用户的表空间信息 一、查询前用户的表空间信息1、 查询当前用户的所有表空间2、 已G为单位3、 已MB为单位 二、以上俩段sql查出结果集存在差异的原因 一、查询前用户的表空间信息 1、 查询当前用户的所有表空间 SELECT * FROM dba_tablespace…...

Python内置类属性`__name__`属性的使用教程

更多Python学习内容:ipengtao.com Python中的__name__是一种内置的特殊属性,通常用于判断模块是作为主程序运行还是作为模块被导入。本文将深入讲解__name__属性的用法,通过丰富的示例代码展示其在不同情景下的应用。 模块作为主程序运行 当一…...

BUUCTF-pwn-ciscn_2019_ne_51

简单查看保护: 32为程序没有canary没有PIE,应该是简单的栈溢出。我们照着这个思路去找溢出点在哪,运行下程序看看什么情况: 程序上来是输入一个密码验证。随便输入下错误直接退出。因此我们需要到IDA中看看怎么回事: 主…...

【限时免费】20天拿下华为OD笔试之【哈希表】2023Q2B-选修课【欧弟算法】全网注释最详细分类最全的华为OD真题题解

文章目录 题目描述与示例题目描述输入输出示例一输入输出说明 示例二输入输出说明 解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描述 现有两门选修课,每门选修课都有一部分学生选修,每个学生都有…...

Android关于杀掉进程的方案

《风波莫听穿林打叶声》—— 苏轼 〔宋代〕 三月七日,沙湖道中遇雨,雨具先去,同行皆狼狈,余独不觉。已而遂晴,故作此词。 莫听穿林打叶声,何妨吟啸且徐行。 竹杖芒鞋轻胜马,谁怕?一蓑…...

mysql数据库基本概念简介

概述 为什么要使用数据库? 答:实现数据的持久化。 数据库存储类型多样,存储量大。由于其他文件等介质。 概念 DB:database(数据库),保存数据的仓库,本质是一个文件系统。 DBMS:数据库管理系统,常说的Mysql数…...

前端开发_HTML

简介 CSS用于美化内容 HTML用于摆放内容 可以理解为HTML是基础&#xff0c;CSS是工具 HTML定义 HTML 超文本标记语言——HyperText Markup Language 超文本——链接 标记——标签&#xff0c;即带尖括号的文本 标签语法 双标签 开始标签&#xff1a; <xxx> 即尖…...

1.Spring源码解析-ClassPathXmlApplicationContext

此类是读取spring的xml配置文件并解析。也是源码入口之一。 我们调试即将开始。 传递给父类设置值 经调试我们得到是给AbstractApplicationContext设置默认的应用上下文父级的值&#xff0c;很明显是空 给父类AbstractRefreshableConfigApplicationContext设置属性 刷新容器…...

android 动态创建selector状态选择器 动态创建Drawable

最近在做一个使用接口返回的字符串&#xff1a;"#ff0000" 来动态设置drawable背景颜色与动态设置状态选择器selector的需求&#xff0c;之前写习惯了shape的xml&#xff0c;还是第一次写动态的&#xff0c;有点搞笑&#xff0c;搞笑的是自己没写过&#xff0c;不知道…...

Python与设计模式--责任链模式

23种计模式之 前言 &#xff08;5&#xff09;单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、&#xff08;11&#xff09;策略模式、责任链模式、命令模式、中介者模…...

(C)一些题6

1.正确定义符号常量PI的宏定义为 A.define PI 3.14 B.define PI 3.14: C。#define PI 3.14 D #define PI 3.14&#xff1b; 2。关于字符数组的描述中错误的是() A.字符数组可以存放字符串 B.字符数组中的字符串可以整体输入和输出 C。可以在赋值语句中通过运算符“”对…...

基于单片机的肺活量检测系统(论文+源码)

1.系统设计 在基于单片机的肺活量检测系统中&#xff0c;在硬件上整个系统通过利用主控制器STC89C52单片机来实现对整个系统进行控制的功能&#xff0c;通过采用LCD1602实现实时液晶显示数据的功能&#xff0c;通过肺活量传感器XGZP6847ADC0832实现监测肺活量的工作&#xff0…...

【开题报告】海洋多源数据质量控制应用服务的WebServer设计与实现

开 题 报 告 内 容 论文选题的意义、主要研究内容和文献资料调研情况 一、选题意义 在当今世界研究自然环境的大背景下&#xff0c;计算机技术与各学科、各领域的综合应用逐渐增多。作为地球上最广阔的水体&#xff0c;同时也是地球上决定气候发展的主要的因素之一&#xff0…...

接单平台在精不在多,劝诸位程序员找个好平台!

程序员想找兼职搞副业&#xff0c;结果知乎上逛了一大圈&#xff0c;各种平台推荐&#xff0c;可以说是眼花缭乱。要么就是平台一搜&#xff0c;各种劝退&#xff01;好好好&#xff0c;就问一句&#xff0c;还搞不搞&#xff1f;Of course~有钱还不赚的是傻子。加班摸鱼的时候…...

mybatis关于namespace以及id以及Mapper接口命名的说明(了解)

1、建库建表 CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );INSERT INTO t_emp(emp_name,emp_salary) VALUES("tom",200.33); INSERT INTO…...

MySQL中的锁(简单)

目录 1. 共享锁&#xff08;Shared Lock&#xff09;&#xff1a; 2. 排他锁&#xff08;Exclusive Lock&#xff09;&#xff1a; 3. 行级锁&#xff08;Row-Level Lock&#xff09;&#xff1a; 4. 页级锁&#xff08;Page-Level Lock&#xff09;&#xff1a; 5. 表级锁…...

【独家OD2023C卷真题】20天拿下华为OD笔试【贪心】2023C-分配土地最大面积【欧弟算法】全网注释最详细分类最全的华为OD真题题解

文章目录 题目描述与示例题目描述输入描述输出描述备注示例一输入输出说明 示例二输入输出说明 解题思路单种颜色的最小覆盖面积多种颜色的最小覆盖面积 代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描述 从前有个村庄&#xf…...

省市区编码sql

CREATE TABLE area (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主键,code varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 编码,name varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 名称,parent_code varchar(64) COLLATE utf8mb4_bin DEFAULT NULL CO…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...