Redis 中的通用命令(命令的返回值、复杂度、注意事项及操作演示)

Redis 中的通用命令(高频率操作)

文章目录

  • Redis 中的通用命令(高频率操作)
  • Redis 的数据类型
  • redis-cli 命令
  • Keys 命令
  • Exists 命令
  • Expire 命令
  • Ttl 命令
  • Type命令

Redis 的数据类型

Redis 支持多种数据类型,整体来说,Redis 是一个键值对结构的,它的 key 固定是字符串类型,而 value 支持 字符串、哈希表、列表、集合、有序集合 等几种数据类型,操作不同的数据时就需要用到不同的命令,但是也有一些全局的命令 在这几种数据类型中都可以使用,命令如下:

redis-cli 命令

在Linux 上通过 redis-cli 即可启动 Redis 客户端,如下图:

在这里插入图片描述

(如果要退出redis客户端的话直接 Ctrl + d)

通过 redis-cli 命令就可以连接到我们电脑上的 redis 客户端,也可以通过指定 ip 地址来连接其他主机上的 redis 客户端,如下图:

通过 -h 选项指定主机地址,通过 -p 选项指定端口号

在这里插入图片描述

Keys 命令

keys 命令 用来查询服务器上匹配的 key(相当于模糊查询命令)

h?llo 将 ?替换成任意一个字符

h*llo 将 * 替换成0个或多个字符

h[ab]llo 只能匹配到 [] 指定的字符,别的字符都不行,相当于给出了固定的选项

h [ ^ x] llo []表示排除错误答案,除了匹配x,其他的任何字符都可以

h[a-b]llo 表示匹配到指定的字符

通过一些特殊符号,在服务上查找与之类似的key,这些特殊符号都有以下几种:

h?llo 将 ?替换成任意一个字符

h?llo 可以匹配到 hello/hxllo/hallo 等

操作演示:

  1. 设置三个key,分别为:hello、hallo、hbllo

在这里插入图片描述

  1. 使用 keys h?llo 进行模糊查询

在这里插入图片描述

h*llo 将 * 替换成0个或多个字符

h*llo 匹配到 h/hllo/heeeello

在这里插入图片描述

h[ab]llo 只能匹配到 [] 指定的字符,别的字符都不行,相当于给出了固定的选项

匹配到 hallo/hbllo
在这里插入图片描述

h [ ^ x] llo []表示排除错误答案,除了匹配x,其他的任何字符都可以

h [ ^ x] llo 可以匹配到 hello/hallo等,但是不会匹配到 hxllo,除了x其他的都可以
在这里插入图片描述

h[a-b]llo 表示匹配到指定的字符

h[a-b]llo 可以匹配到 hallo 或 hbllo

在这里插入图片描述

时间复杂度:O(n)

注意:Keys 的时间复杂度是 O(n),因为,它要遍历 Redis 中的所有数据,所以应该在生产环境上要慎重使用,尤其是 keys*,不要去使用,因为它会查询 Redis 中所有的 key,而 Redis 是一个单线程的服务器,执行 Keys * 的时间就比较长,就会造成 Redis 服务器被阻塞,无法给其他的客户端提供服务。

而 Redis 经常是用作缓存,是替 Mysql 冲锋陷阵的,万一 Redis 被Keys*给阻塞住了,此时其他的查询 Redis 的操作也就超时了,那么所有的查询请求就会给到 Mysql 上,此时突然一大波请求来到给到Mysql,就有可能给Mysql一个措手不及,给 Mysql 也搞挂了,此时就出现大问题了,如果没有及时的发现及时的恢复的话,会出现很大的问题!!!

Exists 命令

Exists key [key….] 查看 key 是否存在

**返回值:**key的个数

**时间复杂度:**O(k) 注意:这个k不是所有的数据,而是因为它是可以查看多个key是否存在的,所以这个k是要查询的key的数量

操作演示:

在这里插入图片描述

这里就出现一个问题:它可以一次查询多个 key,那么我一次查询多个 key 和 查询一个一个的 key 有什么区别吗?

答案:区别是很大的,首先呢,Redis 是 客户端-服务器 结构的,所以,是通过网络来通信的,而一次查询多个 key 时,只需要向服务器发送一次请求即可,而一次查询一个,一个一个的查,是要发送多个请求的,而网络通信的效率是比较低,成本是比较高的。

del key [key….] 删除 key

返回值:成功删除 key 的个数

