Redis全局命令

"那篝火在银河尽头~" 


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.mzph.cn/news/62850.shtml

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

相关文章

Java设计模式:一、六大设计原则-06:依赖倒置原则

文章目录 一、定义:依赖倒置原则二、模拟场景:依赖倒置原则三、违背方案:依赖倒置原则3.1 工程结构3.2 抽奖系统**3.2.1 定义抽奖用户类**3.2.2 抽奖控制 3.3 单元测试 四、改善代码:依赖倒置原则4.1 工程结构4.2 抽奖控制改善4.2…

vnc与windows之间的复制粘贴

【原创】VNC怎么和宿主机共享粘贴板 假设目标主机是linux,终端主机是windows(就是在windows上使用VNC登陆linux) 在linux中执行 vncconfig -nowin& 在linux选中文字后,无需其他按键,直接在windows中可以黏贴。 …

操作系统备考学习 day1 (1.1.1-1.3.1)

操作系统备考学习 day1 计算机系统概述操作系统的基本概念操作系统的概念、功能和目标操作系统的四个特征并发共享虚拟异步 操作系统的发展和分类操作系统的运行环境操作系统的运行机制 年初做了一个c的webserver 的项目,在学习过程中已经解除部分操作系统的知识&am…

K-Means(K-均值)聚类算法理论和实战

目录 K-Means 算法 K-Means 术语 K 值如何确定 K-Means 场景 美国总统大选摇争取摆选民 电商平台用户分层 给亚洲球队做聚类 ​编辑 其他场景 K-Means 工作流程 K-Means 开发流程 K-Means的底层代码实现 K-Means 的评价标准 K-Means 算法 对于 n 个样本点来说&am…

Golang Gorm 一对多的添加

一对多的添加有两种情况: 一种是添加用户的时候同时创建文章其次是创建文章关联已经存在的用户 添加用户的时候同时创建文章 package mainimport ("gorm.io/driver/mysql""gorm.io/gorm" )// User 用户表 一个用户拥有多篇文章 type User stru…

探索未来金融科技 SCF新加坡举办启动盛会

金融科技的热潮涌向新加坡,令人瞩目的SCF金融公链启动会于8月13日隆重举行。这场盛宴不仅为金融科技领域注入了新的活力,更为广大投资者、合作伙伴以及热衷区块链发展的人士提供了一次宝贵的交流机会。 在SCF金融公链启动会上,William Thomps…

【附安装包】Eplan2022安装教程

软件下载 软件:Eplan版本:2022语言:简体中文大小:1.52G安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.5GHz 内存4G(或更高)下载通道①百度网盘丨64位下载链接:https://pan.baidu.co…

Linux下的系统编程——进程(七)

前言: 程序是指储存在外部存储(如硬盘)的一个可执行文件, 而进程是指处于执行期间的程序, 进程包括 代码段(text section) 和 数据段(data section), 除了代码段和数据段外, 进程一般还包含打开的文件, 要处理的信号和CPU上下文等等.下面让我们开始对Linux进程的学…

Java运行时jar时终端输出的中文日志是乱码

运行Jar时在控制台输出的中文日志全是乱码,这是因为cmd/bash默认的编码是GBK,只要把cmd的编码改成UTF-8即可 两种方式修改:临时修改和注册表永久修改 临时修改 只对当前的cmd页面有效,关闭后重新打开都会恢复成GBK, 打开cmd&am…

【数据结构】十字链表的画法

十字链表的基本概念 有向边又称为弧 假设顶点 v 指向 w,那么 w 称为弧头,v 称为弧尾 顶点节点采用顺序存储 顶点节点 data:存放顶点的信息firstin:指向以该节点为终点(弧头)的弧节点firstout&#xff1…

gRPC之gRPC认证

1、gRPC认证 前面篇章的gRPC都是明文传输的,容易被篡改数据,本章将介绍如何为gRPC添加安全机制。 gRPC默认内置了两种认证方式: SSL/TLS认证方式 基于Token的认证方式 同时,gRPC提供了接口用于扩展自定义认证方式。 1.1 TLS…

Redis 教程 - Redis 基本操作

Redis 教程 - Redis 基本操作 Redis(Remote Dictionary Server)是一个开源的内存数据库,它提供了键值对存储和多种数据结构的支持,被广泛应用于缓存、消息队列、计数器等场景。本教程将介绍 Redis 的基本操作,包括连接…

001_C++语法基础

C++语法基础 所有C++语法要用英文区分大小写每个语句写完以分号结束C++标准输入输出头文件iostream 若想通过C++实现数据的输入和输出,需要导入标准输入输出头文件 #include <iostream>标准输入输出头文件<iostream>中包含了cin输入语句和cout输出语句 标准命名…

想系列服务迁移专有云效实操

想系列服务迁移专有云效实操 1注册应用 查看jenkins脚本是否需要修改代码编译路径 gemdale_jenkins/maven3-service/k8s-image/maven3-service-deploy.sh Jenkins上的打包路径 service_tgt_path s e r v i c e w s / t a r g e t / service_ws/target/ servicew​s/target/ser…

前端三大Css处理器之Less

Less是Css预处理器之一&#xff0c;分别有Sass、Less、Stylus这三个。 Lesshttps://lesscss.org/ Less是用JavaScript编写的&#xff0c;事实上&#xff0c;Less是一个JavaScript库&#xff0c;他通过混合、变量、嵌套和规则设置循环扩展了原生普通Css的功能。Less的少数…

k8s之存储篇---存储类StorageClass

介绍 StorageClass 为管理员提供了描述存储"类"的方法。 不同的类型可能会映射到不同的服务质量等级或备份策略&#xff0c;或是由集群管理员制定的任意策略。 Kubernetes 本身并不清楚各种类代表的什么。这个类的概念在其他存储系统中有时被称为"配置文件&quo…

Unity3D Pico VR 手势识别

视频链接 本文章使用的 Unity3D版本: 2021.3.6 , Pico SDK 230 ,Pico OS v.5.7.1 硬件Pico 4 Pico SDK可以去Pico官网下载SDK 导入SDK 第一步&#xff1a;创建Unity3D项目 第二步&#xff1a;导入 PICO Unity Integration SDK 选择 Windows > Package Manager。 …

vue3路由跳转以及传参。和vue2路由跳转传参的区别

路由的安装和引入以及注册就不过多赘述&#xff0c;直接说区别和怎么跳转页面 vue2路由跳转以及传递参数 vue2只需要创建好router文件夹和index.js&#xff0c;配置好我们的路由&#xff0c;在main.js引入 import router from "/router"; // vue路由app.use(route…

【ES6】—类与继承

一、 定义类 class People {constructor (name, age) {this.name namethis.age age}showName () {console.log(this.name)} } let p1 new People(xiaoxiao, 30) console.log(p1) // People {name: xiaoxiao, age: 30}小节&#xff1a; 使用class关键字声明类使用construc…

linux离线安装rdbtools,需先安装python

离线安装python3 下载python包&#xff0c;下载地址&#xff1a;https://www.python.org/ftp/python/ 我选的是https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tgz 将文件上传至linux服务器&#xff0c;解压 tar -xf Python-3.9.0.tgz cd Python-3.9.0 mkdir /usr/l…