Redis的基本使用命令(GET,SET,KEYS,EXISTS,DEL,EXPIRE,TTL,TYPE)
目录
SET
GET
KEYS
EXISTS
DEL
EXPIRE
TTL
redis中的过期策略是怎么实现的(面试)
上文介绍reids的安装以及基本概念,本章节主要介绍 Redis的基本使用命令的使用
Redis 是一个基于键值对(KEY - VALUE)存储的高性能数据库。在这种存储模式下,数据以键(KEY)和值(VALUE)的形式进行组织和存储。
- KEY 是唯一的 只对应 String类型
- 值(VALUE)支持多种数据类型(String,Set,Hash,List,Sorted Set.....)
redis中命令不区分大小写
进入redis中
redis-cli
root@iZbp122ygczhdyhc5r271kZ:~# redis-cli
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379>
SET
SET命令用于在 Redis 中设置一个键值对。基本语法是SET key value [
1)set方法
127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> set key2 value2
OK
127.0.0.1:6379> set key3 value3
OK
2)过期时间设置(EX 和 PX)
EX用于设置键值对的过期时间,单位是秒。
127.0.0.1:6379> set key4 value4 ex 20
OK
127.0.0.1:6379> ttl key4
(integer) 15
ttl查询剩余多少秒
PX则是用于设置过期时间,单位是毫秒
127.0.0.1:6379> set key5 value5 px 5000
OK
127.0.0.1:6379> ttl key5
(integer) 2
3)条件设置(NX 和 XX)
NX(Not eXists)表示只有当键不存在时才设置键值对
127.0.0.1:6379> keys *
1) "key3"
2) "key2"
3) "key1"
127.0.0.1:6379> set key4 value4 nx
OK
127.0.0.1:6379> get key4
1) "value4"
XX(eXists)与NX相反,只有当键已经存在时才设置键值对。
GET
GET命令用于获取指定键(key)对应的的值(value)。如果键不存在,GET命令会返回nil。
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> get key2
"value2"
127.0.0.1:6379> get key3
"value3"
127.0.0.1:6379> get key4
(nil)
如果存在根据key值 返回对应的value
否则将返回一个空(nil)
KEYS
- 在 Redis 中,
keys命令是一个用于查找符合特定模式(pattern)的键(keys)的命令。它返回所有与给定模式匹配的键的列表。
通配符介绍
*:可以匹配任意数量(包括零个)的字符。例如,keys *会返回所有的键,因为它匹配任何键名。而keys user:*会返回所有以user:开头的键,像user:1、user:abc等都符合这个模式。?:匹配一个任意的字符。例如,keys user:??会匹配像user:12、user:ab这样长度为固定 4 个字符(user:加上后面两个任意字符)的键,因为?只匹配一个字符。
先设置好一些值,以便演示
127.0.0.1:6379> set heool 1
OK
127.0.0.1:6379> set hello 2
OK
127.0.0.1:6379> set hllow 3
OK
127.0.0.1:6379> set hallo 4
OK
127.0.0.1:6379> set hhhhhh 5
OK
127.0.0.1:6379> set heool 6
OK

