2.Redis 通用命令

news2024/9/27 23:23:51

Redis 中最核心的两个命令:

set

作用:设置 key 对应的 value 值并存储进去。若key已包含一个值,则无论其类型如何,都会覆盖该值。在SET操作成功时,将丢弃与密钥相关联的任何先前生存时间。
在这里插入图片描述
对于上述这里的 key和value ,不需要加上引号,直接就是表示字符串的类型~~
当然,如果要是给 key 和 value 加上引号也是可以的(单引号或者双引号都可以)
redis 中的命令与mysql一致不区分大小写

get

作用:根据 key 来获取 value值
在这里插入图片描述
如果当前key不存在,那么返回 nil , 和 null / NULL一个意思
在这里插入图片描述

基本全局命令

在这里插入图片描述
Redis 有5种数据结构,但它们都是键值对这种的值,对于键来说有⼀些通⽤的命令。而全局命令,就是能够搭配任意一个数据结构来使用的命令~~

keys

作用:用来查询当前服务器上匹配的key
通过一些特殊符号(通配符)来描述 key 的模样,匹配上述模样的 key 就能够被查询出来
返回所有满⾜样式(pattern)的key。⽀持如下统配样式。

  • h?llo 匹配 hello , hallo 和 hxllo ? 匹配任意一个字符
  • h*llo 匹配 hllo 和 heeeello *匹配0个或者多个任意字符
  • h[ae]llo 匹配 hello 和 hallo 但不匹配 hillo [abcde] 只能匹配到 a b c d e,别的不行,相当于给出了固定的选项了
  • h[^e]llo 匹配 hallo , hbllo,但不匹配 hello [^e] 排除e, 只有e 匹配不了,其他的都能匹配
  • h[a-b]llo 匹配 hallo 和 hbllo [a-b] 匹配 a - b 这个范围内的字符,包含两侧边界

语法: keys pattern
注意事项
keys 命令的时间复杂度是 O(N)
所以,在生产环境上,一般都会禁止使用keys命令。尤其是大杀器 keys *。
生产环境上的 key * 可能会非常多!而redis是一个单线程的服务器,执行keys *的时间非常长,就使得 redis 服务器被阻塞了,无法给其他客户端提供服务!

exists

作用:判断 key 是否存在。
语法:exists key [key ...]
返回值:key 存在的个数。
时间复杂度:O(N),这里的N不是总的 key 数量N,而是你索需要查询的 key 的个数,如果是查询的key个数为1个,那么就是O(1)
在这里插入图片描述

del

作用:删除指定的 key
语法:del key [key ...]
返回值:删除掉的 key 的个数
时间复杂度:O(N),这里的N不是总的key数量N,而是你查询的key的个数,如果是查询的key个数为1个,那么就是O(1)
在这里插入图片描述

expire

作用:是给指定的 key 设置过期时间,单位是秒
语法:EXPIRE key seconds
在这里插入图片描述
与其相对应的就是pexpire,它们之间的区别是设置的单位不同,pexpire设置过期时间单位是毫秒,expire单位是秒。

ttl

作用:获取指定key的过期时间,秒级
语法:TTL key
返回值:剩余过期时间。-1表⽰没有关联过期时间,-2表⽰key不存在。
在这里插入图片描述
与其相对应的是pttl,单位是毫秒。

type

作用:返回key对应的value类型
语法: TYPE key
返回值: none , string , list , set , zset , hash and stream等
在这里插入图片描述

redis 的key 的过期策略是什么实现的

一个redis 中可能同时存在很多很多key,这些 key中可能有很大一部分都有过期时间,此时,redis 服务器咋知道那些key 已经过期要被删除,那些key还没过期?
如果直接遍历所有的key,显然是行不通的,效率非常低~~
redis 整体的策略是:

  1. 定期删除:每次抽取一部分,进行验证过期时间~~
  2. 惰性删除:假设这个 key 已经到过期时间了,但是暂时还没删它,key 还存在,紧接这后面又有一次访问,正好用到了这个key,于是这次访问就会让redis服务器触发删除key的操作,同时再返回一个nil

虽然有了上述两种策略结合,整体的效果一般~~
仍然可能会有很多过期的 key 被残留了,没有及时删除掉~~
redis为了对上述进行补充,还提供了一系列的内存淘汰策略~~

