Redis全局命令与数据结构

news2024/11/17 7:22:45

"那篝火在银河尽头~" 


Redis-cli命令启动

        现如今,我们已经启动了Redis服务,下⾯将介绍如何使⽤redis-cli连接、操作Redis服务。客户端与服务端交互的方式有两种:

● 第⼀种是交互式⽅式: 后续所有的操作都是通过交互式的⽅式实现,不需要再执⾏redis-cli了。

redis-cli-h{host}-p{port}

        进入redis后,我们可以敲下使用redis的一个命令:

 

● 第⼆种是命令⽅式: 就可以直接得到命令的返回结果.

reids-cli -h {host} -p {port} {command}

        这里有两点需要注意由于我们连接的Redis服务位于127.0.0.1,端⼝也使⽤的是默认的6379端⼝。所以很多时候,所以可以省略-h{host}-p{port}。       


Redis全局命令:

如何理解全局命令?        

(1) set与get

        redis中最核心的两个命令就是: "set" 和 "get".set是用来把 "key" 和 "value"存储进去,而"get"是用来通过 "key" 获取 ”value".

set命令使用:

        set后面可以携带很多参数,但是开始学习阶段,我们就采取它最简单的用法。

        对于上述的key value,如果你要表示字符串可以不用加 "",即便加上redis也不会报错。 

get命令使用:

        你说你现在设置了两个key就设置了嘛?你总得给我看看你设置的key是什么吧!

  

nil vs null:

        null和nil都可以表示没有或者在价值上为0的概念,其中我们使用 "null"大多数用在数学、编程、商业等等,另一方面,在体育竞技或游戏方面使用 "nil"。

(2) Keys 

参数效果
?匹配任意一个字符
*        匹配0个或多个任意字符
[abcde]只能匹配到这个选型的任意一个
[^e]匹配字符但 不包括e
[a-b]匹配a~b这个范围,范围都是闭区间

          设置部分keys。

keys *:

        keys命令的时间复杂度是O(n),这很好理解,就是遍历redis服务器是上存储的所有key。"keys *"其效果就是遍历访问 redis上的所有设置过的key!在生产环境中,一般会禁止使用"keys *"命令, 因为执行 " keys *"命令所花费的时间非常长,而Redis是一个单线程进程,此时就会导致redis服务器被阻塞住了,无法给其他客户端提供服务! 

     

 

(3) EXISTS

        redis中支持很多数据结构,指的是value可以是一些复杂的数据结构。相对于redis自身的键值对,是通过哈希表的方式来组织的。

  

为什么redis很多命令可以进行多参数传递?        

        这两次写法有什么区别?

        

        我们需要了解,redis是一个网络服务,它的服务端和客户端的交流方式一定是以这样的形式:

        如果输入多条命令,也就是需要多次网络传输网络通信,相反,如果将这些命令打包成一条命令,那么仅仅需要进行一次网络传输即可!大大减少了网络IO次数,提高数据处理的能力! 

        

(4) DEL

         

(5) (P)EXPIRE\(P)TTL

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

        这里我们可以联想我们手机收到的验证码,什么几分钟内有效。

返回值:剩余过期时间。-1表⽰没有关联过期时间,-2表⽰key不存在。

        对计算机而言,秒实在是很慢,所以你也会看到p开头的诸如 “pexpire\pttl”它们的时间是以毫秒为单位。 

 

(6) type                

        当然这些数据结构,会在后面的篇幅中讲解。我们现在只需要观察结果,不用在意敲击的命令是什么意思。

        我们通过type可以很快地知道,每个redis中存在的key存储的value是什么类型。 


 

Redis中的过期策略

        我们可以使用Expire命令设置key的到期时间。可是一个redis中一定不止一个key设置了过期时间,这些key一定需要什么管理其来,到一定的时间对这些key进行释放。redis咋可能知道哪些key已经过期需要被删除呢,哪些可以还没有过期呢?

        可是Redis是一个单线程进程,如果是遍历所有的key,这样显然是行不通的,效率太低了,那么redis采取的过期策略是什么呢?

        虽然上述两种策略相结合,但是仍然会残存很多的过期Key,没有得到及时的删除。因此,redis还提供了一系列内存淘汰的策略,解决这个问题。 

        有兴趣可以看看这篇讲解redis的内存淘汰策略的文章:

https://baijiahao.baidu.com/s?id=1729630215002937706&wfr=spider&for=pc

        redis并没有选择使用定时器的方式来实现对key的过期删除,如果存在多个key需要被过期删除,那么一个定时器可以高效、节省cpu资源的前提下,完成对过期key的清理。                

        所以,借着这个机会,我们来看看定时器思想的两种实现方法。

定时器思想:

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

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

        再次注意,redis中并没有采取这两种方案的任何一种来解决过期key的清理,但这两种方案都是高效的定时器实现方式,还是有一定的了解必要。       


小结:

        当前我们已经学了 redis几个基本的全局命令: get\set是redis的核心命令
① keys: 用来匹配规则pattern的所有key.

② exists: 用来判定指定的key是否存在.

③ (p)expire: 给key设置过期时间.  ---> redis的过期策略

④ (p)ttl: 查询key的过期时间.

⑤ type: 查询key对应的value类型.

⑥ del: 删除指定的key


感谢你的阅读

祝你好运,向阳而生~

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

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

相关文章

分享一个vue-slott

需求再现 <el-table-column align"center" label"状态" prop"mitStatus" show-overflow-tooltip />在这里&#xff0c;我想对于状态进行一个三目判断&#xff0c;如果为0那就是进行中&#xff0c;否则就是已完成&#xff0c;期初我是这样写…

抖店适合全职还是兼职?兼职去做收入怎么样?找副业的建议看完

我是王路飞。 普通人如今做抖音&#xff0c;相比较拍短视频、直播带货&#xff0c;在抖音开店正在成为多数人的第一选择。 就是因为抖店的门槛比较低&#xff0c;也没有粉丝数的要求&#xff0c;所以比较适合普通人去做。 可能在大多数新手的认知里&#xff0c;抖店只适合那…

HoudiniVex笔记_P26_RecursionBasics递归基础

原视频&#xff1a;https://www.youtube.com/playlist?listPLzRzqTjuGIDhiXsP0hN3qBxAZ6lkVfGDI Bili&#xff1a;Houdini最强VEX算法教程 - VEX for Algorithmic Design_哔哩哔哩_bilibili Houdini版本&#xff1a;19.5 1、概述 递归是一种直接或者间接地调用自身的算法&a…

HTML总结2 [转]

以下转载和参考自&#xff1a;HTML 表单。 1、表格 可以通过 CSS 设置表格的样式&#xff1a; 如下为将上面table.lamp th,td样式中的padding注释掉&#xff0c;开启table.lamp中的padding的效果&#xff1a; 2、列表 3、表单 表单用于收集用户的输入&#xff0c;如下图所…

【⑬MySQL | 数据类型(一)】简介 | 整数 | 浮点 | 定点 | 时间/日期类型

前言 ✨欢迎来到小K的MySQL专栏&#xff0c;本节将为大家带来MySQL数据类型简介 | 整数 | 浮点 | 定点 | 时间/日期类型的分享✨ 目录 前言0.数据类型简介1 整数类型2 浮点类型3 定点类型4 日期/时间类型总结 0.数据类型简介 数据类型&#xff08;data_type&#xff09;是指系…

《C和指针》笔记11: external和internal链接属性

当组成一个程序的各个源文件分别被编译之后&#xff0c;所有的目标文件以及那些从一个或多个函数库中引用的函数链接在一起&#xff0c;形成可执行程序。然而&#xff0c;如果相同的标识符出现在几个不同的源文件中时&#xff0c;它们是像Pascal那样表示同一个实体&#xff1f;…

专业设计必备:Zeplin for Mac免费下载,打造独具特色的作品

Zeplin是一款高效制图软件&#xff0c;可以帮助用户更好的设计及制作图片&#xff0c;为用户提供了标注、Style Guide、备注文档与简单的团队协作功能&#xff0c;还可以自动生成尺码标注、CSS 样式代码、导出图片等。 功能介绍 量身定制的资源&#xff0c;在一个位置 Zepli…

Rabbitmq的Shovel

Federation 具备的数据转发功能类似&#xff0c; Shovel 够可靠、持续地从一个 Broker 中的队列 ( 作为源端&#xff0c;即source)拉取数据并转发至另一个 Broker 中的交换器 ( 作为目的端&#xff0c;即 destination) 。作为源端的队列和作为目的端的交换器可以同时位于…

Python通过matplotlib动态绘图实现中美GDP历年对比趋势动图

