当前位置: 首页 > news >正文

Redis远程字典服务器(2) —— 全局命令

一,使用官方文档

  1. 学会使用文档,是一个优秀程序员的必备技能
  2. Redis的命令非常多(上百个),因为Redis是通过键值对存储数据的,key为string类型,但是value可以是其它的数据类型(字符串,哈希表,列表,集合等),所以不同的数据结构的操作命令都不一样。
  3. 全局命令指的是能够搭配任意一个数据结构来使用的命令
  4. 官方的命令查询文档网址为 Commands | Docs
  5. 虽然Redis这种知名软件,都是有中文文档的,但是还是建议看英语;后面工作中可能会用到不太知名的软件/库,虽然没有中文文档,但是一定也有英文文档,所以需要有一定的英语基础

二,set / get

这是Redis最核心的两个命令,Redis是按照键值对存储数据的,set就是存进去key和value,get就是根据key查询value,如下图:

也可以使用 mset和mget,一次插入或查询多组键值对 :

使用还是比较简单的,至于set时后面还有一些选项,以后再讲

对于key和value,可以加双引号,也可以加单引号,也可以不加;并且Redis的命令也支持双击Tap键自动补全,也不区分大小写 

三,keys

3.1 使用

keys是用来查询当前服务器上匹配的key,通过一些特殊符号(通配符)来描述key的模样,匹配上述模样的key就能被查询打印出来

