Redis—全局命令

news2025/1/18 13:53:39

Redis—全局命令

  • 🔎get / set
  • 🔎常用全局命令
    • keys
    • exists
    • del
    • expire
    • ttl
    • key 的过期策略
    • type

Redis 官网

Redis 中的命令不区分大小写

进入 Redis 客户端

redis-cli -h Redis 服务器的 IP 地址 -p Redis 服务器的端口号
  • 省略 -h 表示 Redis 服务器的 IP 地址为 localhost
  • 省略 -p 表示 Redis 服务器的端口号为 6379
redis-cli

🔎get / set


Redis 是按照键值对的方式存储数据

  • get, 根据 key 获取对应的 value
  • set, 存储 key 和 value
语法
set key value
get key

示例
set mouse keyboard
get mouse

如果 get 的 key 值不存在, 则会返回 nil
你可以将 nil 理解为 null

🔎常用全局命令


Redis 是键值对结构, key 是固定字符串
value 有多种类型, 包括

  1. 字符串
  2. 哈希表
  3. 列表
  4. 集合
  5. 有序集合

针对不同的数据结构, 会有不同的操作命令

全局命令, 即能够搭配任意一个数据结构进行使用

keys


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

通过一些特殊符号描述所要匹配的 key

语法
keys pattern

示例
keys h?llo
keys h*llo
keys h[abc]llo
keys h[^abc]llo
keys h[a-e]llo

pattern, 即要匹配的 key 的样式

解释🍂

h?llo, ? 表示任意一个字符
h*llo, * 表示任意多个字符
h[abc]llo, 表示仅匹配[]中的内容. 即匹配 hallo, hbllo, hcllo
h[^abc]llo, 表示仅排除[]中的内容. 即排除 hallo, hbllo, hcllo
h[a-e]llo, 表示匹配 hallo, hbllo, hcllo, ..., hello

注意🍂

keys pattern 命令的时间复杂度是 O(N)

因此在生产环境中一般禁止使用 keys pattern 命令(尤其是 keys * → 匹配所有)

这是因为在生产环境中 key 可能会非常多, 而 Redis 是一个单线程服务器, 执行 keys * 的时间较长, 这样就会导致 Redis 服务器被阻塞, 从而无法向其他客户端提供服务

我们知道, Redis 经常用于缓存存储热点数据, 替代 MySQL 负重前行
如果 Redis 被 keys * 操作阻塞, 那么请求就会直接查询数据库, 就容易导致 MySQL 挂了

对于生产环境的解释🍂

生产环境, 一般又称为线上环境, 外界用户能够访问
(办公环境, 开发环境, 测试环境一般统称为线下环境, 外界用户无法访问)

生产环境出现问题, 一定会影响用户的使用

exists


exists 用于判断某个 key 是否存在

返回值为 key 存在的个数

语法
exists key

示例
判断某一个 key 是否存在
exists hello 
exists hi
判断多个 key 是否存在
exists hello hi

Redis 是一个客户端服务器结构的程序. 而客户端, 服务器之间通过网络进行通信
因此在判断多个 key 是否存在时尽量写成 exists hello hi 这样的形式
避免写成 exists hello + exists hi 这样的形式

注意🍂

exists key 命令的时间复杂度是 O(1)

Redis 中的键值对通过哈希表的方式组织, 其中的 value 支持很多的数据结构类型
因此 exists key 命令为 O(1)

del


del(delete) 用于删除指定的 key

返回值为删除的 key 的个数

语法
del key

示例
删除指定的一个 key
del hello
del hi
删除指定的多个 key
del hello hi

删除指定的多个 key 时尽量写成 del hello hi 这样的形式

注意🍂

del key 命令的时间复杂度是 O(1)

expire


expire 用于给指定的 key 设置过期时间(前提是该 key 已经存在)
过期时间的单位是 s

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

语法
expire key 

示例
expire hello
expire hi

注意🍂

expire key 命令的时间复杂度是 O(1)

ttl


ttl(time to live) 用于查看指定 key 的过期时间还剩多久

返回值表示剩余的过期时间

特殊的返回值

  • -1, 表示未设置过期时间
  • -2, 表示 key 不存在
语法
ttl key

示例
ttl hello
ttl hi

注意🍂

ttl key 命令的时间复杂度是 O(1)

key 的过期策略


Redis 中可能同时存在很多的 key, 这些 key 中可能一大部分都有过期时间
那么 Redis 如何确定哪些 key 是过期了的需要被删除, 哪些还没有过期呢