在其他博主上能看到下图这样的机制:
在这里插入图片描述
其中定时删除是错误的,原因如下:
1.redis 中并没有采取 定时器 的方式来实现过期 key 删除。
2.如果有多个key 过期,也可以通过一个 定时器(可以是基于 优先级队列 或者 基于 时间轮 都可以实现比较高效的定时器) 来高效/节省cpu的前提下来处理多个key~

基于优先级队列定时器设计思路

正常的队列是先进先出,而优先级队列则是按照指定的优先级先出,例如c++ STL中的priority_queue一样。
那么啥叫优先级高呢?我们可以自定义,比如再 reids 过期 key 的场景中,就可以通过 “过期时间越早,就是优先级越高”

那么我们现在假定有很多 key 设置了过期时间,就可以把这些 key 加入到一个优先级队列中,指定优先级规则是过期时间早的先出队列,队首元素,就是最早的要过期的key

keyvalue
key112:00
key213:00
key314:00

此时定时器中只要分配一个线程,让这个线程去检查队首元素,看是否过期即可,如果队首元素还没过期,后续元素一定没过期!此时让 这个扫描线程不需要遍历所有的key只需要盯住队首元素即可。
另外再扫描线程检查队首元素过期时间的时候不能太频繁,此时做法就是可以根据当前时刻和队首元素的过期时间,让扫描线程进行等待,当时间到了,系统在去唤醒这个线程,此时扫描线程不需要高频扫描队首元素,把cpu的开销可以降低下来。
其中万一再线程休眠时,来了一个新的任务,是11.30要执行,那么可以再新任务添加进来的时候,先唤醒一下刚下的线程,并且重新检查一下队首元素,再根据时间差距重新调整阻塞时间即可。

基于时间轮实现的定时器思路

首先把时间划分程很多小段,假设每个单元格是100ms的间隔,当有新任务进来时,先找到要存储的单元格位置并存入,如果发现设置的时间超出对应时间轮一轮的范围只需要多旋转几轮直到找到即可,并且当每过100ms时,此时就需要检查当前格子上的每一个任务,并尝试看是否能执行当前任务。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/934338.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机竞赛 基于情感分析的网络舆情热点分析系统

文章目录 0 前言1 课题背景2 数据处理3 文本情感分析3.1 情感分析-词库搭建3.2 文本情感分析实现3.3 建立情感倾向性分析模型 4 数据可视化工具4.1 django框架介绍4.2 ECharts 5 Django使用echarts进行可视化展示5.1 修改setting.py连接mysql数据库5.2 导入数据5.3 使用echarts…

代码浏览器和分析器:Source Insight 4.0 Crack

Source Insight 是一个强大的面向项目的编程编辑器、代码浏览器和分析器,可帮助您在工作和计划​​时理解代码。Source Insight 内置了针对 C/C、C#、Java、Objective-C 等的动态分析。 了解代码 快速学习现有代码库,并加快新项目的进度。通过查看函数和…

1688API技术解析,实现获得1688商品详情

要实现获得1688商品详情,你需要使用1688 API。1688 API是阿里巴巴旗下的开放平台,它提供了一套丰富的接口,可以让开发者通过编程的方式获取到1688网站上的商品信息。 首先,你需要在阿里开放平台注册一个账号,并创建一…

R语言绘图相关函数(含实例)

目录 plot:可用于创建多种类型的图形 dev.new():新建画板 hist:绘制直方图 dotchart:绘制点图的函数 pie:绘制饼图 pair:绘制散点图矩阵 boxplot:绘制箱线图 scatterplot3D: 绘制三维散点图 par:修…

【UE5】虚幻5教程-如何解决场景远处植被没有阴影

没有阴影的远处植被 下面是解决的方法。 首先打开项目设置 项目设置 点击左侧的渲染 渲染 在框内输入“距离”,并选择生成距离场。 光源内添加“定向光源”,如果已有可以忽略。 点击“directional light"并在下方找到"距离场阴影&qu…

4G显存即可使用SDXL:离线、开源、免费#Fooocus初体验

Midjourney CEO | David Holz, 2019 : 用户可以忘记所有这些复杂的技术参数,只享受人与计算机之间的交互,“探索新的思维媒介,扩展人类的想象力” Fooocus 用开源和离线的方式挑战 Midjourney。Fooocus 是一款开源的图像生成项目…

Linux操作系统--网络配置(1)

1.网络连接测试 我们在linux操作系统上进行环境搭建的时候,配置网络信息是一个基本且必不可少的操作。那么下面我们来学习一下Linux中相关的网络操作。 (1).查看主机windows操作系统中的IP地址。使用指令ipconfig可以实现在windows操作系统中网络信息的查看,如下所示: (2)…