1)?匹配一个字符
127.0.0.1:6379> keys h?llo
1) "hallo"
2) "hello"
2)* 匹配0个或多个字符
127.0.0.1:6379> keys h*
1) "hallo"
2) "heool"
3) "hello"
4) "hhhhhh"
5) "hllow"
3)【abcde】只能匹配abcde,别的不行 相当与固定选项
127.0.0.1:6379> keys h[ab]llo
1) "hallo"
4)【^e】 只有e匹配不了 其他都可以匹配
127.0.0.1:6379> keys h[^e]*
1) "hallo"
2) "hhhhhh"
3) "hllow"
5)【a-b】可以匹配a-b区间的字符 包括俩侧
127.0.0.1:6379> keys h[a-e]llo
1) "hallo"
2) "hello"
注意:
KEYS * 慎用
因为为把所有的结果显示出来,有可能会使系统崩溃,导致所有的数据丢失
keys的时间复杂度:O(N)
EXISTS
在 Redis 中,
exists命令用于检查给定的一个或多个键(keys)是否存在。它返回一个整数值,表示给定键存在的数量。语法为
exists key [key...]。
127.0.0.1:6379> keys *
1) "hallo"
2) "heool"
3) "hello"
4) "hhhhhh"
5) "hllow"
127.0.0.1:6379> exists hallo
(integer) 1
127.0.0.1:6379> exists hallo heool hello
(integer) 3
127.0.0.1:6379> exists a
(integer) 0
如果存在则返回
1,不存在返回0。如果同时检查多个键,它会返回存在的键的数量。时间复杂度:O(1)
DEL
del命令是 Redis 中用于删除一个或多个键(keys)及其对应的值(values)的命令。其语法是del key [key...]。
127.0.0.1:6379> keys *
1) "hallo"
2) "heool"
3) "hello"
4) "hhhhhh"
5) "hllow"
127.0.0.1:6379> del hallo
(integer) 1
127.0.0.1:6379> del heool dello
(integer) 1
127.0.0.1:6379> del hhhhhh hllow
(integer) 2
127.0.0.1:6379> del a
(integer) 0
如果键不存在,
del命令会返回0,表示没有键被删除;如果键存在并成功删除,会返回1(如果同时删除多个键,返回成功删除的键的数量)。时间复杂度:O(1)
EXPIRE
在 Redis 中,
expire命令用于为一个已经存在的键(key)设置过期时间。语法为expire key seconds,其中key是要设置过期时间的键,seconds是过期时间的秒数。
127.0.0.1:6379> keys *
1) "key3"
2) "hello"
3) "key2"
4) "key1"
127.0.0.1:6379> expire key1 10
(integer) 1
127.0.0.1:6379> ttl key1
(integer) 6
127.0.0.1:6379> get key1
(nil)
一旦过期时间到达,Redis 会自动删除这个键值对。
时间复杂度:O(1)
TTL
- 在 Redis 中,
ttl(Time To Live)命令用于获取一个键(key)的剩余生存时间(以秒为单位)。语法是ttl key。
127.0.0.1:6379> keys *
1) "key3"
2) "hello"
127.0.0.1:6379> expire hello 10
(integer) 1
127.0.0.1:6379> ttl hello
(integer) 6
127.0.0.1:6379> ttl hello
(integer) -2
127.0.0.1:6379> ttl key3
(integer) -1
127.0.0.1:6379> get hello
(nil)
- 例如,对于一个已经设置了过期时间的键,执行命令会返回该键剩余的生存时间秒数。如果键不存在或者没有设置过期时间,
ttl命令返回-1;如果键已经过期,ttl命令返回-2。
redis中的过期策略是怎么实现的(面试)
惰性删除(Lazy Deletion):
- 当客户端访问一个键时,Redis 会检查这个键是否已经过期。如果键已经过期,那么在执行相应的操作(如
GET、SET等)之前,Redis 会先删除这个过期的键,然后返回键不存在的结果(如nil)。- 例如,当执行
GET key操作时,Redis 内部会有一个检查机制,先判断键是否过期。如果key已经过期,Redis 会执行删除操作,然后返回nil,就好像这个键从来不存在一样。定期删除
- Redis 会定期从设置了过期时间的键中随机抽取一部分键进行检查,将其中过期的键删除。这个检查过程是在 Redis 的内部循环事件(Event Loop)中进行的,有一定的时间间隔和检查数量限制。
- 具体来说,Redis 会使用一个近似的 LRU(Least Recently Used)算法来确定要检查的键。它会维护一个过期键的样本池,每次从这个样本池中抽取一定比例的键进行检查。例如,可能会每次抽取 100 个键进行检查,发现过期的键就立即删除。
Redis 过期策略的综合应用
- 在实际的 Redis 应用中,惰性删除和定期删除是结合使用的。这种综合策略的目的是在保证内存使用效率的同时,尽量减少对系统性能的影响。
- 例如,对于一个高流量的缓存系统,大部分时间依靠惰性删除来处理过期键,因为缓存数据通常是频繁访问的,过期键在被访问时能够及时被删除。同时,定期删除机制会在后台默默地工作,定期清理那些长时间未被访问的过期键,以防止内存占用过多。通过这种方式,Redis 能够在高效利用内存和提供高性能服务之间取得平衡。
结语: 写博客不仅仅是为了分享学习经历,同时这也有利于我巩固知识点,总结该知识点,由于作者水平有限,对文章有任何问题的还请指出,接受大家的批评,让我改进。同时也希望读者们不吝啬你们的点赞+收藏+关注,你们的鼓励是我创作的最大动力!
相关文章:
Redis的基本使用命令(GET,SET,KEYS,EXISTS,DEL,EXPIRE,TTL,TYPE)
目录 SET GET KEYS EXISTS DEL EXPIRE TTL redis中的过期策略是怎么实现的(面试) 上文介绍reids的安装以及基本概念,本章节主要介绍 Redis的基本使用命令的使用 Redis 是一个基于键值对(KEY - VALUE)存储的…...
LruCache(本地cache)生产环境中遇到的问题及改进
问题:单机qps增加时请求摘要后端,耗时也会增加,因为超过了后端处理能力(最大qps,存在任务堆积)。 版本一 引入LruCache。为了避免数据失效,cache数据的时效性要小于摘要后端物料的更新时间&…...
智慧公交指挥中枢,数据可视化 BI 驾驶舱
随着智慧城市的蓬勃发展,公共交通作为城市运营的核心枢纽,正朝着智能化和数据驱动的方向演进。通过整合 CAN 总线技术(Controller Area Network,控制器局域网总线)、车载智能终端、大数据分析及处理等尖端技术,构建的公交“大脑”…...
【计算机网络】期末考试预习复习|上
作业讲解 物理层作业 共有4个用户进行CDMA通信。这4个用户的码片序列为: A: (–1 –1 –1 1 1 –1 1 1);B: (–1 –1 1 –1 1 1 1 –1) C: (–1 1 –1 1 1 1 –1 –1);D: (–1 1 –1 –1 –1 –1 1 –1) 现收到码片序列:(–1 1 –…...
YOLOv8目标检测(四)_图片推理
YOLOv8目标检测(一)_检测流程梳理:YOLOv8目标检测(一)_检测流程梳理_yolo检测流程-CSDN博客 YOLOv8目标检测(二)_准备数据集:YOLOv8目标检测(二)_准备数据集_yolov8 数据集准备-CSDN博客 YOLOv8目标检测(三)_训练模型:YOLOv8目标检测(三)_训…...
AI工具如何深刻改变我们的工作与生活
在当今这个科技日新月异的时代,人工智能(AI)已经从科幻小说中的概念变成了我们日常生活中不可或缺的一部分。从智能家居到自动驾驶汽车,从医疗诊断到金融服务,AI正以惊人的速度重塑着我们的世界。 一、工作方式的革新…...
springboot中——Logback介绍
程序中的日志,是用来记录应用程序的运行信息、状态信息、错误信息等。 Logback基本使用 springboot的依赖自动传递了logback的依赖,所以不用再引入依赖 之后在resources文件下创建logback.xml文件,写入 <?xml version"1.0" …...
【Tomcat】第一站:理解tomcat与Socket
目录 1. Tomcat 1.1 Tomcat帮助启动http服务器。 1.2 tomcat理解: 2. 计算机网络最基本的流程 2.1 信息是怎么来的? 2.2 端口是干什么的? 3. 简单的Socket案例 服务端 客户端 启动: 3.2 在Tomcat发送信息,看…...
TQ15EG开发板教程:使用SSH登录petalinux
本例程在上一章“创建运行petalinux2019.1”基础上进行,本例程将实现使用SSH登录petalinux。 将上一章生成的BOOT.BIN与imag.ub文件放入到SD卡中启动。给开发板插入电源与串口,注意串口插入后会识别出两个串口号,都需要打开,查看串…...
Java从入门到工作4 - MySQL
一:检测数据库网络 telnet 127.0.0.1 3306 注意ip和端口后之间是空格,不需要引号 二:SQL语法 1、创建结果集 SELECT 电视机 AS typeUNION SELECT 电冰箱UNION SELECT 洗衣机UNION SELECT 空调UNION SELECT 电脑UNION SELECT 热水器UNION…...
OpenShift 4 - 多云管理(2) - 配置多集群观察功能
《OpenShift / RHEL / DevSecOps 汇总目录》 本文在 OpenShift 4.17 RHACM 2.12 环境中进行验证。 文章目录 多集群观察技术架构安装多集群观察功能监控多集群的运行状态监控多集群的应用运行在被管集群监控应用运行在管理集群监控被管集群的应用运行 参考 多集群观察技术架构…...
【鸿睿创智开发板试用】RK3568 NPU的人工智能推理测试
目录 引言 驱动移植 例程编译 修改build.sh 执行编译 运行测试 部署libc的库文件 执行测试程序 结语 引言 鸿睿创智的H01开发板是基于RK3568芯片的,瑞芯微芯片的一大特色就是提供了NPU推理的支持。本文将对其NPU推理进行测试。 驱动移植 H01的开发板已经…...
iOS swift开发系列 -- tabbar问题总结
1.单视图如何改为tabbar,以便显示2个标签页 右上角➕,输入tabbar 找到控件,然后选中,把entrypoint移动到tabbar控件 2.改成tabbar,生成两个item,配置各自视图后,启动发现报错 Thread 1: “-[p…...
四、CSS3
一、CSS3简介 1、CSS3概述 CSS3 是 CSS2 的升级版本,他在CSS2的基础上,新增了很多强大的新功能,从而解决一些实际面临的问题。 CSS在未来会按照模块化的方式去发展:https://www.w3.org/Style/CSS/current-work.html …...
Three使用WebGPU的关键TSL
Three.js 使用 WebGPU 的关键 TSL TSL: three.js shader language 介绍 three.js 材质转为webgpu的关键流程, 从而引出 TSL. 1、关键类关系 WebGPURenderer|-- library: StandardNodeLibrary|-- _nodes: Nodes|-- _objects: RenderObjects|-- createRenderObject()StandardN…...
ESP32-S3模组上跑通ES8388(30)
接前一篇文章:ESP32-S3模组上跑通ES8388(29) 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回终于解析完了es8388_init函数的所有代码。本回回到调用它的地方,继续往下讲解。 我们是从ESP32-S3模组上跑通ES8388(7)-CSDN博客开始进入es8388_init函数,展开对于它的解析的…...
概率论得学习和整理24:EXCEL的各种图形,统计图形
目录 0 EXCEL的各种图形,统计图形 1 统计图形 / 直方图 / 其实叫 频度图 hist最合适(用原始数据直接作图) 1.1 什么是频度图 1.2 如何创建频度图,一般是只选中1列数据(1个数组) 1.3 如何修改频度图的宽度 1.4 hist图的一个特…...
WPF中依赖属性的底层和普通属性的底层有什么不一样
WPF中依赖属性的底层 在 WPF 中,依赖属性(Dependency Property)是 WPF 属性系统的核心,它支持功能强大的特性(如数据绑定、动画、样式等)。其底层实现是围绕 DependencyObject 类展开的。以下是 WPF 中依赖…...
【Qt】drawText字体大小问题探究
背景 软件的一个功能是: 打开图片在图片上绘制序号,序号的样式是圆圈内包含数字将带有序号的图片打印出来 实现思路也很简单,在屏幕上显示时重写paintEvent函数,利用QPainter完成图片和序号的绘制。打印时只需要将QPainter对应…...
Mapbox-GL 的源码解读的一般步骤
Mapbox-GL 是一个非常优秀的二三维地理引擎,随着智能驾驶时代的到来,应用也会越来越广泛,关于mapbox-gl和其他地理引擎的详细对比(比如CesiumJS),后续有时间会加更。地理首先理解 Mapbox-GL 的源码是一项复…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
