Redis中的基本指令

news2024/11/28 18:52:59

回顾

上一篇文章介绍了redis的一些特性和安装方式,但光说不练假把式~ 本文就来着重来介绍一下redis中的基本指令

Redis基本结构

Redis是一个客户端-服务器结构的程序(MySQL也是),客户端和服务器可以在同一台主机上,也可以不在同一台主机(本人条件有限,后续就演示在同一台主机上)。

Redis的服务器负责存储管理数据,当客户端发起一个请求的时候,服务器获取并解析,做出相应的业务操作。

Redis的客户端则是负责将用户的指令进行处理,然后通过网络通信交给服务器,而客户端的形态大致有三类:

1.命令行客户端(本文先主要讲解这个方式)

在Unbuntu上使用redis-cli即可切换~

2.图形化界面的客户端

3.基于Redis的API自行开发的客户端

补充:

Redis的快主要是相较于MySQL的,这两个都是CS结构的程序,都需要通过网络通信,但Redis操作的是内存中的数据,所以相比于MySQL就会快很多。

如果Redis是跟本机的内存相比的话,则慢很多了,网络开销不可忽略!!!

所以不能无脑使用Redis,一定要根据业务场景来使用!

Redis基本指令

由于Redis的指令非常的多,在这就先介绍一些常用的指令

1.连接Redis服务器

#此处[]中的内容可以省略
redis-cli -h [host] -p [port] [command]

通过这个指令我们就能够连接上了。

2.get和set

由于Redis是按照"键值对"的方式存储数据的,我们需要通过set,存入一个键值对,然后通过get取出。

#Demo01

set key1 value1

#这段代码表示,在内存中存储一个 key 为 "key1" value 为 "value1"

get key1

#这段代码表示从内存中取出 key 为 "key1" 的 value 的值

如果我们取get一个不存在的key,会发什么呢?

会返回nil 和null表示同一个意思~

通过观察我们可以发现,我们的key值都是String类型的,Value也都是String类型的。

key为String类型是Redis固定死的,那么如何进行插入其他类型的Value呢?(下篇再讲~)


全局命令

虽然Redis的Key都是String类型的,但Value可以支持其他类型~而针对这些不同类型的Value,操作的指令也各不相同,而全局命令则是可以适用于任何类型~

3.keys

keys用来查询当前服务器上的所有key,redis还支持一些特殊的符号(通配符)来进行匹配要查询的key。

#语法形式

keys {pattern}

#此处的pattern指定是要查询的key的样子

pattern所支持的通配符:

1.*  此处的*可以用来任意匹配0或多个字符

2.? 此处的?可以用来任意匹配1个字符

3.[abc] 此处abc表示必须匹配a或者b或者c

4.[^a] 此处表示除了a其他任意字符都可以匹配

5.[a-c] 此处表示匹配a到c之间的字符,区间为左闭右闭

举例:

#在这插入了 "hello","hallo","hbllo","heeeeeeeeello","key1" 这些key

127.0.0.1:6379> keys h?llo
1) "hbllo"
2) "hello"
3) "hallo"

127.0.0.1:6379> keys h?llo
1) "hbllo"
2) "hello"
3) "hallo"

127.0.0.1:6379> keys h[ab]llo
1) "hbllo"
2) "hallo"

127.0.0.1:6379> keys h[^ab]llo
1) "hello"

127.0.0.1:6379> keys h[a-c]llo
1) "hbllo"
2) "hallo"

注意:

keys 命令的时间复杂度为O(n).一般在生产环境(线上环境)会禁止使用 keys 命令,因为生产环境中的数据非常多,执行keys的时间就会很长,而redis服务器又是一个单线程的服务器(Redis 5之前是单线程,此处的单线程指的是Redis去内存处理指令),因此服务器就会进行阻塞,无法给其他的客户端服务,如果是使用Redis对数据库进行缓存的话,此时Redis被阻塞了,这些查询请求超时就会去访问数据库,而数据库又比较脆弱,一旦请求量大了,就挂了,整个系统也就寄了~

4.exists

exists用来判断key是否存在,返回的是key的存在的个数。

#基本语法

exsits key1 key2 ......

#判断 key1 是否存在, 判断 key2 是否存在 ...... 
#最后返回一个存在的个数

exists指令的时间复杂度为O(1),毕竟只需要进行查询嘛~

思考:

为什么要支持一次查询多个key是否存在,为什么不分两次进行查询呢?

理论上分开查询是可以用来判断是否存在,但是每一次查询都是一次网络通信,相较于内存来说开销比较大,毕竟每一次网络通信都需要将数据进行封装,从网卡传输出去,然后再进行分用,取出数据(类似快递的寄和拆)。

5.del

