【Redis交响乐】Redis中的通用命令

文章目录

  • 1. 基本命令 get set
  • 2. 全局命令
    • (1)keys
    • (2)exists
    • (3)del
    • (4)expire && ttl
      • 面试题: redis中key的过期策略是怎么实现的?
      • 定时器的实现原理
        • (1)基于优先级队列/堆
        • (2)基于时间轮实现的定时器
    • (5) type

我们知道,redis是按照键值对的方式存储数据的.
Redis中基本的命令:

命令作用
get根据key来取value
set把key和value存储进去
keys用来查看匹配规则的key
exists用来判断指定key是否存在
del删除指定的key
expire给key设置过期时间
ttl查询key的过期时间
type查询key对应的value的类型

1. 基本命令 get set

命令作用
get根据key来取value
set把key和value存储进去

注意要先使用redis-cli命令进入客户端程序,如果设置了密码还需要使用密码登录后才能够输入redis命令哦~
set和get的演示如下:
在这里插入图片描述
set key value : key和value都是字符串.

在这里插入图片描述
对于上述的key value,不需要加上引号,就是表示字符串的类型,要是加单引号或者双引号也行.
redis命令不区分大小写.
在这里插入图片描述
get命令 直接输入key就会得到value
如果key不存在,就会返回nil(null)

2. 全局命令

Redis支持很多种数据结构,整体上来说,Redis键值对结构,key固定就是字符串,value是加上有很多种数据类型.比如:字符串,哈希表,列表,集合,有序集合等.操作不同的数据结构就会有不同的命令.
所谓全局命令,就是能够搭配任意一个数据结构来使用的命令.

命令作用
keys用来查看匹配规则的key
exists用来判断指定key是否存在
del删除指定的key
expire给key设置过期时间
ttl查询key的过期时间
type查询key对应的value的类型

(1)keys

用来查询当前服务器上匹配的key
key pattern
pattern包含特殊符号的字符串.

?匹配任意一个字符
*匹配0个或者多个任意字符
[abc]只能匹配到a b c,别的不行,相当于给出固定的选项
[^a]除了a意外的都能匹配到
[a-c]匹配a-c之间的字符 包含两侧边界

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

redis常作为缓存,是挡在mysql前面,为mysql遮风挡雨的人,万一redis被一个key * 阻塞住了,此时其他查询redis操作就超时了,此时就会直接查询mysql数据库.而mysql是比较脆弱的,此时大量的请求过来,mysql承受不住,就会导致系统瘫痪.

上面说到了生产环境,那么什么是生产环境呢?
生产环境是指软件或系统在实际运营和使用的真实环境中的部署和运行状态。它是指软件、应用程序或系统在正式投入使用,并提供服务给最终用户或客户的环境。
生产环境通常与开发环境、测试环境和预演环境等进行区分。在开发环境和测试环境中,开发人员和测试人员可以进行软件开发、调试和测试。而在预演环境中可以模拟真实的生产环境进行系统验证和性能测试。一旦通过了这些环境的验证,软件或系统才会部署到生产环境中供用户使用。

(2)exists

判定key是否存在
exists key [key...]
返回值:key存在的个数
针对多个key来说,是非常有用的.
时间复杂度:O(1)
redis组织key是按照哈希表的方式来组织的.
示例如下:
在这里插入图片描述
值得注意的是,以下两种写法的效果是相同的,但是有很大的区别.
在这里插入图片描述
这是因为Redis是一个客户端服务器结构的程序,客户端和服务器之间通过网络来进行通信.第一种方式:
在这里插入图片描述
第二种方式:
在这里插入图片描述
我们可以看到,分开的写法中,会产生更多轮次的网络通信.网络通信的效率相比于直接操作内存来说比较低.所以redis的很多命令都是支持一次就能操作多个key的.

(3)del

DEL key [key ...]
可以一次删除一个或多个key
时间复杂度:O(1)
返回值为:删除掉key的个数