pattern 表示包含特殊字符的字符串,可以翻译成“样式” 或者 “模式”,pattern可以有以下几种:

  • h?llo 匹配 hello , hallo 和 hxllo (?是匹配一个字符
  • h*llo 匹配 hllo 和 heeeello (*是匹配所有长度的字符串
  • h[ae]llo 匹配 hello 和 hallo 但不匹配 hillo ( [] 方括号里面的字母单独匹配
  • h[^e]llo 匹配 hallo , hbllo , ... 但不匹配 hello ([^]匹配除了方括号里面的
  • h[a-b]llo 匹配 hallo 和 hbllo ( [-] 匹配范围内的字符,[a-z]这个就是匹配所有字母的)

keys * 是查询所有的key,将当前所有的key全部打印到屏幕上

注意:keys命令的时间复杂度是O(N),所以在生产环境上,一般都禁止使用keys,尤其是大杀器keys *的时间非常长,就使Redis服务器被阻塞了,无法给其它客户端提供服务,后果是灾难性的。

场景:redis经常用于做缓存,挡在MySQL前面替MySQL负重前行,万一redis被一个keys *阻塞住了,此时其它的查询redis操作就超时了,此时这些请求就会直接查MySQL,然后突然一大堆请求过来了,MySQL可能就会措手不及直接挂了,这样的话系统就基本瘫痪了,如果你要是没能及时发现并及时恢复的话,年终奖就没了,更严重工作也就那啥了。

 3.2 关于生产环境

上面提到了下生产环境,那么下面来谈谈以后工作会遇到的几种环境:

  1. 办公环境:入职公司之后,公司给你发个电脑,现在的办公电脑一般8核16G内存512G,以后你在这个电脑上做ppt表格啥的,这个机器就叫做办公环境。
  2. 开发环境:有时候和办公环境一样,直接在这个电脑上写代码编译运行测试啥的,也有时候开发环境是单独的服务器,对于后端开发,后者概率大些;对于 前端/客户端 前者概率大。因为有的后端程序会比较复杂:①编译一次时间很久(C++),时间长要和 #include 要接锅 --> C++23引入module,能减少编译时间,但是大部分公司用的是比较老版本的C++,暂时不会引入module --> 所以就要使用一些高性能的服务器进行编译,会比本机电脑快很多    ②有的程序一启动,要消耗很多的CPU和内存资源,办公电脑可能难以支撑    ③有的程序比较依赖Linux,在Windows上环境难搭建
  3. 测试环境:测试工程师使用,也是属于单独的配置比较好的服务器(比如28核128G内存4T存储的主机)
  4. 线上环境/生产环境:产品开发和测试完成,正式部署到服务器并且对外开放的运行的环境,是直接面向用户的,一但是生产环境出问题,对于用户的使用会直接产生影响,直接影响到公司的营收,未来咱们去操作线上环境的任何一个设备或者程序,都要怀着12分的谨慎
  5. 而且以后我们也是要去操作生产环境的,把一个程序“上线”了才算是把活干完了,上线也可以认为是程序员的一个重要考核指标。,衡量一个实习生能不能转正留用,就看上线次数,假如一两个月才上线一次,基本凉凉,如果一周上线一两次,基本稳

四,exists

该命令负责判断一个或多个key是否存在,并返回个数

注意 一次查三个,和三次查一个,乍一看没区别,但是区别很大很大

Redis是一个客户端 - 服务器结构的程序,两者之间是通过网络进行通信的,学习过计算机网络我们知道,我们输入一个命令,都是通过网络协议栈,将命令字符数据一层层往下封装各协议的报头形成报文再发送的,分开的exists的写法会产生更多轮次的网络通信,而网络通信的成本比较大的

再比如一个场景,你打电话给别人说“你好”两个字,我们可以打一次电话将两个字一次性说完,也可以打两次电话一次说一个字,那么这两种方式哪个快大家都知道哈

五,del

该命令的作用是删除指定的key,可以一次删多个

问题:Redis的删除是否和MySQL的删除一样,成本很大呢?

解答:影响不会很大。redis主要的作用是作为缓存,此时里面存的数据只是一个热点数据,全量数据还是存在mysql中的,热点数据也是会经常变化的,所以把redis中的几个key删除几个,影响不大。当然把所有数据或者一大半数据干掉了,问题还是有点大的。相比之下,mysql的drop和delete from,代价是很大的。

如果是把redis作为数据库MySQL作为缓存,上面的情况就反过来了

六,expire / ttl

6.1 expire使用

主要作用是用来给key设定过期时间,单位为秒,因为上面也说了热点数据会经常变化,所以我们可以使其自动化。

 key的存活时间超过这个指定的值,就会被自动删除,有用且实用,很多业务场景有时间限制的,比如手机号验证码,外卖优惠券,都是在指定时间内有效

还有基于redis实现一个分布式锁,以前多线程的锁,都是在一个主机的一个程序里,分布式系统就是多个主机多个程序了,再需要互斥效果的话就所以需要分布式互斥锁,往redis里面写一个特殊的key value。为了避免出现不能正确解锁的情况, 通常都会在加锁的时候设置一下过期时间

还有以秒为单位对主机来说太慢了,我们可以使用pexpire,这个单位就是毫秒了

6.2 ttl使用

这个命令作用是查key的过期时间还剩多少,当返回-2时表示key不存在或已经过了过期时间被删除了:

在IP协议的报头字段中,有一个字段就是TTL,表示该报文能够跳转的路由器的最大个数,IP中的TTL表示次数,不是时间,和这个ttl不一样

6.3 Redis过期策略

一个redis可能同时存在很多key,这些key也有很大一部分有过期时间,那么redis服务器咋知道那些key已经过期要被删除,哪些还没过期呢?

  1. 如果直接去遍历所有的key,效率很低的,该方法直接排除
  2. redis整体的策略是两方面:定期删除,惰性删除。两种策略相结合
  3. 惰性删除:假设key已经到了过期时间,但是暂时还没删,紧接着后面有一次访问到了这个key,这时候查时间,发现到期了,于是这次访问会让redis删除这个key,同时返回一个nil
  4. 定期删除:和惰性删除一起搞,而且也不一次性全遍历完,抽取一部分验证过期时间,保证抽取简单的过程足够快

问题:为啥对于定期删除的时间要有明确要求呢?
解答:因为Redis是单线程的程序,主要的任务还是处理命令任务,还有刚才扫描过期key,如果扫描消耗时间太久了,会导致前者正常处理命令被阻塞,产生类似执行key * 这样的效果

虽然有了上述两种策略结合,但整体的效果一般,仍然可能会有很多过期的key残留,所以Redis还提供了一系列的内存淘汰策略,后面再细讲

七,type

该命令用于查看key对应的value的数据类型

lpush插入链表value,再type就是list类型在redis中,操作不同数据结构使用的命令差别是很大的

相关文章:

Redis远程字典服务器(2) —— 全局命令

一,使用官方文档 学会使用文档,是一个优秀程序员的必备技能。Redis的命令非常多(上百个),因为Redis是通过键值对存储数据的,key为string类型,但是value可以是其它的数据类型(字符串…...

Android平台如何不推RTMP|不发布RTSP流|不实时录像|不回传GB28181数据时实时快照?

技术背景 我们知道,Android平台不管RTMP推送、轻量级RTSP服务模块还是GB28181设备接入模块,早期,如果需要实现截图功能,又不想依赖Android系统接口,最好的办法是,在底层实现快照截图。 快照截图&#xff…...

tomcat文件上传漏洞练习

1、靶场账号注册 vulfocus 注册后邮箱中点击激活 2、首页选择并开启靶场 复制映射的ip和端口 在浏览器输入ip和端口 改成put并把1.jsp中内容复制进去 3打开哥斯拉,连接上面的网址...

项目实战_图书管理系统(简易版)

你能学到什么 一个简单的项目——图书管理系统(浏览器:谷歌)基础版我们只做两个功能(因为其它的功能涉及的会比较多,索性就放在升级版里了,基础版先入个门) 登录: ⽤⼾输⼊账号,密码完成登录功…...

Gazebo之MyRobot建立

Gazebo之MyRobot建立 1. 源由2. 示例Step 1: 新建一个简单世界Step 2: 新建一个模型(model)Step 3: 机器人组成链接(Links)Step 3.1: 新增底盘(Links/Chassis)Step 3.1.1: 惯性属性(Inertial properties)Step 3.1.2: 视觉(Visual)Step 3.1.3: 碰撞(Collision) Step 3.2: 新增左…...

WPF学习(5)- Border控件(边框布局)+GridSplitter分割窗口

严格来说,Border并不是一个布局控件,因为它并不是Panel的子类,而是Decorator装饰器的子类,而Decorator继承于FrameworkElement。我们要先看看它的父类Decorator。 public class Decorator : FrameworkElement, IAddChild {public…...

ADAS芯片及方案

一 ADAS芯片及方案 1.1 高通SA8775P Snapdragon Ride Flex(SA8775P)舱驾融合平台可通过单颗SoC同时支持数字座舱和智能驾驶功能,在CPU、GPU、NPU的处理能力方面具备强大的性能表现与领先优势,支持实现复杂的智能座舱功能&#x…...

5 mysql 查询语句

1.DML:对数据进行增删改查 提示:Execute执行 Execute and Suppress 执行并且抑制这个警告 person表的结构 /* DML:Data Manipulation Language 数据操作语言,对数据进行 增删改查操作,因为査询的操作太频繁和复杂,将…...

从网络上下载并展示图像数据

一、代码 from PIL import Image import requests from io import BytesIO import matplotlib.pyplot as pltimage_url "https://www.alleycat.org/wp-content/uploads/2019/03/FELV-cat.jpg" response requests.get(image_url) # response.content 获取 HTTP 响…...

Machine-Learning 机器学习

目录 基本概念与分类 工作原理 应用领域 发展趋势 机器学习中的深度学习是如何工作的,以及它如何影响其他机器学习算法? 在机器学习中,哪些特定的数据预处理技术最有效,特别是在处理大规模数据集时? 强化学习在…...

CSP 2023 普及组第一轮 - CSP/S 2023初试题 基础部分解析

第 1 题 在 C 中,下面哪个关键字用于声明一个变量, 其值不能被修改?(B) A. unsigned B. const C. static D. mutable 【const声明的变量不可修改】 第 2 题 八进制数 12345670(8) 和 07654321(8) 的和为(D) A. 222222…...

解锁IPython的跨平台魔法:深入探索%%script命令的神秘力量

IPython 的 %%script 魔法命令是一种强大的工具,它允许你在 IPython 环境中执行外部脚本。这个特性特别适用于需要在 IPython Notebook 中直接与 Web 技术交互的场景。下面我将为你详细介绍 %%script 命令的使用方法,并通过代码示例展示其强大功能。 一…...

如何避免项目发布后用户从浏览器WebPack中看到源码

打包前在config->index.js中设置productionSourceMap为false productionSourceMap: false,...

java学习19VUE

VUE NPM npm的全称是Node Package Manager 中文名为Node.js包管理器,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。NPM可以方便地从一个全球的代码库中获取并安装Node.js模块,这些模块可以用于构建应用程序、…...

Redis7(四)哨兵、集群

哨兵 吹哨人巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个从库转换为主库,继续对外服务 哨兵的作用: 监控redis运行状态,包括master和slave当master宕机了,能自动将slave转换为master 哨兵的功能…...

校园课程助手【3】-使用枚举类封装异常优雅处理全局异常

接着2中登录模块补充一个点: //可以看到这里返回给前端控制器的是一个类而不是html页面public RespBean doLogin(Valid LoginVo loginVo, HttpServletRequest request,HttpServletResponse response){return userService.doLogin(loginVo, request, response);}首先…...

LeetCode面试150——58最后一个单词的长度

题目难度:简单 默认优化目标:最小化平均时间复杂度。 Python默认为Python3。 目录 1 题目描述 2 题目解析 3 算法原理及代码实现 3.1 反向遍历 参考文献 1 题目描述 给你一个字符串 s,由若干单词组成,单词前后用一些空格字…...

MySQL——数据库的操作,数据类型,表的操作

MySQL——数据库的操作,数据类型,表的操作 1. 数据库的操作1.1 显示当前数据库1.2 创建数据库舍弃当前所写的SQL语句查看当前数据库服务全局的默认字符集 1.3 使用数据库1.4 查看当前操作的数据库查看MySQL的帮助 1.5 删除数据库 2. 常见数据类型2.1 数值…...

Go 临界资源 安全问题

临界资源安全的问题: 临界资源: 指并发环境中多个 进程/线程/协程 可以共享(都可以调用)的资源/变量,如果在并发环境中处理不当,就会造成一些 严重、问题 func main() {//临界资源a : 10go func() {a 100f…...

安卓常用控件(上)

文章目录 TextViewButtonEditText TextView textview主要用于在界面上显示一段文本信息。 属性名描述id给当前控件定义一个唯一的标识符。layout_width给控件指定一个宽度。match_parent:控件大小与父布局一样;wrap_content:控件大小刚好够包…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...