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

Redis——通用命令

目录

  • Redis通用命令
      • Redis中最核心的两个命令
        • get
        • set
      • Redis全局命令
        • keys
          • 语法
          • 注意事项
        • exists
        • del(delete)
        • expire
        • ttl
        • redis的key的过期策略是怎么实现的?
          • 了解拓展
        • type
        • 总结

Redis通用命令

Redis的命令非常非常多,所以

1. 掌握常用命令(多操作练习)
2. 学会使用Redis的文档

Redis官方链接
在这里插入图片描述

Redis中最核心的两个命令

get
根据key来取value
set
把key和value存储进去
key和value本质都是字符串

必须要进入redis客户端才能执行redis命令

set key value

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

redis中的命令不区分大小写

get key

get命令直接输入key就能得到value,如果当前key不存在,会返回一个nui 和 null/NULL是一个意思

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Redis全局命令

Redis支持很多种数据结构,整体来说Redis是键值对结构,key固定就是字符串,value实际上会有很多种类型(常用的有 字符串,哈希表,列表,集合,有序集合)————操作不同的数据结构,就会有不同的命令

全局命令,就是能够任意搭配任意一个数据结构来使用的命令

keys

用来查询当前服务器上匹配的key,通过一些特殊符号(通配符)来描述key的模样,匹配上述模样的key就能被查询出来

语法
keys pattern/*pattern 用来描述另外的字符串是长什么样的
具体写法,支持那些通配符?
1. ? 匹配任意一个字符
2. * 匹配0个或者多个任意字符
3. [abcde] 只能匹配到a,b,c,d,e
4. [^e] 排除e,只有e匹配不了,其他的都能匹配
5. [a-b] 匹配a-b这个范围内的字符,包含两侧边界
*/

在这里插入图片描述

  1. 匹配任意一个字符

    在这里插入图片描述

  2. *** ** 匹配0个或者多个任意字符

    在这里插入图片描述

  3. [abcde] 只能匹配到a,b,c,d,e

在这里插入图片描述

  1. [^e] 排除e,只有e匹配不了,其他的都能匹配
    在这里插入图片描述

  2. [a-b] 匹配a-b这个范围内的字符,包含两侧边界

在这里插入图片描述

注意事项
keys的时间复杂度为O(n),所以,在生产环境上,一般都会禁止使用keys命令,尤其是keys
生产环境上的keys可能会非常的多,而redis是一个单线程的服务器,执行keys*的时间非常长,就导致redis服务器被阻塞了,无法给其他客户端提供服务
redis经常会用于做缓存,挡在mysql的前面,玩意Redis被一个kesy*阻塞住,此时其他的redis操作就超时了,此时这些请求就会直接查数据库,突然有一大波请求过来,mysql措手不及,就容易挂,从而导致整个系统直接瘫痪
exists
EXISTS key [key ...] 判断某个key是否存在
返回值:key存在的个数。  针对多个key来说是非常有用的
时间复杂度 O(1) ————> redis组织这些key就是按照哈希表的方式来组织的 相当于unordered_map<key,value>

在这里插入图片描述

del(delete)
DEL key [key ...] 删除指定的key,可以一次删除一个或者多个在之前学mysql的时候,删除类的操作,就很危险,一旦删除了之后,数据局就没了
但是redis主要的应用场景,就是作为缓存,此时 redis里存的只是热点数据
全量数据存在mysql数据库中,此时如果把redis中的key删除了几个,一般来说问题不大
如果把redis作为数据库,此时误删数据影响就大了

在这里插入图片描述

expire
EXPIRE key seconds
时间复杂度 O(1)
返回值:1表示成功,0表示设置失败
设置毫秒:  pexpire key ms
作用是给指定的key设置过期时间,key存活时间超出这个指定的值,就会被自动删除
比如手机验证码,几分钟内有效,就可以用到,还有外卖优惠券,在指定时间之内有效等

在这里插入图片描述

ttl

TTL key

获取指定的过期时间

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

redis的key的过期策略是怎么实现的?

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

如果直接遍历所有的key,显然是行不通的,效率非常低

Redis整体的策略是:

  • 定期删除

  • +

  • 惰性删除

  1. 什么叫惰性删除,假设这个key已经到时间了,但是暂时还没删除它,key还存在,紧接着后面又一次访问正好用到了这个key,于是这次访问会让redis服务器触发删除key的操作,同时返回一个nil——————感觉这种方式有点像单例模式里的懒汉模式
  2. 为什么对于定期删除的时间,有明确的要求? 因为redis是单线程的程序,如果扫描过期key消耗的时间太长,正常处理请求命令就被阻塞了
  3. 虽然有了这两种策略结合,但是整体效果一般,仍然会有很多过期的key残留,没有及时删除掉,所以redis为了对上述进行补充,还提供了一系列的内存淘汰策略