**时间复杂度:**O(k) ,注意这个k不是所有的数据,而是因为它是可以查看多个key是否存在的,所以这个k是指定的 key 的数量。

操作演示:

在这里插入图片描述

Expire 命令

expire [key] seconds 给指定的key设置过期时间,时间单位是:秒。key 的存活时间超过这个值时就会自动删除

pexpire [key] 毫秒 给指定的key设置过期时间,时间单位是:毫秒

注意:这里设置过期时间,指定的 key 必须是已经存在的。

**返回值:**0或1,0 表示设置失败,1 表示设置成功。

时间复杂度是:O(1)

这种给 Redis 中的key设置过期时间的方式也常用于很多的场景,例如:给验证码设置过期时间,点外卖优惠券过期时间等

操作演示:

在这里插入图片描述

Ttl 命令

ttl [key] 获取指定key剩余的过期时间

**返回值:**剩余的过期时间/-1:没有设置过期时间/-2:没有指定的key

时间复杂度:O(1)

操作演示:

在这里插入图片描述

Redis 的过期策略是如何实现的?换句话说,一个Redis中的存在多个有过期时间的key,那么,Redis如何知道哪些key要被删除,哪些不被删除?(重要)

Redis 的过期策略整体是这两种方式相结合的:定期删除 和 惰性删除

惰性删除:假设有一个key的过期时间已经到了,但是暂时不会给他删除,先保留着,等到我们下次去访问这个key时,此时Redis服务器就会触发删除操作,将key删除,此时就返回一个 nil。

定期删除:定期的去扫描key,如果有过期的key,就进行删除,但是这里有一个问题就是,如果key非常多的话,扫描起来就比较浪费时间,所以,在这里对定期扫描的时间进行了要求,就是它在扫描检查的时候是一部分一部分抽取着扫描检查,以保证扫描检查的时间足够快。

这里为什么要对扫描的时间进行要求呢?

首先,Redis 是单线程执行任务的,Redis 主要的任务还要处理用户发来的命令,如果扫描key的时间太长,处理命令的任务就会被阻塞,所以,进行了要求。

以上两种方式,虽然可以对 key 进行删除,但是整体效果一般,它也可能会残留很多的key没有及时的删除掉。

Redis 为了删除操作进行补充,还提供了一系列的内存淘汰策略。

网上还有人说Redis有定时删除策略,这个说法是错误的,Redis 并没有采用定时删除策略

Type命令

type 查看key对应的数据类型

**返回值:**key 的数据类型

时间复杂度:O(1 )

操作演示:

在这里插入图片描述

再次明确,Redis 中,key 的类型固定就是 String,而 Value 的类型主要有以下几种:none, String,list,set,zset,hash,strem。这里面查看类型也就是查看 Value 的类型。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《数据结构与算法基础 by王卓老师》学习笔记——2.5线性表的链式表示与实现1

1.链式表示 2.链表举例 3.链式存储的相关术语 4.三个讨论题

【软件测试】之自动化测试

🏀🏀🏀来都来了,不妨点个关注! 🎧🎧🎧博客主页:欢迎各位大佬! 文章目录 什么是自动化测试Selenium介绍什么是SeleniumSelenium的特点工作原理 SeleniumJava环境搭建下载…

数学建模------Matlab数据可视化