示例:(k5不存在)
在这里插入图片描述
del命令类似于MySQL中的drop database drop table,但是在不同场景中的作用不同.
redis的主要应用场景,是作为缓存,此时redis中存储的只是一个热点数据,全量数据在mysql中,如果使用del命令删除少量数据,那么影响不大.但是如果删除了大量redis中的数据,此时mysql的请求量就高了,前面我们说过,MySQL是比较脆弱的,面对大量请求就有可能会承担不住.
redis作为数据库时,此时使用del命令就需要格外注意了.误删就会造成严重的后果.
redis作为消息队列(mq),时,这种情况下误删数据的影响就要具体结合场景分析了.

(4)expire && ttl

expire key seconds
作用是给指定的key设置过期时间,key存活时间超出这个指定的值,就会被自动删除.

在很多业务场景中,是有时间限制的.比如:
(1)手机验证码(在指定时间内有效)
(2)外卖优惠券(在指定时间内有效)
(3)基于redis实现分布式锁.为了避免出现不能正常解锁的情况,通常都在加锁的时候设置一下过期时间.

上述指令的单位是秒,在计算机中是非常长的.我们可以使用
pexpire key 毫秒
来进行毫秒级别的设置.
此处的设定过期时间,必须是针对已经存在的key设置,设置成功返回1,设置失败返回0.

时间复杂度:O(1)

ttl key
time to live 超时时间
作用是查看当前key的过期时间还剩多少,与expire搭配使用

pttl
与pexpire搭配使用.

面试题: redis中key的过期策略是怎么实现的?

一个redis 中可能同时存在很多很多key.这些 key 中可能有很大一部分都有过期时间.此时, redis服务器怎么知道哪些key已经过期要被删除,哪些key 还没过期呢?
redis的整体策略是:
(1)定期删除
每次抽取一部分,进行验证过期时间.保证这个抽取检查的过程足够快.(此处明确要求定期删除的时间足够快,是因为redis是单线程的程序,主要的任务就是处理每个命令的任务,扫描过期的key,但是如果扫描过期key消耗的时间太多,就可能会导致正常处理请求命令就被阻塞了,所以此处对定期删除的时间是由要求的.)
(2)惰性删除
假设这个key已经到了过期时间了,但是暂时还没有删除他,key还存在,紧接着,后面有一次访问正好用到了这个key,于是这次访问就会让redis服务器触发删除key操作,同时在返回一个nil

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

定时器的实现原理

(1)基于优先级队列/堆

正常的队列是先进先出.优先级队列则是按照指定的优先级先出.所谓优先级高就是按照自定义的顺序先出.在redis 过期key的场景中,就可以按照过期时间越早,优先级越高.

现在假定有很多key设置了过期时间.就可以把这些 key加入到一个优先级队列中,指定优先级规则是过期时间早的,先出队列.队首元素,就是最早的要过期的key.比如:
key1: 12:00
key2: 13:00
key3: 14:00
此时定时器中只要分配一个线程,让这个线程去检查队首元部,看是否过期即可.如果队首元素还没过期,后续元素一定没过期.此时扫描线程不需要遍历所有key,而是只看队首元素即可.另外在扫描线程检查队首元素过期时间的时候,也不能检查的太频繁.

此时可以根据当前时刻和队首元素的过期时间,设置一个等待,当时间差不多到了,系统再唤醒这个线程.此时扫描线程不需要高频扫描队首元素.把cpu的开销也节省下来了.

万一在线程休眠的时候,来了一个新的任务,是11:30要执行.可以在新任务添加的时候,唤醒一下刚才的线程.重新检查一下队首元素,再根据时间差距重新调整阻塞时间即可.

(2)基于时间轮实现的定时器

时间轮就是把时间划分成很多份.比如现在有一个任务要300ms后执行,那么就把这个任务挂在300ms后的这个链表上,这个指针会过100ms往后移动,尝试执行格子上的任务.以此来执行.
在这里插入图片描述
以上的两种方案,redis都没有采取.但是这两种方案都是属于搞笑的定时器的实现方式,很多场景中可能会使用到.
在Redis中,有一个比较核心的机制是事件循环,我们以后讲解.