了解拓展

定时删除:设置定时器,在时间到了之后,对其删除。

  • redis中并没有采取定时器的方式来实现过期key的删除,所以定期删除和定时器并没有关系

定时器:在某个时间到达之后,执行指定的任务

实现方式:

  1. 基于优先级队列/堆

在redis过期key的场景中,就可以通过“过期时间越早,优先级越高”,过期时间早的,先出队列。也就意味着,此时定时器中只要分配一个线程,让这个线程去检查队首元素,看是否过期即可,如果队首元素还没过期,后续元素一定没有过期。扫描线程不需要遍历所有的key,只盯住这一个队首元素即可;另外在扫描线程检查队首元素过期时间的时候,也不能检查的太频繁,此时做法就可以根据当前时刻和队首元素的过期时间,设置一个等待时间,等时间差不多到了,系统再唤醒在这个线程。——>此时扫描线程不需要高频扫描队首元素,把CPU的开销也省了下来。

  1. 基于时间轮实现的定时器

把时间划分成很多小段,没小段上都挂着一个链表,每个链表都代表一个要执行的任务(相当于一个函数指针),每次走到一个格子,就会把这个格子上的链表的任务尝试执行以下。

Redis并没有采取上述的方案

type
语法:TYPE key
时间复杂度:O(1)
返回值:key对应的vualue的数据类型[none,string,list,set,zset,hash,stream,...]

在这里插入图片描述

总结
  • keys:用来查看匹配规则的key
  • exists:用来判定指定key是否存在
  • del:删除指定的key
  • expire:给key设置过期时间
  • ttl:查询key的过期时间
  • type:查询key对应的value的类型

相关文章:

Redis——通用命令

目录 Redis通用命令Redis中最核心的两个命令getset Redis全局命令keys语法注意事项 existsdel(delete)expirettlredis的key的过期策略是怎么实现的&#xff1f;了解拓展 type总结 Redis通用命令 Redis的命令非常非常多&#xff0c;所以 1. 掌握常用命令&#xff08;多操作练习…...

(k8s)kubernetes 挂载 minio csi 的方式(pod挂载pvc存在csi驱动问题,挂载不上)

一、安装Minio&#xff08;Minio分布式集群搭建部署_minio集群最少几台-CSDN博客&#xff09; 生成accessKeyID和secretAccessKey&#xff1a; 二、安装csi-s3插件(在k8s集群上) 首先我们把插件的yaml文件都下载下来&#xff0c;为了保证版本测试的一致性&#xff0c;我们下载…...

python tkinter

基本使用 基于tkinter创建 GUI基本四步&#xff1a;窗口->组件->布局->事件 1.创建窗口对象 from tkinter import *root Tk() # 创建窗口root.mainloop() # 进入事件循环 2.创建组件 按钮文本等组件 btn Button(root) # 创建Button组件&#xff0c;使组件在…...

Flink CEP(复杂事件处理)高级进阶

Flink CEP(Complex Event Processing,复杂事件处理)是 Apache Flink 中用于复杂事件模式检测的库。它允许用户定义复杂的事件模式,从流数据中检测出符合模式的事件序列。这在实时监控、欺诈检测、用户行为分析等场景中非常有用。 Flink CEP 高级进阶 为了深入理解和使用 …...

libmodbus:写一个modbusTCP服务

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

函数模板(初阶)

Hello&#xff0c;大家好&#xff0c;我们大家都知道&#xff0c;C这个编程语言是由C语言继承而来的&#xff0c;因为是继承&#xff0c;所以我们的C就要做出一些区分&#xff0c;要不然的话&#xff0c;就和C语言没有本质上的区别了&#xff0c;我们现在在社会中使用比较多的是…...

中间件之RocketMQ

RocketMQ是一个开源的分布式消息队列系统&#xff0c;起源于阿里巴巴集团内部。最初&#xff0c;RocketMQ&#xff08;前身为Metaq&#xff09;被设计为满足阿里巴巴集团内部大规模分布式系统下的高吞吐量、低延迟和高可靠性的消息传递需求。随着其在阿里巴巴内部的广泛应用和不…...

linux第二课(docker的安装使用)

目录 一.关于docker (1)背景引入 (2)docker介绍 (3)功能 (4)Docker架构 二.docker的安装及相关的命令 (1)docker的安装 (2)docker的配置 (3)docker镜像命令 (4)容器命令 三.docker安装myaql ​编辑 四.数据卷挂载 1.数据卷挂载引入 2.数据卷挂载图解 3.数据卷的安装…...