删除key,可以一次删除一个也可以删除多个,时间复杂度为O(1),返回值为删掉key的个数。

#基本语法

del key1 key2 .......

注意:

一般Redis是用作缓存的,而缓存中主要存放的是热点数据,一旦删除了,请求就会去访问数据库,如果请求量多了,数据库就有可能挂掉;如果是用Redis来当数据库,则更不能直接删除了。

因此del命令使用的时候还是需要慎重考虑的

6.expire

expire 是用来给指定的key设置过期时间,设置的单位是秒,一旦key存活的时间超过,就会进行删除,此处设定时间必须是针对已经存在了的key,如果设置成功则返回1,设置失败返回0.

#基本语法

expire key second

过期策略的实现:

Redis中可能会存在很多的Key,其中这些Key可能很大一部有一个过期时间,Redis对这些过期的Key进行删除呢?如果使用直接去遍历Key的话会非常耗时,效率比较低~

1.惰性策略

如果这个Key已经到了超时时间,但暂时还没有删除(没有被定期选中),这个Key还在,当下一次去访问这个Key的时候,发现已经过期了,Redis就触发删除操作,同时返回空值.

2.定期策略

Redis会定期选取一些Key,然后检查是否过期,但是整个过程对于时间的要求比较高,即不能耗时太多,否则就会造成阻塞。

以上是Redis采用的一些策略,显然是不够用的,后续还会继续补充。


定时器策略(没用采用)

如果使用定时器的方式来实现的话,就需要引入多线程了,但作者可能在最初设计的时候就定下了基调,就准备只采用单线程的方式。

1)基于优先级队列实现的定时器

当一个Key被设置了过期时间,就会被添加到定时器中,而此处的定时器是基于优先级队列来实现的,本质上是一个小根堆,根节点的如果没有超时,那么其他的也节点也不会超时。所以只需要去关注根节点,即使用一个扫描线程去关注根节点是否过期,而这个线程也不需要一直去询问是否过期可以设置一个等待时间,这样就可以大大剩下CPU的空闲时间了。当后续新设置了一个Key过期时间,需要唤醒一下,重新检查根节点,然后再调整等待即可。

2)基于时间轮实现的定时器

将时间分为多片,进行制定轮询的方向以及编号。后续有个过期时间进行计算,存储到对应的时间片上,这个一片上存储了多个任务节点。时间轮没一次轮询就会去检查当前时间片上的任务节点是否已经过期然后删除。

7.ttl

ttl类似网络原理中的IP协议中的字段TTL(表示转发的次数),用来表示key的过期时间还剩余多少秒.

#基本语法

ttl key

8.type

type是用来返回Key对应的Value的类型

#基本语法

type key

最后

下一篇会对Redis的数据类型进行讲解,并对不同类型的指令进行补充。

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

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

相关文章

OpenCV杂记(1):绘制OSD(cv::getTextSize, cv::putText)

1. 简述 我们使用OpenCV时,有时会在图像的某个位置绘制OSD信息,如绘制一些字符串作为指示信息。 本文将简要介绍在图像(cv::Mat)上绘制固定的字符串信息。 2. 使用的API (1)cv::getTextSize() CV_EXPORT…

Qt 6子窗口全屏显示

一、全屏显示效果 二、全屏相关函数 1,全屏显示函数 QWidget::showFullScreen(); // 此方法只对顶级窗口有效,对子窗口无效 2,恢复显示函数 QWidget::showNormal(); // 此方法也只对顶级窗口有效,对子窗口无效 3,最小化显示函…

陇剑杯 省赛 攻击者1 CTF wireshark 流量分析

陇剑杯 省赛 攻击者1 题目 链接:https://pan.baidu.com/s/1KSSXOVNPC5hu_Mf60uKM2A?pwdhaek 提取码:haek ├───LogAnalize │ ├───linux简单日志分析 │ │ linux-log_2.zip │ │ │ ├───misc日志分析 │ │ acce…

【数学】主成分分析(PCA)的应用案例解析(Python)

接着上文PCA的数学详细推导过程,本文介绍使用Python结合图像压缩案例解释PCA的具体实现流程,以了解数据处理的一些方法 Jupyter Notebook file 文章目录 借助 scikit-learn 实现 PCA输入数据PCA降维并重建 手动实现 PCA 过程输入数据数据居中处理协方差矩…

PPTist在线编辑、播放幻灯片

PPTist简介 “一个基于 Vue3.x TypeScript 的在线演示文稿(幻灯片)应用,还原了大部分 Office PowerPoint 常用功能,支持 文字、图片、形状、线条、图表、表格、视频、音频、公式 几种最常用的元素类型,每一种元素都拥…

多模态大语言模型综述

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学,针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…

arcgis中坡向计算工作原理说明

