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

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

解析“道作为序位生成器”的核心原理

解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制&#xff0c;重点解析"道作为序位生成器"的核心原理与实现框架&#xff1a; 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...

内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献

Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译&#xff1a; ### 胃肠道癌症的发病率呈上升趋势&#xff0c;且有年轻化倾向&#xff08;Bray等人&#xff0c;2018&#x…...