【Redis】通用命令
使用者通过redis-cli客户端和redis服务器交互,涉及到很多的redis命令,redis的命令非常多,我们需要多练习常用的命令,以及学会使用redis的文档。
一、get和set命令(最核心的命令)
Redis中最核心的两个命令:get和set,Redis是按照键值对的方式存储数据的。get命令是根据key来取value,set命令是将key和value存储进去的。
set key valueget key
我们想要使用Redis命令,需要先进入redis-cli客户端,才能输入Redis命令,其中key是字符串类型,而value可以有多种数据类型。
二、Redis的基本全局命令
Redis有5种常见的数据结构(字符串,哈希表,列表,集合,有序集合),但是他们都是键值对中的值,对于键来说有一些通用的命令。
2.1 KEYS
返回所有满足样式的key,语法如下:
KEYS pattern
支持如下统配样式(通过一些特殊符号来描述key的模样):
- ?匹配任意一个字符
- * 匹配0个或者多个任意字符
- [abcde] 只能匹配到a,b,c,d,e,别的不行,相当于给固定的选项了
- [^e] 排除e,只有e匹配不了,其他的都能匹配
- [a-b] 匹配a-b这个范围内的字符,包含两侧边界
注意事项:
keys命令的时间复杂度是,所以在生产环境中,一般会禁止使用keys命令,尤其是keys *(查询redis中所有的key)。生产环境中的key可能会非常多,而redis是一个单线程的服务器,执行 keys * 的事件非常长,就使redis服务器被阻塞了,无法给其他客户端提供服务!!
这种后果可能是灾难性的!!!
redis经常会用于做缓存,挡在MySQL前面,替MySQL负重前行。万一,redis被一个 keys * 阻塞住了,此时其他的查询redis操作就超时了,此时这样的请求就会直接查数据库~~突然一大波请求过来了,MySQL就容易挂了~整个系统就有可能瘫痪~~~~
2.2 EXISTS
判断某一个key是否存在,语法如下:
EXISTS key [key ...]
时间复杂度为:O(1)
返回值:key存在的个数,针对多个key来说是非常有用的~(键值对存储的体系中,key是唯一的)。
redis是一个客户端-服务端结构的程序,客户端和服务器之间通过网络来进行通信!!
分开的写法不好,会产生更多轮次的网络通信,效率比较低,成本比较高。因为网络通信时需要进行封装和分用:
进行网络通信的时候,发送方发送一个数据,这个数据就要从应用层到物理层,层层封装(每一层协议都要加上报头或者尾部);接受方收到一个数据,这个数据就要从物理层,当应用层层层分用(把每一层协议中的报头或者尾部给拆掉)。
网卡是IO设备,更何况,你的客户端和服务器不一定在一个主机中,中间可能隔着很远~~,Redis自身非常清楚上诉问题,Redis的很多命令都是支持一次就能操作多个key的多种操作。
2.3 DEL
删除指定的key,语法如下:
DEL key [key ...]
时间复杂度为:O(1)
返回值:删除掉的key的个数
注意事项:
对于删除操作来说,还是不要乱删除数据~~
之前在学习MySQL的时候,当时强调删除类的操作:drop database/drop table/delete from...都是非常危险的操作!!一旦删除了之后,数据就没了~
Redis主要的应用场景,就是作为缓存~此时Redis里存的只是一个热点数据,全量数据是在MySQL数据库中,此时,如果Redis中的key删除了几个,一般来说,问题不大。但是当让如果把所有的数据或者一大半数据一下都删除了,这种影响会很大(本来Redis是帮MySQL负重前行的,Redis没数据了,大部分的请求就直接打给了MySQL,然后就容易将MySQL搞挂)
相比之下,如果是MySQL这样的数据,哪怕误删了一个数据,都可能是影响很大的。如果是把Redis作为数据库,此时误删数据的影响就大了;如果是把Redis作为消息队列,这种情况误删数据影响大不大,就需要具体问题具体分析了。
2.4 EXPIRE
为执行的key添加秒级的过期时间(Time To Live:key存活时间超出这个指定的值,就会被自动删除),语法如下:
EXPIRE key seconds
时间复杂度为:O(1)
返回值:1表示设置成功;0表示设置失败。
很多业务场景是有时间限制的。
- 手机验证码:该验证码5分钟内有效
- 点外卖:优惠卷,在指定时间之内有效
- 基于Redis实现分布式锁,为了避免出现不能正确解锁的情况,通常都会在加锁的时候设置一下过期时间(所谓的使用Redis作为分布式锁,就是给Redis里写一个特殊的key value)
2.4 PEXPIPE
对于计算机来说,秒是一个非常长的时间,所以我们还可以进行设置毫秒。用法和EXPIRE类似。
2.5 TTL
获取指定key的过期时间,秒级,语法如下:
TTL key
时间复杂度为:O(1)
返回值:剩余过期时间。-1表示没有关联过期时间,-2表示key不存在。
2.6 TYPE
返回key对应的数据类型,语法如下:
TYPE key
时间复杂度为:O(1)
返回值:
三、生产环境的介绍
未来在工作中会涉及到的几个环境:
- 办公环境:入职公司之后,公司会给你发一个电脑(8C16G512G)
- 开发环境:有的时候,开发环境和办公环境是一个;有的时候,开发环境是单独的服务器(28C128G4T),做前端和客户端,一般来说,开发环境就是办公环境,后端来说,很可能是单独的服务器。有的后端程序会比较复杂:编译一次时间特别久,使用高性能服务器进行编译;有的程序一启动要消耗很多的CPU和内存资源,办公电脑难以支撑;有的程序比较依赖linux,在windows环境中搭不起来。
- 测试环境:测试工程师使用的(28C128G4T)
- 线上环境:线上环境则是外界用户能够访问到的,一旦生产环境上出现问题,一定会对用户的使用产生影响!!!直接的会影响到公司的营收,很多公司的营收都是靠广告,广告一般是按照展示/点击次数来计费的。
四、Redis的key的过期策略是怎么实现的
一个Redis中可能同时存在很多很多的key,这些key中可能有很大一部分都有过期时间。此时,Redis服务咋知道哪些key已经过期要被删除,哪些key还没过期??
如果直接遍历所有key,显然是行不通的,效率非常低~~
Redis整体的策略是:
- 定期删除:此处也需要结合定期删除的操作~~每次抽取一部分,进行验证过期时间。保证这个抽取检查的过程足够快!!
- 惰性删除:假设这个key已经到过期时间了,但是暂时还没删除他,key还存在。紧接着,后面又一次访问,正好使用到了这个key,于是这次访问就会让Redis服务器触发删除key的操作,同时再返回一个nil.
为什么对于定期删除的时间,有明确的要求呢??
因为Redis是单线程的程序,主要的任务是处理(每一个命令的任务,刚才扫描过期的key)如果扫描过期的key消耗的时间太多了,就可能导致正常处理请求命令就被阻塞了。
虽然有了上述两种策略结合,整体的效果一般~~~仍然可能会有很多过期的key被残留,没有及时删除掉~~Redis还提供了一系列的内存淘汰策略:
Redis中并没有采取定时器的方式来实现过期key删除;如果有多个key过期,也可以通过一个定时器来高效/节省CPU的前提下来处理多个key~
为什么Redis没有采取这种定时器的方式呢??
个人猜测:基于定时器实现,势必要引入多线程,Redis早期版本就是奠定了单线程的基调,引入多线程就打破了作者的初衷。
五、定时器
定时器:在某个时间到达之后,执行指定的任务。
基于优先级队列/堆
基于时间轮实现的定时器
相关文章:
【Redis】通用命令
使用者通过redis-cli客户端和redis服务器交互,涉及到很多的redis命令,redis的命令非常多,我们需要多练习常用的命令,以及学会使用redis的文档。 一、get和set命令(最核心的命令) Redis中最核心的两个命令&…...
Android学习总结之service篇
引言 在 Android 开发里,Service 与 IntentService 是非常关键的组件,它们能够让应用在后台开展长时间运行的操作。不过,很多开发者仅仅停留在使用这两个组件的层面,对其内部的源码实现了解甚少。本文将深入剖析 Service 和 Inte…...
基于CATIA产品结构树智能排序的二次开发技术解析——深度定制BOM层级管理系统的Pycatia实践
引言 在航空制造与汽车装配领域,CATIA产品结构树(Product Tree)的规范性直接影响MBOM管理效率。传统手动排序存在两大痛点: 多级编号混乱:混合零件号(PartNumber)与实例名(Insta…...
机器人轨迹跟踪控制——CLF-CBF-QP
本次使用MATLAB复现CLF-CBF-QP算法,以实现机器人轨迹跟踪同时保证安全性能 模型 使用自行车模型来进行模拟机器人的移动动态,具体的模型推导参考车辆运动学模型-自行车模型 采用偏差变量 p ~ = p − p r e f u ~ = u − u r e f \tilde{p} = p - p_{ref} \\ \tilde{u} = …...
道路裂缝数据集CrackForest-156-labelme
来源于开源的数据集 https://github.com/cuilimeng/CrackForest-dataset 进行整理修改而成。 文章目录 1. 介绍2. 数据文件3. 应用场景4. 相关工具5. 下载地址 1. 介绍 在现代城市管理中,道路状况的监测与维护是确保交通安全和城市基础设施健康的重要环节。 CrackF…...
数据定义语言
一、DDL的核心功能 DDL用于定义和管理数据库对象的结构,包括数据库、表、索引、视图等,主要操作包括创建、修改、删除。其核心命令包括: CREATE:创建对象(数据库、表、索引等) ALTER:修改对象结构(如添加/删除列) DROP:删除对象 TRUNCATE:清空表数据(保留结构) RE…...
爬楼梯问题-动态规划
一、题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 方法1. 1 阶 1 阶 方法2. 2 阶…...
MySQL篇(四)事务相关知识详解
MySQL篇(四)事务相关知识详解 MySQL篇(四)事务相关知识详解一、事务的特性(ACID)原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(…...
C++第14届蓝桥杯b组学习笔记
1. 日期统计 小蓝现在有一个长度为 100100 的数组,数组中的每个元素的值都在 00 到 99 的范围之内。数组中的元素从左至右如下所示: 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4…...
4.5蓝桥杯|高塔登顶方案(5025)
作者语录: 1、 从不会做到会做的过程,从不理解到不理解的过程,从一个不会做这道题的人的角度出发看这个问题,好命苦嗷嗷嗷! 2、只有我受煎熬吗,偶买噶,,, 目录 研究步骤…...
[MySQL初阶]MySQL(9)事务机制
标题:[MySQL初阶]MySQL(9)事物机制 水墨不写bug 文章目录 一、认识事务1、多线程访问数据库出现的问题2、对CURD的限制是通过事务机制实现的3、事务的四个属性4、哪些引擎支持事务 二、事务的提交与autocommit设置三、事务的隔离性和隔离级别…...
3535 数组分割
3535 数组分割 ⭐️难度:困难 🌟考点:2023、省赛、动态规划 📖 📚 import java.util.*;public class Main {static int MOD 1000000007;static int N 1005;public static void main(String[] args) {Scanner sc …...
线程池的工作原理
固定线程池:线程池中的线程数是固定的,线程池创建时就已经设定了固定的线程数量。在任务提交时,线程池会将任务分配给空闲的线程执行。如果所有线程都在执行任务,新的任务会被放到任务队列中,直到有线程空闲出来。 线…...
论文导读 | SOSP23 | Gemini:大模型 内存CheckPoint 快速故障恢复
本期分享的是一篇SOSP 2023论文: Gemini: Fast Failure Recovery in Distributed Training with In-Memory Checkpoints Zhuang Wang (Rice University), Zhen Jia (Amazon Web Services, Inc.), Shuai Zheng (Amazon Web Services), Zhen Zhang (Amazon Web Servic…...
windows 常用命令总结
工作中用到的 Linux 总结(持续更新中...)_linux工作经验-CSDN博客 PS: 推荐使用 powershell 而不是 cmd,因为PowerShell 是一个更先进和功能更强大的工具( powershell 有命令记忆功能,比较方便)…...
【Linux】进程间通信、匿名管道、进程池
一.什么是通信 进程间通信(Inter-Process Communication,IPC),是指在操作系统中,不同进程之间进行数据交换和同步的机制。由于每个进程通常拥有独立的内存空间,进程间无法直接访问对方的内存,因此需要通过特定的机制来实现通信和…...
【Block总结】PlainUSR的局部注意力,即插即用|ACCV2024
论文信息 标题: PlainUSR: Chasing Faster ConvNet for Efficient Super-Resolution作者: Yan Wang, Yusen Li, Gang Wang, Xiaoguang Liu发表时间: 2024年会议/期刊: 亚洲计算机视觉会议(ACCV 2024)研究背景: 超分辨率(Super-Resolution, S…...
35信号和槽_信号槽小结
Qt 信号槽 1.信号槽是啥~~ 尤其是和 Linux 中的信号进行了对比(三要素) 1) 信号源 2) 信号的类型 3)信号的处理方式 2.信号槽 使用 connect 3.如何查阅文档. 一个控件,内置了哪些信号,信号都是何时触发 一…...
现代复古电影海报品牌徽标设计衬线英文字体安装包 Thick – Retro Vintage Cinematic Font
Thick 是一种大胆的复古字体,专为有影响力的标题和怀旧的视觉效果而设计。其厚实的字体、复古魅力和电影风格使其成为电影海报、产品标签、活动品牌和编辑设计的理想选择。无论您是在引导电影的黄金时代,还是在现代布局中注入复古活力,Thick …...
低代码开发平台:飞帆画 echarts 柱状图
https://fvi.cn/711 柱状图这个控件是由折线图的控件改过来的,在配置中,单选框选择柱状图就行了。...
Linux中C++ gdb调试命令
编译可执行文件需要带上-g选项参数 输入回车则重复执行上一次命令; 进入gdb: gdb 程序名运行gdb命令: r打断点命令: b 行号查看断点命令: i b打印变量命令: p 变量名持续查看变量命令: d…...
Python精进系列:从 __name__ 开始了解 python 常见内置变量
目录 引言一、__name__是什么?案例1:直接运行模块案例2:模块被导入 二、__name__的主要用途(一)区分主程序和导入模块案例3:测试代码隔离(二)动态导入模块案例4:根据环境…...
Nacos 服务发现的核心模型有哪些?Service, Instance, Cluster 之间的关系是什么?
Nacos 服务发现的核心模型 Nacos 服务发现的核心数据模型主要围绕以下几个关键概念构建,它们共同构成了服务注册与发现的基础: Namespace (命名空间): 用途: 用于进行环境隔离。比如,你可以为开发环境 (dev)、测试环境 (test) 和生产环境 (p…...
Java程序设计第1章:概述
一、Hello World 1.代码: public class HelloWorld {public static void main(String[] args){System.out.println("Hello World!");} } 2.运行结果: Hello World! 二、输出姓名、学号、班级 1.题目: 编写一个Application&a…...
C++开发工具全景指南
专业编译与调试工具深度解析 2025年4月 编译器套件 GNU Compiler Collection (GCC) GNU编译器套件是自由软件基金会开发的跨平台编译器系统,支持C、C、Objective-C、Fortran、Ada等多种编程语言。作为Linux系统的标准编译器,GCC以其强大的优化能力和…...
Java的Selenium的特殊元素操作与定位之iframe切换
iframe切换 四种切换方式: driver.switchTo().frame(index);driver.switchTo().frame(id);driver.switchTo().frame(name);driver.switchTo().frame(WebElement); 切换之后,回到默认内容页面(否则会找不到元素 driver.switchTo().defaultContent(); //iframe处…...
AI比人脑更强,因为被植入思维模型【42】思维投影思维模型
giszz的理解:本质和外在。我们的行为举止,都是我们的内心的表现。从外边可以看内心,从内心可以判断外在。曾国藩有7个识人的方法,大部分的人在他的面前如同没穿衣服一样。对于我们自身的启迪,我认为有四点&…...
7-12 最长对称子串(PTA)
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。 输入格式: 输入在一行中给出长度不超过1000的非空字符串。 输出格式&…...
嵌入式AI的本地化部署的好处
嵌入式AI本地化处理(即边缘计算)的核心优势在于将AI算力下沉至设备端,直接处理数据而非依赖云端,这种模式在多个维度上展现出显著价值: 一、数据隐私与安全性提升 1. 敏感数据本地存储 金融、医疗等涉及隐私的行业…...
0基础 | 硬件 | 电源系统 一
降压电路LDO 几乎所有LDO都是基于此拓扑结构 图 拓扑结构 LDO属于线性电源,通过控制开关管的导通程度实现稳压,输出纹波小,无开关噪声 线性电源,IoutIin,发热功率P电压差△U*电流I,转换效率Vo/Vi LDO不适…...
LeetCode详解之如何一步步优化到最佳解法:20. 有效的括号
LeetCode详解系列的总目录(持续更新中): LeetCode详解之如何一步步优化到最佳解法:前100题目录(更新中...)-CSDN博客 LeetCode详解系列的上一题链接: LeetCode详解之如何一步步优化到最佳解法…...
LeetCode18四数之和
代码来源:代码随想录 /*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/ int com…...
《K230 从熟悉到...》无线网络
《K230 从熟悉到...》无线网络 STA模式 《庐山派 K230 从熟悉到...》无线网络 无线网络中通常是STA(Station,站点)和AP(Access Point,无线接入点)。 STA(站点) 定义:STA…...
去中心化指数(链上ETF)
去中心化指数(链上ETF) 核心概念 去中心化指数: 类似传统金融的ETF(交易所交易基金),通过一篮子代币分散投资风险,无需主动管理。 核心价值:降低研究成本、分散风险、自动化资产…...
LeeCode题库第1695题
项目场景: 给你一个正整数数组 nums ,请你从中删除一个含有 若干不同元素 的子数组。删除子数组的 得分 就是子数组各元素之 和 。 返回 只删除一个 子数组可获得的 最大得分 。 如果数组 b 是数组 a 的一个连续子序列,即如果它等于 a[l],…...
【LeetCode 热题100】23:合并 K 个升序链表(详细解析)(Go语言版)
🚀 LeetCode 热题 23:合并 K 个升序链表(详细解析) 📌 题目描述 LeetCode 23. Merge k Sorted Lists 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合…...
LeetCode hot 100—删除链表的倒数第N个节点
题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出:[]示例 3&…...
超级科学软件实验室(中国) : Super Scientific Software Laboratory (SSSLab)
Super Scientific Software Laboratory (SSSLab) gitee 官网...
2025大唐杯仿真1——车联网
车联网 V2N是指车辆与网络 Uu接口是用户设备(UE)与基站之间的通信接口,用于终端和基站之间的通信 Uu接口可用的是N41频段,归属中国移动 车辆间交互是V2V,频段是PCS PC5接口是一种用于设备间直接通信(D2D…...
云资源合规基线:确保云环境安全与合规的完整指南
1. 引言 随着越来越多的企业将其IT基础设施迁移到云端,确保云资源的安全性和合规性变得至关重要。云资源合规基线是一套最佳实践和标准,旨在帮助组织维护安全、高效且符合法规要求的云环境。本文将深入探讨云资源合规基线的各个方面,为IT管理者和安全专业人士提供全面的指导。…...
1.0 软件测试全流程解析:从计划到总结的完整指南
软件测试全流程解析:从计划到总结的完整指南 摘要 本文档详细介绍了软件测试的完整流程,包括测试计划、测试设计、测试执行、测试报告和测试总结等主要阶段。每个阶段都从目标、主要工作、输出物和注意事项等方面进行了详细说明。通过本文档࿰…...
@reduxjs/toolkit 报错,解决
项目场景: 使用redux存储状态,写一个reducer 问题描述 报错:Uncaught Error: A case reducer on a non-draftable value must not return undefined import { createSlice } from "reduxjs/toolkit"; //错误写法 const counterS…...
C++蓝桥杯实训篇(二)
片头 嗨咯~小伙伴们!今天我们来一起学习算法和贪心思维,准备好了吗?咱们开始咯! 第1题 数位排序 对于这道题,我们需要自己写一个排序算法,也就是自定义排序,按照数位从小到大进行排序。 举一…...
YY forget password
YY forget password 老早以前的语音工具,游戏团队协作工具...
Kafka 如何解决消息堆积问题?
Kafka 的消息堆积问题是实际生产中经常遇到的情况,尤其在高并发、大流量、消费者故障或处理速度慢的情况下,非常容易出现。 下面我从诊断 解决方案 实战技巧三步帮你梳理清楚: 🔍 一、先判断:是否真的“堆积”&…...
如何通过优化HMI设计大幅提升产品竞争力?
一、HMI设计的重要性与竞争力提升 HMI(人机交互界面)设计在现代产品开发中扮演着至关重要的角色。良好的HMI设计不仅能够提升用户体验,还能显著增强产品的竞争力。在功能趋同的市场环境中,用户体验成为产品竞争的关键。HMI设计通…...
2025大唐杯仿真4——信令流程
Preamble请求...
MyBatis Plus 在 ZKmall开源商城持久层的优化实践
ZKmall开源商城作为基于 Spring Cloud 的高性能电商平台,其持久层通过 MyBatis Plus 实现了多项深度优化,涵盖分库分表、缓存策略、分页性能、多租户隔离等核心场景。以下是具体实践总结: 一、分库分表与插件集成优化 1. 分库分表策略 Sh…...
Qt多线程从基础到性能优化
一、为什么需要多线程开发 现代应用程序的性能需求 CPU多核架构的有效利用 复杂任务的解耦与响应式界面保持 二、Qt线程创建四大方式 1. 继承QThread重写run() class WorkerThread : public QThread {void run() override {// 耗时操作qDebug() << "Thread ID…...
Spring常见问题复习
############Spring############# Bean的生命周期是什么? BeanFactory和FactoryBean的区别? ApplicationContext和BeanFactory的区别? BeanFactoryAware注解,还有什么其它的Aware注解 BeanFactoryAware方法和Bean注解的方法执行顺…...