浅谈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.线上环境/生产环境

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

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

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

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

相关文章

3d代理模型怎么转换成标准模型---模大狮模型网

在当今的虚拟世界中,3D建模技术被广泛运用于游戏开发、电影制作、工业设计等领域。在3D建模过程中,有时会遇到需要将代理模型转换成标准模型的情况。模大狮将从理论和实践两方面,介绍如何将3D代理模型转换成标准模型,以帮助读者更…

推荐一款免费开源引擎:批量识别PDF及图片表格及文字(可本地化部署)

在数字化时代,信息的快速处理和高效管理成为企业和个人的重要需求。表格文字识别技术作为一项关键的技术,能够将纸质或图片中的表格数据快速转换为结构化的电子数据,极大地提高了数据处理的效率和准确性。本文将对思通数科的表格文字识别技术…

MySQL复制拓扑2

文章目录 主要内容一.配置基本复制结构1.分别在三台主机上停止mysqld服务,并对状态进行确认:代码如下(示例): 2.对三个MySQL服务器的配置文件分别进行编辑,在[mysqld] 选项组中添加以下红色条目:3.在数据目…

淘宝优惠券领取软件叫什么?

草柴返利APP是一款淘宝优惠券领取软件。用户可以通过草柴淘宝优惠券领取软件轻松查找领取淘宝大额隐藏优惠券,领取成功后再购物可享受券后价优惠。同时,通过草柴APP领券购买成功,确认收货后再回到草柴APP提取购物返利,享受双重省钱…

【自用笔记】【大数据】

1 mapreduce (1)Map任务的数量:由输入数据的大小决定的,如文件数量和大小、HDFS块大小以及FileInputFormat的设置等。每个MapSlot可以运行一个Map任务 (2)Reduce任务的数量(分区数)&…

DHCP-PXE

Dynamic Host Configuration Protocol 动态主机配置协议 1.Selinux 调试为Permission 防火墙配置 搭建DHCP的主机必须有一个静态地址,提前配置好 安装DHCP软件 服务名为dhcpd DHCP地址分配四次会话, DISCOVERY发现 OFFER 提供 REQUEST 回应 A…

vue使用iview导航栏Menu activeName不生效

activeName不生效 一、问题一、解决方案, 一、问题 根据ivew官网的提示,设置了active-name和open-names以后,发现不管是设置静态是数据还是设置动态的数据,都不生效 一、解决方案, 在设置动态名称的时候&#xff0c…

修复打印机显示为脱机的几种方法,总有一种适合你

打印机显示为脱机有几个可能的原因。在大多数情况下,只要对症下药,问题就很容易解决。下面解释了打印机脱机的原因,以及如何使其联机并再次打印。 “打印机脱机”是什么意思 当打印机显示为脱机时,这意味着它当前未通过电缆或Wi-Fi网络连接到计算机。它无法与你的计算机通…

Feign(黑马程序员)

Feign是代替RestTemplate进行http请求的。 定义和使用 Feign 客户端&#xff1a; 1 引入依赖&#xff1a; <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </depe…

Autosar BswM 模式管理

EcuMs管理ECU上下电状态,BswM管理模式,协同工作。当使用EcuM - Fixed时,它将向BswM指示当前ECU状态 有了BswM,从图可以更加直观看出,BswM管理各个模块,每个模块独立,降低耦合。 BswM 的主要功能包括: 模式管理:BswM 可以管理和控制 ECU 的不同模式,例如正常模式、备…

2024.4.5|牛客小白月赛90

2024.4.5|牛客小白月赛90 A.小A的文化节 B.小A的游戏 C.小A的数字 D.小A的线段&#xff08;easy version&#xff09; E.小A的任务 F.小A的线段&#xff08;hard version&#xff09; 心有猛虎&#xff0c;细嗅蔷薇。你好朋友&#xff0c;这里是锅巴的C\C学习笔记&#xff0c…

【鸿蒙 HarmonyOS】获取设备的地理位置

一、背景 获取移动设备的地理位置&#xff0c;包含&#xff1a;经度、维度、具体地理位置等&#xff0c;地理位置信息能在许多业务场景中被应用&#xff0c;如导航、地图服务、位置服务、社交媒体等。 下面以一个Demo例子&#xff0c;来实现获取设备地理位置的功能 官方文档…

无头单向非循环链表的实现

1.链表的结构 在用代码实现之前&#xff0c;我们要先了解这种链表的逻辑结构和物理结构&#xff0c; 在逻辑上我们能知道这种链表能够通过前一个节点的 next 来存储下一个节点的地址&#xff0c;从而能够找到下一个数据&#xff0c;这就是一种线性结构&#xff0c;我们可以把数…

智能感应门改造工程

今天记录一下物联网专业学的工程步骤及实施过程 智能感应门改造工程 1 规划设计1.1 项目设备清单1.2项目接线图 软件设计信号流 设备安装与调试工程函数 验收 1 规划设计 1.1 项目设备清单 1.2项目接线图 软件设计 信号流 设备安装与调试 工程函数 工程界面: using System; …

循环队列的实现及应用——桶排序bucket_sort、基数排序radix_sort

一、循环队列的实现 代码解释 1、完成初始化 2、定义方法 3、测试实例 4、完整代码 class AQueue:def __init__(self, size=10):self.__mSize = sizeself.__front=0self.__rear = 0self.__listArray = [None] * size#清空元素def clear(self):self.__front = 0self.__rear =…

腾讯游戏革命:手游内400+AI角色个性化成长,成本削减90%|TodayAI

在全球游戏开发者大会&#xff08;GDC&#xff09;上&#xff0c;腾讯游戏以一场技术革新的展示&#xff0c;震撼了整个游戏界。最令人瞩目的是&#xff0c;《火影忍者》手游中包含了超过400个AI角色&#xff0c;每个角色都拥有独特的个性。这一成就得益于腾讯新开发的大规模强…

江协科技STM32:TIM输出比较

输出比较模块的主要功能&#xff1a;输出一定频率和占空比的PWM波形 CC是捕获比较的意思,R是Register&#xff0c;寄存器的意思&#xff0c;CCR捕获比较寄存器它是输入捕获和输出比较共用的 当使用输入捕获&#xff0c;它就是捕获寄存器 当使用输出比较&#xff0c;它就是比…

RK3588 NPU 研究(二)

RK提供了两个模型&#xff0c;mobilenet和YOLO5。 mobilenet模型相对小&#xff0c;使用起来不是很明显yolo5模型大一些&#xff0c;可以对88种目标进行检测&#xff0c;提供检测的结果包括类别、包围框坐标、可信度等信息。基于rknn_yolov5_demo进行分析。 rknn_yolov5_demo基…

Vue3全家桶和小兔鲜儿案例

查看node.js版本&#xff0c;需要是16.0以上版本 node -v创建一个vue应用 npm init vuelatest在windows窗口中进入vs code命令 code ./创建项目后vs code打开安装依赖 npm install安装好以后运行程序 打开页面 deep有性能损耗&#xff0c;尽量不开启deep 生命周期函数指…

记录Linux系统中vim同时开多个窗口编辑文件

在使用Linux进行文本编辑的时候&#xff0c;通常使用vim编辑器编辑文件&#xff0c;当然啦&#xff0c;vim也可以创建文件&#xff0c;如果只是一个一个创建&#xff0c;只需要vim创建即可&#xff0c;但是如何一次性打开多个窗口编辑呢&#xff1f; 目录 1、目标&#xff1a;…