用于识别出从每个像元到其相邻像元方向上值的变化率最大的下坡方向。坡向可以被视为坡度方向。输出栅格中各像元的值可指示出各像元位置处表面的朝向的罗盘方向。将按照顺时针方向进行测量,角度范围介于 0(正北)到 360(仍是正北&a…

Stable Diffusion 模型分享:CyberRealistic XL(真实)cyberrealisticXL_v11VAE.safetensors

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 这是 CyberRealistic 的 SDXL 版本。 该模型的标准…

朗思-我的家园正式上线:朗思科技Agent工具软件--人人拥有“Ai-机器人”

4月16日,朗思科技正式发布"朗思-我的家园"。朗思科技是国内领先的Ai Agent智能自动化工具软件产品及方案的提供商,始终坚持自主研发,全面支持国产信创,不断加快产品创新迭代。基于技术领先性和战略前瞻性,其…

DDoS攻击愈演愈烈,谈如何做好DDoS防御

DDoS攻击是目前最常见的网络攻击方式之一,各种规模的企业包括组织机构都在受其影响。对于未受保护的企业来讲,每次DDoS攻击的平均成本为20万美元。可见,我们显然需要开展更多的DDoS防御工作。除考虑如何规避已发生的攻击外,更重要…

Ubuntu 20.04 LTS 在3588安卓主板上测试yolov8-1.0版本的yolov8n-seg模型

0. 创建虚拟环境 #!< 创建虚拟环境yolov8 $ sudo pip install virtualenv $ sudo pip install virtualenvwrapper $ mkvirtualenv yolov8 -p /usr/bin/python3.81. 将yolov8n-seg.pt转换为yolov8n-seg.onnx文件 #!< 创建项目目录yolov8-rknn并下载yolov8n-seg.pt模型文…

【网络安全 | 密码学】JWT基础知识及攻击方式详析

前言 JWT&#xff08;Json Web Token&#xff09;是一种用于在网络应用之间安全地传输信息的开放标准。它通过将用户信息以JSON格式加密并封装在一个token中&#xff0c;然后将该token发送给服务端进行验证&#xff0c;从而实现身份验证和授权。 流程 JWT的加密和解密过程如…

【C++类和对象】拷贝构造与赋值运算符重载

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

通过excel获取网站的数据信息

通过excel获取网站的数据信息&#xff0c;有时候网站数据的表格很多数据&#xff0c;需要梳理到表格中&#xff0c;如何用excel表格直接读取网站数据 备注问题&#xff1a;表格内容有时候在一行&#xff0c;很长&#xff0c;不方便处理 bug问题&#xff1a;不要多选&#xff0…

鸢尾花数据集分类(决策树,朴素贝叶斯,人工神经网络)

目录 一、决策树 二、朴素贝叶斯 三、人工神经网络 四、利用三种方法进行鸢尾花数据集分类 一、决策树 决策树是一种常用的机器学习算法&#xff0c;用于分类和回归任务。它是一种树形结构&#xff0c;其中每个内部节点表示一个特征或属性&#xff0c;每个分支代表这个特征…

元宇宙-虚拟世界的安全风险如何应对

元宇宙&#xff08;Metaverse&#xff09;是一个虚拟时空间的集合&#xff0c;由一系列的增强现实&#xff08;AR&#xff09;、虚拟现实&#xff08;VR&#xff09;和互联网&#xff08;Internet&#xff09;所组成。这个虚拟时空间是一个持续存在的、由众多虚拟世界互相连接而…

深度Q-Learning在算法交易中的应用

一、说明 在《华尔街的随机漫步》一书中&#xff0c;作者伯顿马尔基尔&#xff08;Burton G. Malkiel&#xff09;声称&#xff1a;“一只蒙着眼睛的猴子向报纸的财经版面投掷飞镖&#xff0c;可以选择一个与专家精心挑选的投资组合一样好的投资组合。 如果我们让巴甫洛夫的狗接…

Vue3从入门到实战:深度掌握组件通信(上部曲)

props的概念&#xff1a; 当你使用Vue 3的组合式API时&#xff0c;props就是一种让你可以从父组件向子组件传递数据的方式。你可以想象成你在给子组件写一封信&#xff0c;把需要传递的信息放在信封里。 在Vue 3中&#xff0c;你可以在子组件的代码中定义props&#xff0c;就…

javaWeb项目-校园交友网站功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、Java语言 Java语…

HTML部分常用标签补充

table&#xff08;布局方面不建议使用&#xff0c;而是使用CSS来完成&#xff09;: 标签解释&#xff1a; ~table标签顾名思义&#xff0c;是表格的意思 ~table其中可以使用boder属性来显示表格的线&#xff0c;最好使用CSS来配合HTML的使用 ~table内的内容可以使用colspan来定…