当前位置: 首页 > 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…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...