Redis 的主要策略是

  1. 惰性删除
  2. 定期删除

惰性删除🍂

假设某一个 key 已经过期, 但还没有删除
如果后面有一次访问正好需要这个 key, 于是这次访问就会触发 Redis 的删除操作, 再将对应的 key 值返回 nil

举个栗子🌰

A 去小卖部买薯片, 此时货架上就还剩一包 A 最爱吃的薯片
A 拿起薯片就去结账, 结账时看到薯片的生产时间, 保质期意识到薯片过期了
于是 A 告诉老板不买了, 老板便将过期的薯片下架
(惰性删除)

定期删除🍂

每次抽取一部分进行验证过期时间
需要保证校验过程足够快, 即校验的时间是一定的

举个栗子🌰

小卖部的老板不能总是让顾客发现商品有没有过期, 要不他这个小卖部就倒闭了
于是老板定期的检查货架上的商品有没有过期
但是老板年事已高, 心中无志. 不想将他的小卖部做大做强, 再创辉煌
于是老板每次都非常快速的检查一部分商品的过期时间, 然后继续抽着烟, 喝着酒, 烫着头~~
(定期删除)

为什么对于定期删除的时间有要求

这是因为 Redis 是单线程的程序, 其主要的任务是处理请求命令
如果扫描过期的 key 的时间过长, 就会阻塞正常的处理请求

type


type 用于查询 key 所对应 value 的类型

返回值包括

  • none, 表示 key 不存在
  • string
  • list
  • set
  • zset
  • hash
  • stream, 当 redis 作为消息队列时使用的类型
语法
type key

示例
type hello
type hi

注意🍂

type key 命令的时间复杂度是 O(1)


🌸🌸🌸完结撒花🌸🌸🌸


在这里插入图片描述

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

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

相关文章

【ASP.NET MVC】数据库访问(5)

一、ORM简介 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 以上是官话,个人理解: 1、解决问题:数据库的访问 2、如何解决&a…

Vue路由:Vue Router

Vue Router 介绍 Vue Router 是 Vue.js (opens new window) 官方的路由管理器。 核心深度集成,包含的功能有: 嵌套的路由/视图表 模块化的、基于组件的路由配置 路由参数、查询、通配符基于 Vue.js 过渡系统的视图过渡效果 细粒度的导航控制 Vue Rou…

学习系统编程No.33【生产消费模型】

引言: 北京时间:2023/7/22/14:27,现实和预期往往相差是巨大的,哈哈哈!白天睡不醒,晚上睡不着,就像一个夜猫子一样。熬夜耍手机,我真的是专业的,已经连续好久没有正常睡过…

【C++】类和对象 - 中

目录 1. 类的6个默认成员函数2. 构造函数2.1 概念2.2 特性3.3 默认构造函数 3. 析构函数3.1 概念3.2 特性 4. 拷贝构造函数4.2 概念4.3 特性4.3 传参或作返回值 5. 赋值运算符重载5.1 运算符重载5.2 赋值运算符重载5.3 前后置 --重载5.4 自定义类型的输出输出 6. const成员函数…

SAP MM学习笔记15-物料调达中的Master数据(1)-仕入先Master

SAP中做一个购买发注的时候,涉及到以下Master数据: 1,仕入先Master(供应商):跟谁买 2,品目Master(物料):买什么 3,购买情报:什么价…

电脑误删除环境变量Path

今天在搞环境变量 一不注意手一滑把Path删除了,当时惊了一身冷汗,幸好看见有别人讲的补救措施,赶紧记录一下: 首先进入注册表winR,输入regedit: 在注册表编辑器中进入到【HKEY_LOCAL_MACHINE\SYSTEM\Contr…

基于 STM32自研多任务+SpringBoot+Vue 农业大棚智能调光系统

工作以后常常容易感到疲于奔命,即使在周末也没有得到高质量的休息。打工人/学生党如何过周末?你有哪些延长周末和下班时间的好方法吗?- 方法就是多积累,多发博客,将感悟全写出来!!,接…

Python——调用webdriver.Chrome() 报错

今天运行脚本&#xff0c;报错内容如下&#xff1a; collecting ... login_case.py:None (login_case.py) login_case.py:11: in <module> dr webdriver.Chrome() D:\Program Files (x86)\Python\Python39\Lib\site-packages\selenium\webdriver\chrome\webdriver.p…

改造 dify 项目适配自建的 OpenAI API 服务

