Redis 常用命令

news2024/12/22 19:35:03

目录

全局命令

1)keys

2)exists

3) del(delete)

4)expire

5)type

SET命令

GET命令

MSET 和 MGET命令

其他SET命令

计数命令

redis-cli,进入redis

最核心的命令:我们这里只是先介绍 set 和 get 最简单的操作,后面有详细介绍

set: 存储 key 和 value

get: 根据 key 来取 value

key 和 value 的类型都是字符串

get 查询不存在的值会返回一个 nil

全局命令

1)keys

用来查询当前服务器上的匹配的 key

通过一下特殊符号(通配符)来描述 key 的模样,匹配上述模样的 key 就会被查出来。

keys pattern,pattern 是包含特殊符号的字符串。

pattern 所支持的统配样式:

“?” 可以匹配任意一个字符

“ * ” 匹配 0 个或者多个任意字符

keys * 可以查询所有的 key

[ae] 只能匹配到 a/e 两个字符之一

[^e] 表示排除 e ,除了 e 之外可以匹配其他字符

[a-e] 匹配 a - e 范围内的字符,包含 a 和 e

注意:keys 的时间复杂度是 O(N)。在生产环境上,一般都会禁止使用 keys 命令。

2)exists

判定 key 是否存在。

exists key [key ...],返回值:返回 key 存在的个数

时间复杂度:O(N),此处的 N 是检查的 key 的个数

3) del(delete)

删除指定的 key,可以一次删除一个或者多个

del key [key ...], 返回值:返回删除 key 的个数

时间复杂度:O(N),此处的 N 是成功删除的 key 的个数

4)expire

给指定的 key 设置过期时间,key 存活时间超过这个指定的值,就会被自动删除。

expire key seconds, expire 设置的时间单位是 秒。pexpire key 毫秒, pexpire 设置的时间单位是毫秒

返回 0 表示设置失败,1 表示设置成功。

时间复杂度:O(1)。

ttl(time to live) 查询 key 的过期时间,单位秒。pttl 和 pexpire 搭配使用。


时间复杂度:O(1)。

返回值:剩余过期时间;-1 表示么有设置过期时间;-2 表示 key 不存在。

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

如果直接遍历所有的 key,显然是不可能的,所有redis 采取了两种方式相结合:

1.定期删除

每隔一定时间,抽取一部分 key 检查是否到达删除时间,每次抽取一部分可以有效保证效率,不会浪费太多时间。 如果扫描过期 key 消耗的时间太多了,就可能会导致正常处理请求命令就阻塞了。

2.惰性删除

假设这个 key 已经到了过期时间,但是暂时还没有将其删除,key 依然存在,接下来再访问该 key 的时候,就会触发 redis 的删除操作,同时返回一个 nil。

redis 为了应对上述策略,还提供了一系列的内存淘汰策略。

5)type

type key,返回 key 对应的 value 的数据类型。

SET命令

SET key value [NX | XX] [GET] [EX seconds | PX milliseconds |
  EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]

NX:如果 key 不存在,才设置,如果 key 存在,则不设置(返回nil)

XX:如果 key 存在,才设置(相当于更新 key 的 value),如果 key 不存在,则不设置(返回nil)

EX:设置过期时间,单位秒

PS:设置过期时间,单位毫秒

EXAT:设置 key 过期的指定 Unix 时间(以秒为单位)

PXAT:设置 key 过期的指定 Unix 时间(以毫秒为单位)

KEEPTTL:保存与 key 相关联的生存时间

set key value ex 10,就相当于set key value 和 expire key 10

因为 key2 已经过期了,所以我们在设置 key2 时加上 NX,成功设置 key2。由于 key1 已经存在,所以加上 NX 会返回一个 nil。

GET命令

GET key,需要注意的是,GET 只能获取到字符串类型的 value,如果 value 是其他类型,使用 GET 获取就会出错!

MSET 和 MGET命令

MSET key value [key value],MSET 可以设置多组键值对,MGET key key,MGET 可以获取多个 key 的 value。

MSET 和 MGET 的时间复杂度都是 O(N),N为 key 的个数。

其他SET命令

SETNX:不存在才能设置,存在则设置失败。

SETEX:设置 key 的过期时间(以秒为单位)

PSETEX:设置 key 的过期时间(以毫秒为单位)

计数命令

incr 针对 value + 1

INCR key,此时 key 对应的 value 必须是整数。

返回值:原 value +1 的结果