Java数据存储结构——二叉查找树

文章目录 22.1.2二叉查找树22.1.2.1 概述22.1.2.1二叉查找树添加节点22.1.2.2二叉查找树查找节点22.1.2.3 二叉树遍历22.1.2.4 二叉查找树的弊端 22.1.2二叉查找树 22.1.2.1 概述 二叉查找树,又称二叉排序树或者二叉搜索树 二叉查找树的特点&#xff1a; 每一个节点上最多有…...

JavaScript 事件处理

一、简介 ​ 事件&#xff1a;发生在HTML元素上的事情&#xff0c;可以是用户的行为&#xff0c;也可以是浏览器的行为&#xff0c;如 用户点击了某个HTML元素用户将鼠标移动到某个HTML元素上用户输入数据时光标离开页面加载完成 ​ 事件源&#xff1a;事件触发的源头&#xf…...

容器技术--Docker应用部署

应用部署 容器部署mysql 搜索并拉取镜像;基于镜像启动容器,注意端口映射、目录映射启动后即可连接# 搜索镜像 docker search mysql # 拉取镜像 docker pull mysql:5.7 # docker pull mysql 默认拉取最新的# 创建mysql容器, -p端口映射(宿主端口:容器端口) -e 环境变量,镜…...

医院管理|基于java的医院管理系统小程序(源码+数据库+文档)

医院管理系统小程序 目录 基于java的医院管理系统小程序 一、前言 二、系统设计 三、系统功能设计 医生信息管理 排班信息管理 科室信息管理 科室预约 病历信息 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a;…...

golang学习笔记21——golang协程管理及sync.WaitGroup的使用

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…...

C++初阶大全

目录 一.命名空间 1.命名空间定义 2.命名空间使用 二.C输入&输出 三.缺省参数 四. 函数重载 五.引用 1.常引用 2.传值、传引用效率比较 3.引用和指针的区别 4.引用和指针的不同点: 小知识点: 六.内联函数 七.auto关键字(C11) 1.auto的使用细则 八.基于范围…...

使用Redis实现用户关注博客的推模式

目录 一、思路 二、实现代码&#xff1a; 一、思路 发布者&#xff1a; 这里采用redis的zset结构&#xff0c;将键设置为被推送用户id&#xff0c;值设置为博客id&#xff0c;score设置为时间戳 推送之前先查到当前发布博客用户的粉丝有哪些&#xff0c;然后去循环挨个推送…...

python常用模块之time、datetime、randow(14)

文章目录 前言1、time模块1.1 导入模块1.2 使用方法1.2.1 时间戳1.2.2 程序休眠1.2.3 扩展&#xff1a;按某种格式显示当前时间1.2.4 结构化时间 2、datetime模块2.1 导入模块2.2 使用方法2.2.1 得到当前系统的时间2.2.2 拓展&#xff1a;编写一个时钟小程序 3、random模块3.1 …...

根据NVeloDocx Word模板引擎生成Word(六-结束)

前面几篇已经把E6开发平台配套的Word模版隐藏NVeloDocx的基础用法介绍了一遍&#xff0c;这些基础用法基本上可以完全覆盖实际业务的绝大部分需求。所以我们这一篇就介绍一些边边角角的内容&#xff0c;给本系列来一个首尾。 本篇的主要内容有&#xff1a; 1、汇总计算&#…...

Android架构组件:MVVM模式的实战应用与数据绑定技巧

目录 引言 一、MVVM模式概述 1.1 MVVM模式简介 1.2 MVVM模式的优势 二、MVVM模式的实现 2.1 项目环境配置 2.2 创建MVVM组件 2.2.1 创建数据模型 2.2.2 创建数据仓库 2.2.3 创建ViewModel 2.2.4 创建布局文件 2.2.5 创建RecyclerView适配器 2.3 在Activity中绑定V…...

调用系统的录音设备提示:line with format PCM_SIGNED 16000.0 Hz

javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 16000.0 Hz, 8 bit, mono, 1 bytes/frame, not supported. 打开 设置->隐私->麦克风->允许应用访问你的麦克风 与 16000Hz没关系 与 16000Hz没关系 与 16000Hz没关系...

android BLE 蓝牙的连接(二)

下面是基于实际的项目得到的具体步骤及核心代码 1、权限问题 先判断手机是否满足android4.3以上版本&#xff0c;再判断手机是否开启蓝牙 主要涉及蓝牙权限和位置权限&#xff0c;注意不同android版本之间权限申请的差异&#xff0c;以及android权限动态申请和静态申请的区别 …...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...