改造 dify 项目适配自建的 OpenAI API 服务 0. 背景1. 修改默认的 api_base 地址2. 修改 openai_provider.py3. 重新构建 docker 镜像4. 修改 docker-compose.yaml5. 启动项目 0. 背景 项目 https://github.com/langgenius/dify.git 的 OpenAI 配置项目里&#xff0c;现在(202…

01-1 搭建 pytorch 虚拟环境

pytorch 管网&#xff1a;PyTorch 一 进入 Anaconda 二 创建虚拟环境 conda create -n pytorch python3.9注意要注意断 VPN切换镜像&#xff1a; 移除原来的镜像 # 查看当前配置 conda config --show channels conda config --show-sources# 移除之前的镜像 conda config --…

力扣初级算法(二分查找)

力扣初级算法(二分法)&#xff1a; 每日一算法&#xff1a;二分法查找 学习内容&#xff1a; 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 2.二分查找流程&…

解密外接显卡:笔记本能否接外置显卡?如何连接外接显卡?

伴随着电脑游戏和图形处理的需求不断增加&#xff0c;很多笔记本电脑使用者开始考虑是否能够通过外接显卡来提升性能。然而&#xff0c;外接显卡对于笔记本电脑是否可行&#xff0c;以及如何连接外接显卡&#xff0c;对于很多人来说仍然是一个迷。本文将为您揭秘外接显卡的奥秘…

javax.servlet.ServletException: Servlet[dispatcher]的Servlet.init()引发异常----解决方法

目录 javax.servlet.ServletException: Servlet[dispatcher]的Servlet.init&#xff08;&#xff09;引发异常----解决方法 问题&#xff1a;报500错&#xff1a; 解决方法 运行结果 javax.servlet.ServletException: Servlet[dispatcher]的Servlet.init&#xff08;&#x…

linux文件描述符fd

文件描述符 fd是一个>0 的整数 每打开一个文件&#xff0c;就创建一个文件描述符&#xff0c;通过文件描述符来操作文件 预定义的文件描述符: 0:标准输入&#xff0c;对应于已打开的标准输入设备(键盘) 1:标准输出&#xff0c;对应于已打开的标准输出设备(控制台) 2.标准错误…

通向架构师的道路之apache_tomcat_https应用

一、总结前一天的学习 通过上一章我们知道、了解并掌握了Web Server结合App Server是怎么样的一种架构&#xff0c;并且亲手通过Apache的Http Server与Tomcat6进行了整合的实验。 这样的架构的好处在于&#xff1a; 减轻App Server端的压力&#xff0c;用Web Server来分压…

关于Express 5

目录 1、概述 2、Express 5的变化 2.1 弃用或删除内容的列表&#xff1a; app.param&#xff08;name&#xff0c;fn&#xff09;名称中的前导冒号&#xff08;&#xff1a;&#xff09; app.del() app.param&#xff08;fn&#xff09; 复数方法名 res.json&#xff0…

EMC VNX2代base module的更换步骤

开始之前&#xff0c;先介绍一下什么是EMC VNX2代设备以及什么是base module&#xff1f;EMC的VNX存储分为1代和2代&#xff0c;两个物理架构发生了很大的变化&#xff0c;VNX2代的型号是偶数的&#xff0c;如VNX5200&#xff0c;VNX5400&#xff0c;VNX5600&#xff0c;VNX580…

windows服务器iis PHP套件出现FastCGI等错误解决方法汇总

如果您的服务器安装了PHP套件&#xff0c;出现了无法打开的情况&#xff0c;请参照如下办法解决&#xff1a; 首先&#xff0c;需要设置IIS允许输出详细的错误信息到浏览器&#xff0c;才好具体分析 错误一&#xff1a; 处理程序“FastCGI”在其模块列表中有一个错误模块“Fast…

面试题:创建JS对象的几种方式?构造函数是什么?new操作符具体干了什么?为什么字符串可以使用length?

内置构造函数还未更新完&#xff0c;待更新。。。 js创建对象的三种方式&#xff1f;构造函数是什么&#xff1f;new操作符具体干了什么&#xff1f;为什么字符串可以使用length&#xff1f; 内置构造函数还未更新完&#xff0c;待更新。。。一、利用对象字面量创建对象二、利用…

Nodejs中的全局对象

今天我们将探讨Nodejs中的全局对象&#xff0c;这是Nodejs中重要且有趣的知识点。我们将通过生动形象的例子和风趣的风格来深入理解这些概念&#xff0c;并比较Nodejs中的全局对象与前端JavaScript中的全局对象之间的异同点。 全局对象是什么&#xff1f; 在Nodejs环境中&…