无论是字符串还是小数,还是太大的数(超出规定范围),都不能完成该操作

如果 incr 操作的 key 不存在,那么就会将这个 key 默认为0来操作

incrby 针对 value + n

INCRBY key increment,incrby 的使用规则和 incr 一样,都只能对整数使用,我们就不再进行演示了。

incrby 不仅仅可以加一个正数,还能够加负数

decr 针对 value + 1

DECR key

返回值:返回 value-1 后的结果

对一个不存在的 key 进行该操作,同样默认该 key 的 value 为0

decrby 针对 value - n

DECRBY key decrement

incrbyfloat

incrbyfloat key increment,把 key 对应的 value 进行 + - 运算,运算的操作数可以是浮点数

注意:Redis 中不存在 decrbyfloat,只能通过 incrbyfloat+ 负数来实现减法

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

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

相关文章

IP地址,子网掩码,默认网关,DNS讲解

IP地址:用来标识网络中一个个主机,IP有唯一性,即每台机器的IP在全世界是唯一的。 子网掩码:用来判断任意两台计算机的ip地址是否属于同一子网络的根据。最为简单的理解就是两台计算机各自的ip地址与子网掩码进行and运算后&#x…

常用排序算法

一、插入排序1、直接插入排序2、折半插入排序3、希尔排序 二、交换排序1、冒泡排序2、快速排序 三、选择排序1、简单选择排序2、堆排序(1)调整堆(2)创建堆 四、归并排序五、基数排序六、各种排序方法的比较 将一组杂乱无章的数据按…

Zookeeper应用场景和底层设计

一、什么是zookeeper Zookeeper是一个开源的分布式协调服务框架,它是服务于其它集群式框架的框架。 【简言之】 有一个服务A,以集群的方式提供服务。只需要A专注于它提供的服务就可以,至于它如何以多台服务器协同完成任务的事情&#xff0c…

9.14号作业

仿照vector手动实现自己的myVector&#xff0c;最主要实现二倍扩容功能 有些功能&#xff0c;不会 #include <iostream>using namespace std; //创建vector类 class Vector { private:int *data;int size;int capacity; public://无参构造Vector(){}//拷贝构造Vector(c…

2023年最新 Nonobot2 制作QQ聊天机器人详细教程(每周更新中)

协议端 go-cqhttp 安装 使用 mirai 以及 MiraiGo 开发的 cqhttp golang 原生实现&#xff0c;并在 cqhttp 原版 的基础上做了部分修改和拓展。 测试版下载地址&#xff1a;https://github.com/Mrs4s/go-cqhttp/releases 正式版下载地址&#xff1a;https://github.com/Mrs4s…

广义表基础知识

广义表 (又称列表 Lists)是 n > 0个元素 . a0,a1....an-1的有限序列&#xff0c;其中每一个 ai 或者是原子&#xff0c;或者是一个广义表 广义表通常记作: LS (a1&#xff0c;a2&#xff0c;.....&#xff0c;an&#xff09;&#xff0c; LS为表名&#xff0c;n为表的长度&…

使用 LoRA 和 QLoRA 对大型语言模型进行参数高效的微调

概述 随着我们深入研究参数高效微调 (PEFT) 的世界,了解这种变革性方法背后的驱动力和方法变得至关重要。在本文中,我们将探讨 PEFT 方法如何优化大型语言模型 (LLM) 对特定任务的适应。我们将揭开 PEFT 的优点和缺点,深入研究 PEFT 技术的复杂类别,并破译两种卓越技术的内…

SpingMyc项目如何搭建

目录 一、创建项目 二、环境搭建 &#xff08;1&#xff09;引入相关依赖 &#xff08;2&#xff09;在web.xml中配置前端控制器DispatcherServlet &#xff08;3&#xff09;编写SpringMVC核心配置文件springmvc.xml 三、测试是否成功 &#xff08;1&#xff09;编写控…

Java反射机制简单入门

标题 反射能干嘛获取Class对象的三种方式下面开始重点&#xff0c;需要掌握获取类的构造器并进行操作获取成员变量获取成员方法 这块建议先听第一个视频入门&#xff0c;第二个视频深入了解 视频学习地址1 视频学习地址1 正射:知道某个类&#xff0c;类的地址&#xff0c;通过…

在Linux和Windows上安装分布式事务seata

1 前言 官网地址&#xff1a;https://seata.io/ 源码地址&#xff1a;https://github.com/seata/seata 官网手册&#xff1a;https://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html Seata&#xff0c;一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简…