随着中国的各种实力的提高&#xff0c;经常在各种媒体上看到中国与各个国家历年的各种指标数据的对比&#xff0c;为了更清楚的展示历年的发展趋势&#xff0c;有的还做成了动图&#xff0c;看到中国各种指标数据的近年的不断逆袭&#xff0c;心中的自豪感油然而生。今天通过Py…

2023.8.27 碎碎念

碎碎念系列更新 离上次更新快一个月了 随便写写 一、关于工作 公司项目应用端开发&#xff08;了解了shell&#xff0c;awk等&#xff09;公司自研APP维护 后续计划写一篇shell相关的博客 二、关于学习 最近把算法也捡起来了&#xff0c;虽然还是很菜&#xff0c;今天周赛…

回归预测 | MATLAB实现GWO-ELM灰狼算法优化极限学习机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现GWO-ELM灰狼算法优化极限学习机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现GWO-ELM灰狼算法优化极限学习机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍程…

单片机电子元器件-数码管

数码管分类 共阳 把所有数码管的阳极接到一起形成公共阳极COM 数码管 共阳极COM 接到 5V 电源 共阴 把所有数码管的阴极接到一起形成公共阴极COM 数码管 共阴极COM 接到 地 GND 上 八段 数码管 和 七段数码管&#xff0c; 多了一个 小数点 DP 数码管显示原理 一个数码管如…

YOLO目标检测——肺炎分类数据集下载分享

肺炎分类数据集总共21000图片&#xff0c;可应用于&#xff1a;肺炎检测、疾病诊断、疾病预测和预警等等。 数据集点击下载&#xff1a;YOLO肺炎分类数据集21000图片.rar

Fooocus启动时modules报错的解决方法

原理&#xff1a;是由于其他程序的安装导致modules的版本不对&#xff0c;先卸载现有版本&#xff0c;再运行run.bat让其自动安装响应的modules版本。 1、cmd运行windows dos终端。 2、将Fooocus_win64_1-1-1035文件夹备份&#xff0c;rename为Fooocus_win64_1-1-1035backup文…

轻松上传、管理和分享图片——PicGo for Mac,你的最佳选择

作为一名经常使用图片的用户&#xff0c;你一定经历过图片上传、管理和分享的烦恼。PicGo for Mac是一款专为Mac用户设计的图片上传工具&#xff0c;它能够帮助你轻松完成这些任务。 首先&#xff0c;PicGo for Mac提供了一种简单而高效的方式来上传图片。你只需将图片拖放到Pi…

《网络是怎样连接的》(五)

本文主要取材于 《网络是怎样连接的》 第五章。 目录 5.1 Web服务器的部署地点 5.2 防火墙的结构和原理 5.3服务器负载平衡 5.4 使用缓存服务器分担负载 5.5 内容分发服务 简述&#xff1a;本文主要内容是解释 网络包如何朝服务器前进&#xff0c;并通过服务器前面的防…

VM——西门子Smart 200进行S7通信

1、参考文章《海康VisionMaster与西门子Smart 200进行S7通信_机器人自动化控制的博客-CSDN博客》 2、注意事项&#xff1a; &#xff08;1&#xff09;PLC设置的变量类型是VW&#xff0c;而不是MW。 &#xff08;2&#xff09;与S7一样&#xff0c;默认端口号是102&#xff…

深入剖析Kubernetes之控制器模式的实现-Deployment

文章目录 Deployment Deployment Deployment 实现了 Kubernetes 项目中一个非常重要的功能&#xff1a;Pod 的“水平扩展 / 收缩”&#xff08;horizontal scaling out/in&#xff09;。这个功能&#xff0c;是从 PaaS 时代开始&#xff0c;一个平台级项目就必须具备的编排能力…

在Windows操作系统上安装Neo4j数据库

在Windows操作系统上安装Neo4j数据库 一、在Windows操作系统上安装Neo4j数据库 一、在Windows操作系统上安装Neo4j数据库 点击 MySQL可跳转至MySQL的官方下载地址。 在VUE3项目的工程目录中&#xff0c;通过以下命令可生成node_modules文件夹。 npm install&#xff08;1&am…

用U盘装Ubuntu22.04双系统前需要提前规避的两大问题

如果你是GPT分区&#xff0c;且Bios开启了UEFI&#xff08;无论你选的是启动模式是LegacyUEFI还是UEFI&#xff0c;都算开启了UEFI&#xff09;那你装Ubuntu时可以忽略本文&#xff0c;只看最末尾的装机教程 以下2个问题叠加&#xff0c;就会出现引导丢失的问题&#xff08;版…