目录 1.plot函数 (1)函数介绍 (2)参数介绍 (3)图形美化 (4)背景更改 (5)多组绘制 (6)图形叠加 (7)添加…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 英文单词联想(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 https://app5938.acapp.acwing.com.cn/contest/2/problem/OD…

Flume集群部署(手把手部署图文详细版)

前景概要: Kafka消息订阅系统在大数据业务中有着重要运用,尤其在实时业务中,kafka是必不可少的组件之一。 Flume是大数据组件中重要的数据采集工具,我们常利用Flume采集各种数据源的数据供其他组件分析使用。例如在实时业务中&…

大白菜U盘启动工具

大白菜如何u盘启动进winpe装系统大白菜是一款非常实用的U盘启动盘制作工具,可以帮助用户快速地将U盘制作成启动盘,从而方便地进行系统安装、维护和修复等操作。官方网站: 大白菜u盘启动盘制作工具_大白菜u盘装系统_大白菜pe_大白菜官网-首页…

机器人控制系列教程之Stewart平台简介和运动学分析

Stewart平台简介及应用场景 六自由度 Stewart 并联机器人结构简图如下图所示,主要有一个固定平台和一个移动平台以及六个可伸缩的推杆组成,通常情况下,固定平台与底座连接,移动平台在空间具有六个自由度,通过六个推杆…

设置Docker中时区不生效的问题

项目中使用docker-compose,并通过以下方式设置了时区 environment:- SET_CONTAINER_TIMEZONEtrue- CONTAINER_TIMEZONEAsia/Shanghai 但是并没有正确生效,网上有很多博客都在推荐这个做法,另外一种是使用标准环境标量 -TZAsia/Shangehai …

大型网站软件系统架构演进过程

在我们的生活中,通常会使用大型网站系统,比如购物网站淘宝,京东,阿里1688;大型搜索引擎网站百度,社交类的如腾讯旗下的微信,QQ及新浪旗下的微博等,他们通常都有一下特点: 高并发、大流量:这些系统必须能够处理成千上万甚至数百万的并发用户请求,以及持续…

Entity Framework EF Migration 迁移

针对Code First来说关注的只有实体类。当需求变更时只需要添加新的实体类或者在实体类中添加、删除、修改属性即可。但是修改完成之后要如何将修改同步到数据库中? migration 机制就出现了 ●启用Migrations   ●通过Add-Migration添加Migration   ●Update-D…

Feign 原理流程图练习-01

目录 作业: 老师给的参考流程图 要求 解答 知识扩展 Feign基础原理 接口定义 代理对象生成 请求调用 请求发送 响应处理 容错与熔断 总结 作业: 老师给的参考流程图 pdf版本 【金山文档 | WPS云文档】 Feign https://kdocs.cn/l/ctbagIyxN348 ​ 要求 结合上面…

Kafka集群部署(手把手部署图文详细版)

1.1.1 部署zookpeer 在node02下载并解压zookeeper软件包 cd /usr/local wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz 或者:scp cat192.168.28.100:/home/cat/zookeeper-3.4.6.tar.gz /tmp(注意目录&#xf…

代码随想录算法训练营第70天图论9[1]

代码随想录算法训练营第70天:图论9 ‍ 拓扑排序精讲 卡码网:117. 软件构建(opens new window) 题目描述: 某个大型软件项目的构建系统拥有 N 个文件,文件编号从 0 到 N - 1,在这些文件中,某些文件依赖于其他文件的…

Vue84-Vuex的工作原理与搭建开发环境

一、vuex工作原理 stats:是一个object对象,里面有很多key-value,存放的就是要操作的数据。mutations:是一个object对象,真正去操作stats的人。actions的作用:是一个object对象,当一个动作对应的…

使用zdppy_api+onlyoffice word文档在线共同编辑,附完整的vue3前端代码和python后端代码

参考文档: https://api.onlyoffice.com/zh/editors/basic https://api.onlyoffice.com/zh/editors/coedit 基本的架构思考: 文档表:记录的是文档信息 key:这个key可以标识唯一的一个文档,可以是文档的hash值fileType…

#数据结构 笔记三

二叉树 1. 概念 二叉树Binary Tree是n个结点的有限集合。它或者是空集n0,或者是由一个根结点以及两颗互不相交、分别称为左子树和右子树的二叉树组成。 二叉树与普通有序树不同,二叉树严格区分左子和右子,即使只有一个子结点也要区分左右。…

AR视频技术与EasyDSS流媒体视频管理平台:打造沉浸式视频体验

随着增强现实(AR)技术的飞速发展,其在各个领域的应用日益广泛。这项技术通过实时计算摄影机影像的位置及角度,将虚拟信息叠加到真实世界中,为用户带来超越现实的感官体验。AR视频技术不仅极大地丰富了我们的视觉体验&a…

3.js - premultiplyAlpha

你瞅啥啊!!! 先看效果图吧 代码 // ts-nocheck // 引入three.js import * as THREE from three // 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls // 导入lil.gui import { GUI } from three/ex…

万字总结随机森林原理、核心参数以及调优思路

万字总结随机森林原理、核心参数以及调优思路 在机器学习的世界里,随机森林(Random Forest, RF)以其强大的预测能力和对数据集的鲁棒性而备受青睐。作为一种集成学习方法,随机森林通过构建多个决策树并将它们的预测结果进行汇总&…

高精度定位技术:赋能电网智能化转型的新引擎

在当今社会,电力作为经济发展的血脉,其稳定高效运行对于国家能源安全与社会发展至关重要。随着科技的飞速进步,高精度定位技术正逐步渗透至电网管理的各个环节,成为推动电网智能化转型的关键力量。本文将深入探讨高精度定位技术在…