android系统启动流程之init启动分析

先根据上图来描述下安卓整个系统的启动流程: 当上电时,系统先执行BootRom, 加载引导程序执行。 然后进入bootloader,在安卓系统中基本上这个bootloader是uboot, 通过uboot引导启动内核,此时运行在kernel空间,这时的i…

探索数据的维度:多元线性回归在实际应用中的威力

文章目录 🍀引言🍀什么是多元线性回归?🍀多元线性回归的应用🍀构建多元线性回归模型的步骤🍀R-squared(R平方)🍀多元线性回归案例---波士顿房价 🍀引言 当谈…

开源软件与知识产权:需要注意什么?

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

【Kaggle】使用Kaggle快速下载GitHub等国外网站的文件|GitHub下载加速

痛点 很多时候直接从GitHub或者其他国外网站下载文件速度会很慢 所以这里就提供一个利用Kaggle加速GitHub下载文件的方法 解决方法 Kaggle是什么? 感兴趣的可以看一下这个,不看也不影响 怎么做 首先登录kaggle,新建一个notebook 复制下…

软件工程(十三) 设计模式之结构型设计模式(一)

前面我们记录了创建型设计模式,知道了通过各种模式去创建和管理我们的对象。但是除了对象的创建,我们还有一些结构型的模式。 1、适配器模式(Adapter) 简要说明 将一个类的接口转换为用户希望得到的另一个接口。它使原本不相同的接口得以协同工作。 速记关键字 转换接…

【Go 基础篇】Go语言中的自定义错误处理

错误是程序开发过程中不可避免的一部分,而Go语言以其简洁和高效的特性闻名。在Go中,自定义错误(Custom Errors)是一种强大的方式,可以为特定应用场景创建清晰的错误类型,以便更好地处理和调试问题。本文将详…

ModaHub魔搭社区:WinPlan经营大脑管理中心

角色权限 展示设置的角色,及对应的成员及权限点。角色、成员、权限点可自由配置;管理员的角色不可删除、权限点默认全部不可更改。 WinPlan决策系统 算力 阿里云 腾讯云 AWS亚马逊 框架 业务数据基座 WinPlan垂直大模型 模型 分

必抓!程序员必备的关键算法:探索编程世界的珍宝

嗨,亲爱的编程同道们!在这个码农的世界里,算法就像我们的剑与盾,为我们打开问题的大门。不论你是新手刚踏入编程领域,还是老手早已颇有心得,总有那几种算法是我们绝对不能错过的,它们是你编程路…

华为手机实用功能介绍

一、内置app介绍 分四块介绍,包括出门款、规划款、工作款和生活款。 出门款:红色框框部分,照镜子化妆/看天气 规划款:黄色框框部分,日程表/计划表/番茄时间/计时 工作款:蓝色框框部分,便笺/录…

R语言响应面(RSM)、线性模型lm分析生产过程影响因素可视化

全文链接:https://tecdat.cn/?p33499 响应面(Response Surface Methodology,RSM)分析是一种常用的统计方法,用于研究和优化生产过程中的影响因素。通过建立数学模型来描述因素与响应之间的关系,RSM可以帮助…

实战项目 在线学院springcloud调用篇3(nacos,feging,hystrix,gateway)

一 springcloud与springboot的关系 1.1 关系 1.2 版本关系 1.3 list转json串 public class Test {public static void main(String[] args) {List<String> dataListnew ArrayList<String>();dataList.add("12");dataList.add("45");dataLi…

【CSS】CSS 特性 ( CSS 优先级 | 优先级引入 | 选择器基本权重 )

一、CSS 优先级 1、优先级引入 定义 CSS 样式时 , 可能出现 多个 类型相同的 规则 定义在 同一个元素上 , 如果 CSS 选择器 相同 , 执行 CSS 层叠性 , 根据 就近原则 选择执行的样式 , 如 : 出现两个 div 标签选择器 , 都设置 color 文本颜色 ; <style>div {color: re…

DQL语句的用法(MySQL)

文章目录 前言一、DQL语句间接和语法1、DQL简介2、DQL语法 二、DQL语句使用1、基础查询&#xff08;1&#xff09;查询多个字段&#xff08;2&#xff09;为字段设置别名&#xff08;3&#xff09;去除重复记录 总结 前言 本文主要介绍SQL语句中DQL语句的功能和使用方法&#…