浅谈Redis和一些指令

news2024/12/23 18:48:17

浅浅谈一谈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.coloradmin.cn/o/1574546.html

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

相关文章

随机森林、AdaBoost 和 XGBoost 三者之间的主要区别

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 集成学习是一种强大的机器学习范式,它通过构建并结合多个学习器来提高预测性能。其中,随机森林、AdaBoost 和 XGBoost 是集成学习领域中著名且广泛应用的方法。尽管这些方法共享…

C++ | Leetcode C++题解之第12题整数转罗马数字

题目: 题解: const string thousands[] {"", "M", "MM", "MMM"}; const string hundreds[] {"", "C", "CC", "CCC", "CD", "D", "DC&qu…

绕过断言的LFI-Assertion101

总结 getwebshell : 发现疑似LFI的地方 → 测试..过滤 → 尝试断言绕过 → 远程加载反弹shell → getwebshell 提 权 思 路 : suid文件发现 → aria2c远程下载ssh私钥覆盖/root/.ssh → ssh公钥登录提权 准备工作 启动VPN 获取攻击机IP → 192.168.45.218 启动靶机 获取目标…

邮件服务器:Postfix

文章目录 邮件服务器的功能与工作原理电子邮件的问题Mail server与DNS 之间的关系邮件传输所需要的组件(MTA、MUA、MDA)以及相关协议用户收信时服务器端所提供的相关协议:MRA电子邮件的数据内容 使用Postfix与Dovecot部署邮件系统部署基础的电子邮件系统配置Postfix…

山海鲸智慧农业可视化:开启农业现代化高效管理新时代

随着科技的不断进步,农业现代化已成为当今社会发展的重要趋势。在这一背景下,山海鲸智慧农业可视化解决方案应运而生,为农业生产带来了革命性的变革。它通过创新的可视化技术,将农业生产过程中的各个环节进行高效整合,…

OSPF协议详解

静态缺点 1、中大型复杂网络----配置量大 2、不能实时收敛 动态-----可以实时收敛 IGP----内部网关路由协议 RIP OSPF EIGRP ISIS EGP----外部网关路由协议 BGP IGP (选路佳 占用资源 收敛快)----一个协议好需满足这三个 距离矢量 DV RIP…

Pandas分箱/离散化cut与qcut的区别

cut与qcut区别 1、pd.cut()2、pd.qcut()3、cut与qcut区别 Pandas提供了智能剪贴功能:pd.cut()与pd.qcut(),它们通常用于更方便直观地处理关系型或标签型数据,将数据进行分箱/离散化 1、pd.cut() 我们可以通过两种方式使用cut()函数&#xff…

C++的并发世界(七)——互斥锁

0.死锁的由来 假设有两个线程T1和T2,它们需要对两个互斥量mtx1和mtx2进行访问。而且需要按照以下顺序获取互斥量的所有权: -T1先获取mte1的所有权,再获取mt2的所有权。 -T2先获取 mtx2的所有权。再铁取 mtx1的所有权。 如果两个线程同时执行&#xff0c…

Android Studio学习4——gradle文件

视频讲解 https://developer.android.google.cn/studio/releases/gradle-plugin.htmIl#updating-gradle

二分查找与搜索树高频问题-算法通关村

二分查找与搜索树高频问题-算法通关村 1 基于二分查找的拓展问题 1.1 山脉数组的封顶索引 LeetCode852:这个题的要求有点啰嗦,核心意思就是在数组中的某位位置i开始,从0到 i 是递增的,从i1到数组最后是递减的,让你找到…

JavaEE 初阶篇-深入了解线程池(线程池创建、线程池如何处理任务)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 线程池概述 1.1 线程池的优点 1.2 不使用线程池的问题 1.3 线程池的工作原理图 1.4 如何创建线程池? 2.0 通过 ThreadPoolExecutor 类自定义创建线程…

数据结构与算法笔记:递归函数设计技巧

ACM金牌带你零基础直达C语言精通-课程资料 本笔记属于船说系列课程之一,课程链接: 哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep66799?csourceprivate_space_class_null&spm_id_from333.999.0.0 你也可以选择购买『船说系列课程-年度…

Tensorflow2.0笔记 - 自定义Layer和Model实现CIFAR10数据集的训练

本笔记记录使用自定义Layer和Model来做CIFAR10数据集的训练。 CIFAR10数据集下载: https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz 自定义的Layer和Model实现较为简单,参数量较少,并且没有卷积层和dropout等,最终准确率…

穿越代码之海:探寻结构体深层逻辑,展望未来应用新天地

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看,已成习惯 创作不易,多多支持! 结构体作为一种数据结构,其定义和特点决定了它在各种应用中的广泛适用性。随着科技的进步和新兴行业的不断涌现&#xf…

测试自动化流程设计思路

a) 背景介绍 基于当前互联网敏捷开发的现状,手工人力测试已不足以满足当前快速的版本迭代;以下将介绍一种可实现的自动化设计与使用。 b) 当前版本迭代流程 研发同学从代码库master分支拉出新代码进行研发工作得开发开发完成之后提交到代码库测试同学介入…

从概念到实践:探索独立站在当代电商中的关键作用

随着数字化时代的到来,电子商务已成为全球商业生态的核心组成部分。在这个不断变化的市场中,独立站作为企业建立在线身份和拓展业务的强大工具,正逐步展现出其不可替代的价值。 从概念到实践,本文将深入探索独立站在当代电商中的关…

C++从入门到精通——类的作用域及类的实例化

类的作用域及类的实例化 前言一、类的作用域二、类的实例化引例类是对对象进行描述的示例 一个类可以实例化出多个对象示例 示例 前言 类的作用域是指类中定义的变量和方法的可见性和可访问性范围。在类的内部,所有成员(包括属性和方法)都具…

LeetCode-51. N 皇后【数组 回溯】

LeetCode-51. N 皇后【数组 回溯】 题目描述:解题思路一:回溯, 回溯三部曲。验证是否合法只需要检查:1.正上方;2. 左上方;3.右上方。因为是从上到下,从左到右遍历的,下方不可能有皇后。解题思路…

Day60:WEB攻防-XMLXXE安全无回显方案OOB盲注DTD外部实体黑白盒挖掘

目录 XML&XXE-传输-原理&探针&利用&玩法 XXE 黑盒发现 XXE 白盒发现 XXE修复防御方案 有回显 无回显 XML&XXE-黑盒-JSON&黑盒测试&类型修改 XML&XXE-白盒-CMS&PHPSHE&无回显 知识点: 1、XXE&XML-原理-用途&…

Unity与CocosCreator对比学习二

一、锚点与适配 1.在Creator中 适配通过锚点、位置和Widget达到适配目的;锚点是节点在其父节点坐标系中坐标对其点,其x,y范围在[0, 1]之间; 锚点为(0, 0)时在节点自身的左下角,节点坐标指其左下角在父节点中的坐标;锚…