浅谈Redis和一些指令

浅浅谈一谈Redis的客户端

Redis客户端

Redis也是一个客户端/服务端结构的程序。

MySQL也是一个客户端/服务端结构的程序。

Redis的客户端也有多种形态

1.自带命令行客户端

redis-cli

2.图形化界面的客户端(桌面程序,web程序)

像这样的图形化程序,依赖 windows 系统.而未来在实际工作中,你用来办公的 windows 系统,连接到服务器可能会有诸多限制,你的 windows 上的图形化界面客户端能不能连上你们的服务器里的 redis, 是个未知数!!!(和 mysql 同理)

中间可能会经历很多的跳板机,堡垒机,权限校验。

3.基于redis的api自行开发客户端(工作中最主要的形态)

非常类似于MySQL的C语言API和JDBC

同样是存储键值对数据,用Redis和 hash map的优劣

使用hash map是可以直接操作内存的。

使用Redis是先通过网络然后操作内存的

Redis中最核心的两个命令:

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

get根据key来取value

set把key和value存储进去。

必须要先进入redis-cli 客户端程序,才能输入redis指令

这里的key和value都是字符串。

对于上述这里的key 和 value ,不要加上引号,就是字符串的类型。

当然加上引号也是可以的,单引号与双引号都行。

Redis的命令是不区分大小写的,也就和MySQL类似。

当输入get命令的时候,如果当前的key不存在,会返回一个nil,和null/NULL同理。

Redis全局命令

全局命令,就是能够搭配任意一个数据结构来使用的命令

Redis支持很多种数据结构,整体上来说,Redis是键值对结构,key固定是字符串,value实际上会有多种类型。(字符串,哈希表,列表,集合,有序集合)

操作不同的数据结构就会有不同的命令。

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

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

语法: keys pattern

此中,pattern是包含特殊符号字符串。

规则大致如下

当然,keys命令的时间复杂度为O(N)

所以在生产环境上,一般都会禁止使用keys命令,尤其是keys *

原因是生产环境上的key可能会特别的多,而redis是一个单线程的服务器。执行keys * 的时间非常的长,就是redis服务器被阻塞了,无法给其他的客户端提供服务。

redis经常会用于做缓存,挡在MySQL前面,替MySQL负重前行的家伙,

万一redis被一个keys * 阻塞住了,此时其他的查询redis操作就会超时,此时这些请求就会直接查询数据库,然后突然一大波请求过来了,MySQL就会措手不及,就挂掉了。

导致整个系统瘫痪了。

exists 判定key是否存在

语法:exists key / [key ...]

返回值:key存在的个数

键值对存储的体系中(类似哈希表)

key得是唯一的

所以这个返回值返回一个非0/1数是对于多个key来说的。

时间复杂度为O(1),也可以说是O(N),如果是N,就是指key的个数。

redis组织这些key就是按照哈希表的方式来组织的。

redis的value可以是多种数据结构,本身又是一个通过哈希表的方式来组织的。

如果我们有两个名分别为hello和hallo的key,我们执行以下两组命令。

exists hello hallo

exists hello

exists hallo

这里虽然能让我们知道的结果是一样的,但是其实区别还是很大的。

原因:

redis 是一个客户端/服务器结构的程序,客户端和服务端之间通过网络来进行通信。

分开的写法会产生更多的网络通信,效率会比较低,且成本比较高。

当然这里的效率和成本是与内存进行相比。

封装和分用

进行网络通信的时候,发送方发送一个数据,这个数据就要从应用层到物理层,层层封装。

(每一层协议都要加上报头和报尾)

接收方收到一个数据,这个数据就要从物理层到应用层,层层分用。

(把每一层协议中的报头或者报尾给拆掉)

跟发快递和收快递相似。

网卡是IO设备,速度上是和内存没法相提并论的。

更何况,客户端和服务器不一定在同一台主机上,中间可能还相隔十分远。

redis也很清楚上述的问题,所以redis的很多命令都是支持一次就能操作多个key /多种操作。

del

删除指定的key(可以一次删除一个或多个)

语法:del key [key...]

时间复杂度为O(1)

返回值:删除掉的key的个数

这里还是提个问题,这个del命令是否具有像MySQL一样的危险程度?

一般来说,危险程度还是比较小的,由于redis的一个主要场景是作为缓存,此时的redis存放的是热点数据,全量数据存放在MySQL当中,此时,如果把redis中的key删除了几个,一般来说问题是不大的。

相比之下,如果是MySQL这样的数据被删除,可能影响是巨大的。

但是如果redis作为数据库,此时误删的影响就很大了。

如果是把redis作为消息队列(mq) 这种需要具体问题具体分析。

expire

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

语法: expire key seconds(秒)

很多业务场景,是有时间限制的。   经典的是---手机验证码。

eg:点外卖---优惠券  在指定的时间内有效  这个场景也是可以使用expire来实现

基于redis 实现分布式锁   ---  为了避免出现不能正确解锁的情况,通常都会在加锁的时候设置一个过期时间。

在使用expire的时候,还是有个小问题,这个单位也是一个小问题,对于计算机来说,秒这个单位是非常长的。

那么就可以使用底下类似命令。

pexpire key 毫秒