(5) type

type key
作用是返回key对应的数据类型.
此处redis所有的key都是string,key对应的value可能会存在多种类型.
比如: none string list set zset hash stream
stream 是在redis作为消息队列的时候使用这个类型的value.

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

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

相关文章

pytest pytest-emoji通过表情包展示执行状态

pytest-emoji 是一个用于在 Pytest 测试运行期间显示 emoji 表情的插件。它可以为测试结果添加一些有趣的表情符号,以增加测试报告的可读性和趣味性。 使用 pytest-emoji 插件非常简单,只需按照以下步骤进行操作: 首先,确保已经安…

python实现图像的二维傅里叶变换——冈萨雷斯数字图像处理

原理 二维傅里叶变换是一种在图像处理中常用的数学工具,它将图像从空间域(我们通常看到的像素排列)转换到频率域。这种变换揭示了图像的频率成分,有助于进行各种图像分析和处理,如滤波、图像增强、边缘检测等。 在数学…

Glary Utilities Pro - 电脑系统优化全面指南:详尽使用教程

软件简介: Glary Utilities Pro 是一款全面的电脑优化工具,它旨在帮助用户提升计算机的性能和稳定性。这款软件提供了多种功能,包括系统清理、优化、修复以及保护。通过一键扫描,它可以识别并清除无用文件、临时数据、注册表错误等…

云短信平台优惠活动 - 华为OD统一考试

OD统一考试 题解: Java / Python / C++ 题目描述 某云短信厂商,为庆祝国庆,推出充值优惠活动。 现在给出客户预算,和优惠售价序列,求最多可获得的短信总条数。 输入描述 第一行客户预算M,其中 0<=M<=100 第二行给出售价表,P1,P2,… Pn, 其中 1<=n<=100…

【网络技术】【Kali Linux】Wireshark嗅探(三)用户数据报(UDP)协议

一、实验目的 本次实验使用wireshark流量分析工具进行网络嗅探&#xff0c;旨在了解UDP协议的报文格式。 二、网络环境设置 本次实验使用Kali Linux虚拟机完成&#xff0c;主机操作系统为Windows 11&#xff0c;虚拟化平台选择Oracle VM VirtualBox&#xff0c;组网模式选择…

C# 使用ZXing.Net生成二维码和条码

写在前面 条码生成是一个经常需要处理的功能&#xff0c;本文介绍一个条码处理类库&#xff0c;ZXing用Java实现的多种格式的一维二维条码图像处理库&#xff0c;而ZXing.Net是其.Net版本的实现。 在WinForm下使用该类库需要从NuGet安装两个组件&#xff1a; ZXing.Net ZXing…

什么是计算机视觉

计算机视觉&#xff08;Computer Vision&#xff09;是一门研究如何让计算机能够理解和分析数字图像或视频的学科。简单来说&#xff0c;计算机视觉的目标是让计算机能够像人类一样对视觉信息进行处理和理解。为实现这个目标&#xff0c;计算机视觉结合了图像处理、机器学习、模…

软件测试/测试开发丨Selenium环境安装配置

一、selenium 环境配置 1、下载浏览器 目前比较常用的浏览器是 Google Chrome 浏览器&#xff0c;所以本教程以 chrome 为主&#xff0c;后面简介一下其他浏览器的环境配置。 chrome 下载: www.google.cn/chrome/ 2、chromedriver 环境配置 chromedriver 是chromedriver提…

鸿蒙HarmonyOS-图表应用

简介 随着移动应用的不断发展&#xff0c;数据可视化成为提高用户体验和数据交流的重要手段之一。在HarmonyOS应用开发中&#xff0c;一个强大而灵活的图表库是实现这一目标的关键。而MPChart就是这样一款图表库&#xff0c;它为开发者提供了丰富的功能和灵活性&#xff0c;使得…

大创项目推荐 深度学习乳腺癌分类

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度&#xff0c;召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…