软件设计模式系列之五——建造者模式

1 模式的定义 建造者模式是一种对象创建型设计模式&#xff0c;它将一个复杂对象的构建过程与其表示分离。这意味着你可以使用相同的构建过程来创建不同类型的对象&#xff0c;而不必关心每个对象的内部细节。这种模式适用于构建具有复杂配置的对象&#xff0c;例如具有多个可…

查看selenium具体版本的方法

1、 查看自己selenium版本 方法一&#xff1a; 本机进入CMD 在cmd窗口中输入 pip show selenium如果是在Pycharm中直接安装的selenium。则有可能会有如下提示。那么请尝试方法二。 方法二&#xff1a; 在pycharm中查看selenium版本 步骤一&#xff1a;在pycharm里打开命…

SpringMVC系列(五)之JSR303和拦截器

目录 一. JSR303 1.1 JSR303是什么 1.2 为什么要使用JSR303 1.3 JSR303常用注解 1.4 JSR303快速入门 1. 导入相关pom依赖 2. 配置校验规则 3. 入门示例 二. SpringMVC的拦截器 2.1 什么是拦截器 2.2 拦截器与过滤器的区别 2.3 拦截器工作原理 2.4 入门示例 1. 创建…

Gin路由中间件详解

什么是中间件 Gin 中的中间件必须是一个 gin.HandlerFunc 类型,配置路由的时候可以传递多个 func 回调函 数, 最后一个 func 回调函数前面触发的方法 都可以称为中间件。 中间件操作演示 方法一: 直接写在func,回调函数内 r.GET("/middle",func(ctx *gin.Cont…

Pytorch中张量矩阵乘法函数(mm, bmm, matmul)使用说明,含高维张量实例及运行结果

Pytorch中张量矩阵乘法函数使用说明 1 torch.mm() 函数1.1 torch.mm() 函数定义及参数1.2 torch.bmm() 官方示例 2 torch.bmm() 函数2.1 torch.bmm() 函数定义及参数2.2 torch.bmm() 官方示例 3 torch.matmul() 函数3.1 torch.matmul() 函数定义及参数3.2 torch.matmul() 规则约…

黑马头条 热点文章实时计算、kafkaStream

热点文章-实时计算 1 今日内容 1.1 定时计算与实时计算 1.2 今日内容 kafkaStream 什么是流式计算kafkaStream概述kafkaStream入门案例Springboot集成kafkaStream 实时计算 用户行为发送消息kafkaStream聚合处理消息更新文章行为数量替换热点文章数据 2 实时流式计算 2…

【C++】哈希思想的应用——位图、布隆过滤器和哈希切割

前言&#xff1a; 前面我们学习了unordered_map和unordered_set和哈希表哈希桶等&#xff0c;并且我们自己用哈希桶封装了unordered_map和unordered_set。我们知道哈希的查找效率非常高为O(1)&#xff0c;本章我们将延续哈希的思想&#xff0c;共同学习哈希的应用。 目录 &am…

sh脚本工具集锦(文件批量操作、音视频相关)持续更新

1 文件夹目录下所有图片转换成视频文件 pic_2_videos.sh&#xff1a; #!/bin/bash # 放到图片文件夹目录下&#xff0c;把所有jpeg图片推成视频文件 # sh pic_2_videos.sh 0 # 0: pad to 1920*1080 ; 1 or other no pad pad_1920$1if [[ $pad_1920 0 ]] thenfilesls|grep jp…

【Flink】 FlinkCDC读取Mysql( DataStream 方式)(带完整源码,直接可使用)

简介: FlinkCDC读取Mysql数据源,程序中使用了自定义反序列化器,完整的Flink结构,开箱即用。 本工程提供 1、项目源码及详细注释,简单修改即可用在实际生产代码 2、成功编译截图 3、自己编译过程中可能出现的问题 4、mysql建表语句及测试数据 5、修复FlinkCDC读取Mys…

【C++】匿名对象 ① ( 匿名对象引入 | 匿名对象简介 | 匿名对象概念 | 匿名对象作用域 - 对象创建与销毁 )

文章目录 一、匿名对象引入二、匿名对象简介1、匿名对象概念2、匿名对象作用域 - 对象创建与销毁3、代码示例 - 创建并使用匿名对象 一、匿名对象引入 匿名对象引入 : 在上一篇博客 【C】拷贝构造函数调用时机 ② ( 对象值作为函数参数 | 对象值作为函数返回值 ) 中 , 讲到了 如…