时间复杂度为O(1)

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

生产环境(线上环境)

未来工作中会涉及到的几个环境

1.办公环境,可能是一台笔记本电脑

2.开发环境,有的时候,开发环境和办公环境是同一个,有的时候,开发环境是一个单独的服务器。

PS:做前端/客户端,一般来说,开发环境就是办公环境

做后端,很可能是一个单独的服务器。

有的后端程序比较复杂

1.编译一次时间特别长(C++) -> C++ 23 才会引入module(#include接锅)

所以会使用一些高性能的服务器进行编译。

2.有的程序一启动,就要消耗很多的CPU和内存资源

3.有的程序比较依赖Linux,在windows环境搭建不起来

3.测试环境(测试工程师使用)

以上统称为线下环境,外界用户无法访问到。

4.线上环境/生产环境

线上环境,外界用户是可以访问到的。

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARM、X86、RISC-V三分天下

引入: 简单的介绍一下X86、ARM、RISC-V三种cpu架构的区别和应用场景。 目录 简单概念讲解 1. X86架构 2. ARM架构 3. RISC-V架构 应用场景 X86、ARM和RISC-V是三种不同的CPU架构,它们在设计理念、指令集和应用场景上有一些区别。 简单概念讲解 1. X…

27.WEB渗透测试-数据传输与加解密(上)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:26.WEB渗透测试-BurpSuite(五) BP抓包网站网址:http:…

电商技术揭秘七:搜索引擎中的SEO关键词策略与内容优化技术

文章目录 引言一、关键词策略1.1 关键词研究与选择1. 确定目标受众2. 使用关键词研究工具3. 分析搜索量和竞争程度4. 考虑长尾关键词5. 关键词的商业意图6. 创建关键词列表7. 持续监控和调整 1.2 关键词布局与密度1. 关键词自然分布2. 标题标签的使用3. 首次段落的重要性4. 关键…

Hive 之 UDF 运用(包会的)

文章目录 UDF 是什么?reflect静态方法调用实例方法调用 自定义 UDF(GenericUDF)1.创建项目2.创建类继承 UDF3.数据类型判断4.编写业务逻辑5.定义函数描述信息6.打包与上传7.注册 UDF 函数并测试返回复杂的数据类型 UDF 是什么? H…

xss.pwnfunction-Ugandan Knuckles

这个是把<>过滤掉了所以只能用js的事件 ?weya"onfocus"alert(1337)" autofocus"

GIT版本管理使用示例

一、创建好远程代码仓库后&#xff0c;复制远程仓库的地址 二、新建一个文件夹&#xff0c;在文件夹里打开Git Bash Here 三、输入git clone 远程仓库地址&#xff0c;仓库就初始化完成了 四、新建一个文本文件&#xff0c;假设这是我们开发的代码 五、打开文本&#xff0c;假设…

高精度端到端在线校准环视相机和LIDAR(精度0.2度内!无需训练数据)

高精度端到端在线校准环视相机和LIDAR&#xff08;精度0.2度内&#xff01;无需训练数据&#xff09; 附赠自动驾驶学习资料和量产经验&#xff1a;链接 写在前面 在自动驾驶车辆的使用寿命内&#xff0c;传感器外参校准会因振动、温度和碰撞等环境因素而发生变化。即使是看似…

蓝桥杯刷题 前缀和与差分-[NewOJ P1819]推箱子(C++)

题目描述 在一个高度为H的箱子前方&#xff0c;有一个长和高为N的障碍物。 障碍物的每一列存在一个连续的缺口&#xff0c;第i列的缺口从第l各单位到第h个单位&#xff08;从底部由0开始数&#xff09;。 现在请你清理出一条高度为H的通道&#xff0c;使得箱子可以直接推出去。…

Day106:代码审计-PHP原生开发篇文件安全上传监控功能定位关键搜索1day挖掘

目录 emlog-文件上传&文件删除 emlog-模板文件上传 emlog-插件文件上传 emlog-任意文件删除 通达OA-文件上传&文件包含 知识点&#xff1a; PHP审计-原生开发-文件上传&文件删除-Emlog PHP审计-原生开发-文件上传&文件包含-通达OA emlog-文件上传&文件…

【数据结构与算法】:直接插入排序和希尔排序

1. 排序的概念及其意义 1.1 排序的概念 所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 1.2 排序的稳定性 假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若…

重装系统之后,电脑连网卡都没反应怎么办?

前言 有些电脑比较奇葩&#xff0c;安装完成之后会出现网卡连驱动都没有&#xff0c;这时候要安装电脑驱动可是真的烦躁。怎么下手呢&#xff1f; 如果确定电脑的网卡型号还好&#xff0c;直接找个电脑下载个对应的网卡驱动&#xff0c;用U盘复制过去就能安装。 但如果不知道…

【LeetCode】--- 动态规划 集训(二)

目录 一、63. 不同路径 II1.1 题目解析1.2 状态转移方程1.3 解题代码 二、931. 下降路径最小和2.1 题目解析2.2 状态转移方程2.3 解题代码三、174. 地下城游戏3.1 题目解析3.2 状态转移方程3.3 解题代码 一、63. 不同路径 II 题目地址&#xff1a; 不同路径 II 一个机器人位于…