蓝牙物联网健康管理系统设计方案

随着我国医疗体制改革的快速发展&#xff0c;以及信息科技的更新换代&#xff0c;远程健康管理逐步成为医疗卫生健康服务的发展趋势。物联网技术推动着医疗健康服务体系发生重大改变&#xff0c;传统的定期至社区医院问诊的保健模式&#xff0c;被远程健康服务模式所取代。开发…

2023-12-29 服务器开发-centos部署ftp

摘要: 2023-12-29 服务器开发-centos-部署ftp 部署ftp vsftpd&#xff08;very secure FTP daemon&#xff09;是Linux下的一款小巧轻快、安全易用的FTP服务器软件。本教程介绍如何在Linux实例上安装并配置vsftpd。 前提条件 已创建ECS实例并为实例分配了公网IP地址。 背景…

Evidential Deep Learning to Quantify Classification Uncertainty

本片文章发表于NeurIPS 2018。 文章链接&#xff1a;https://arxiv.org/abs/1806.01768 一、概述 近年来&#xff0c;神经网络在不同领域取得了革命性的进步&#xff0c;尤其是在dropout、normalization以及skip connection等方法被提出之后&#xff0c;撼动了整个机器学习领…

鸿蒙4.0实战教学—基础ArkTS(简易视频播放器)

构建主界面 主界面由视频轮播模块和多个视频列表模块组成&#xff0c;效果图如图&#xff1a; VideoData.ets中定义的视频轮播图数组SWIPER_VIDEOS和视频列表图片数组HORIZONTAL_VIDEOS。 // VideoData.ets import { HorizontalVideoItem } from ./HorizontalVideoItem; impo…

楼宇对讲门铃选型分析

目前很多的高层住宅都使用了对讲门铃了&#xff0c;在频繁使用中&#xff0c;门铃会出现的越来越多种类&#xff0c;下面我就简单的介绍会有用到的几款芯片. 语音通话芯片&#xff1a;D34018,D34118,D5020,D31101; D34018 单片电话机通话电路&#xff0c;合并了必 需的放大器…

力扣刷题记录(21)LeetCode:121、123、188、309

目录 121. 买卖股票的最佳时机 123. 买卖股票的最佳时机 III 188. 买卖股票的最佳时机 IV 309. 买卖股票的最佳时机含冷冻期 如果某一天出售股票可以得到最大利润&#xff0c;那么股票买入的价格一定是这天之前股票的最低价格。 所以我们可以在遍历股票价格的时候不断更新股…

Jetson Orin安装riva以及llamaspeak,使用 Riva ASR/TTS 与 Llama 进行实时交谈,大语言模型成功运行笔记

NVIDIA 的综合语音 AI 工具包 RIVA 可以处理这种情况。此外&#xff0c;RIVA 可以构建应用程序&#xff0c;在本地设备&#xff08;如 NVIDIA Jetson&#xff09;上处理所有这些内容。 RIVA 是一个综合性库&#xff0c;包括&#xff1a; 自动语音识别 &#xff08;ASR&#x…

CSS 缩减中心动画

<template><!-- mouseenter"startAnimation" 表示在鼠标进入元素时触发 startAnimation 方法。mouseleave"stopAnimation" 表示在鼠标离开元素时触发 stopAnimation 方法。 --><!-- 容器元素 --><div class"container" mou…

002文章解读与程序——中国电机工程学报EI\CSCD\北大核心《计及源荷不确定性的综合能源生产单元运行调度与容量配置两阶段随机优化》已提供下载资源

&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;下载资源链接&#x1f4…

55.网游逆向分析与插件开发-游戏增加自动化助手接口-自动药水设定功能的逆向分析

内容来源于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;项目需求与需求拆解-CSDN博客 之前在找到过一个虚函数&#xff0c;每个按钮的都有一个实现机制&#xff0c;参考这里游戏结束过程的逆向分析 实际上找起来会不会用上不知道&#xff0c;接下来开始逆…
最新文章