【Redis】Redis常用命令-getsetkeysexistsexpirettltype

文章目录

  • 读取文档注意事项
  • set命令
  • get命令
  • 全局/通用命令
    • KEYS
    • EXISTS
    • DEL
    • EXPIRE
    • TTL
    • TYPE

读取文档注意事项

官方文档链接:https://redis.io/

注意:redis的命令不区分大小写

在redis文档给出的语法格式说明:

[]:相当于一个独立的单元,表示可选项,可有可无,[][]之间可以同时存在

|:或者的意思,多个只能出现一个

关于O(N)

N可以表示的含义:

  • 1.redis当中key的个数
  • 2.当前命令当中写的key的个数 =>此时可以看作是O(1)
  • 3.当前key对应的value里面的元素个数

关于有序

1.指的是 升序 / 降序

2.指的是顺序很关键,如果把元素位置颠倒,顺序调换,那么得到的内容会出错

修改配置文件

配置文件的路径为:/etc/redis/redis.conf,如果修改配置文件需要重新启动服务器才能生效

set命令

功能:存储K-V ,set可以填写两个参数(key-value),参数类型必须是字符串

  • 对于上述key-value,不需要加""就是表示字符串的类型,给他们加上双引号或单引号都可以

get命令

功能:根据Key获取Value。get 后跟key,就可以得到value,并且是带双引号,是字符串类型的。

  • 如果不存在key,就会返回nil,和null一个意思

image-20231020203333900


全局/通用命令

redis支持很多数据结构,整体上来说是键值对结构,k固定是字符串,v可以有多种类型,最常见的类型为:字符串,哈希表,列表,集合,有序集合。

操作不同的数据结构,都会有不同的命令,但是还有一些命令,在这些数据结构上都能使用,称作全局命令


KEYS

功能:用来查询当前服务器上匹配的key,可以通过一些特殊符号(通配符)来筛选key

命令语法: :KEYS pattern(样式、模式,描述字符串的模样)

1.*:匹配任意字符序列(0个或者多个任意字符)

  • KEYS * 匹配所有的键,展示当前服务器上所有的key
  • KEYS prefix* 匹配以 “prefix” 开头的键,如 “prefix123”、“prefixabc”。
  • KEYS *suffix 匹配以 “suffix” 结尾的键,如 “abcsuffix”、“defsuffix”

image-20231020204548359

2.?:匹配单个字符

  • KEYS key? 匹配以 “key” 开头,并且后面跟着一个字符的键,如 “key1”、“keyA”。

image-20231020204616760

3.[字符 abc]:匹配在括号内的任一字符

  • KEYS key[123] 匹配以 “key” 开头,并且后面跟着 “1"或"2” 或 “3” 的键,如 “key1”、“key2”、“key3”。

image-20231020204637027

4.[范围 a-b]:匹配在范围内的任一字符

  • KEYS key[1-5] 匹配以 “key” 开头,并且后面跟着数字1~5任意一个数字的键,如 “key1”、“key2”、“key3”。
  • KEYS k[a-b]ey 匹配以 “k” 开头,并且后面跟着字母a-b任意一个字母的键,如 “kaeyd”、“kbey”。

image-20231020204713024

5.[^字符]:匹配不在括号内的任一字符

  • KEYS key[^abc] 匹配以 “key” 开头,并且后面跟着的不是 “a"或"b” 或 “c” 的字符的键

image-20231020204731538

注意:keys 的时间复杂度是 O ( N ) O(N) O(N),因为需要遍历所有的key,然后匹配出符合要求的键,所以在生产环境当中一般禁止使用keys,尤其是keys *,它是匹配redis中的所有键,由于生产环境中key非常多,redis是一个单线程的服务器,就会导致执行keys *时间非常长,那么redis服务器就被阻塞,无法为其它客户端提供服务,给用户体验造成影响

redis的一个经典用途就是作为数据冷热分离的热点数据缓存,热点数据首先是去查redis的,如果redis被阻塞了,此时其它的查询redis操作就超时了,此时这些请求只能去查数据库了,大量的数据同时请求数据库的查询,可能会导致过载,数据库也无法正常提供服务了,整个系统基本就处于瘫痪状态


EXISTS

功能:用于检查给定键是否存在于数据库中。接受一个或多个键作为参数,并返回存在的键的数量

时间复杂度:$ O(1)$

命令语法: :EXISTS key [key ...]

例如:检测key1和key2是否存在

  • 写法1:写两条redis命令
  • 写法2:写一条redis命令

image-20231020204936431

上述哪种写法更好呢?

因为redis是基于客户端-服务器架构的,通过网络通信的中间件。因此上述分开查询key是否存在和同时检查多个键是否存在是有区别的,分开查询的写法,会产生更多次数的请求响应,也即网络通信。和直接操作内存来说,网络通信成本比较高,效率比较低,而同时检查多个键只需要一次请求响应,减少网络通信

image-20231020205222170

所以redis支持一个命令能操作多个key来减少网络通信


DEL

功能:删除指定的key。和EXISTS命令相同,也可以支持操作多个key,返回删除key的个数

时间复杂度: O ( 1 ) O(1) O(1)

命令语法: DEL key [key......]  

在redis当中删除,和mysql中的删库删表来说危险性比较低,因为redis是作为缓存,如果丢失少量的数据,问题不大,而MySQL不能丢失数据,丢失了数据就可能后续查不到了

但是如果丢失大批的数据,那么客户端来的查询先去redis当中进行查找,找不到就会到MySQL当中进行查找,就可能会导致MySQL过载,导致系统瘫痪。


EXPIRE

功能:用于为键设置过期时间。接受两个参数:键 以秒为单位的过期时间

  • 设置键的过期时间 过期时间到达后,该键将自动被删除

注意:key必须已经存在才能设置,如果设置成功返回1,失败返回0

时间复杂度: O ( 1 ) O(1) O(1)

命令语法: EXPIRE  key  seconds   

image-20231020212530487

补充:基于redis实现的分布式锁,为了避免出现不能正确解锁的情况,加锁时通常会设置一个过期时间,时间到达之后会自动解锁


TTL

功能:检查键的过期时间

返回:要检查的键的剩余过期时间,以秒为单位,

  • 如果键不存在 或者 没有设置过期时间,则返回-1
  • 如果键已经过期,则返回-2

时间复杂度: O ( 1 ) O(1) O(1)

命令语法: TTL key 

image-20231020212437831

注意:EXPIRE和TTL命令都有对应的⽀持毫秒为单位的版本:PEXPIRE和PTTL


TYPE

功能:用于获取指定键的数据类型

可能返回的结果为:none string list hash set zset stream (redis作为消息队列的时候会使用这个类型作为value)

命令语法: TYPE key

使用例子:

返回值为"string",表示键"mykey"的数据类型是字符串(String)。
127.0.0.1:6379> type mykey
string返回值为"list",表示键"mylist"的数据类型是列表(List)。
127.0.0.1:6379> LPUSH mylist "value"
(integer) 1
127.0.0.1:6379> type mylist
list返回值为"set",表示键"myset"的数据类型是集合(Set)。
127.0.0.1:6379> SADD myset "value"
(integer) 1
127.0.0.1:6379> type myset
set返回值为"hash",表示键"myhash"的数据类型是哈希(Hash)。
127.0.0.1:6379> HSET myhash field "value"
(integer) 1
127.0.0.1:6379> type myhash
hash返回值为"zset",表示键"myzset"的数据类型是有序集合(Sorted Set)。
127.0.0.1:6379> ZADD myzset 1 "value"
(integer) 1
127.0.0.1:6379> type myzset
zset返回值为"nil",表示键"nonexistingkey"不存在。
127.0.0.1:6379> TYPE nonexistingkey
none

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

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

相关文章

golang 发起 http 请求,获取访问域名的 ip 地址(net, httptrace)

前言 今天碰到了个需求,我要知道程序对外访问的 http 请求域名的 ip 地址。 直接查看 golang 的 net/http 包,发现 Response 中并没有我想要的 ip 信息。 考虑到在 OSI 七层模型中,ip 是网络层协议,而 http 是应用层协议。去翻…

计算机视觉的监督学习与无监督学习

什么是监督学习? 监督学习是一种机器学习算法,它从一组已标记的 合成数据生成器中生成的训练数据中学习。这意味着数据科学家已经用正确的标签(例如,“猫”或“狗”)标记了训练集中的每个数据点,以便算法可…

设计模式总结

1.将软件与设计模式比拟为城市与建筑模式,那么在面向对象的解决方案里,我们将对象和接口看成墙壁和门窗,模式的核心在于提供了相关问题的解决方案。 在软件设计中可能会遇到很多类似的问题,在每次遇到类似问题时我们不必全都新想…

MYSQL 多表联查详解

目录 一、一个案例引发的多表连接 二、笛卡尔积的错误和与正确的多表查询 2.1、笛卡尔积错误展示 2.2、笛卡尔积解决方法 2.3、练习 三、多表查询分类 3.1、等值连接 vs 非等值连接 3.2、自连接 vs 非自连接 3.3、内连接 vs 外连接 内连接(inner join&…

第2篇 机器学习基础 —(4)k-means聚类算法

前言:Hello大家好,我是小哥谈。聚类算法是一种无监督学习方法,它将数据集中的对象分成若干个组或者簇,使得同一组内的对象相似度较高,不同组之间的对象相似度较低。聚类算法可以用于数据挖掘、图像分割、文本分类等领域…

记录--这个前端Api管理方案会更好?

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 简介 大家好,前端小白一枚,目前接触后台管理系统比较多,经常遇到不同对象的增删改查的接口,如何对Api进行一个有比较好的管理是个问题。在学习偏函数的时…

C#中使用LINQtoSQL管理SQL数据库之添加、修改和删除

目录 一、添加数据 二、修改数据 三、删除数据 四、添加、修改和删除的源码 五、生成效果 1.VS和SSMS原始记录 2.删除ID2和5的记录 3.添加记录ID2、5和8 4.修改ID3和ID4的记录 用LINQtoSQL管理SQL Server数据库时,主要有添加、修改和删除3种操作。 项目中创…

app开发之后需要做什么

在完成app的开发之后,还有一系列的工作需要进行,以确保app的顺利上线和用户的良好体验。下面将从原理和详细介绍两个方面来介绍app开发之后需要做的工作。 一、原理介绍 1. 测试与调试:在app开发完成后,需要进行全面的测试与调试…

[论文笔记]RetroMAE

引言 RetroMAE,中文题目为 通过掩码自编码器预训练面向检索的语言模型。 尽管现在已经在许多重要的自然语言处理任务上进行了预训练,但对于密集检索来说,仍然需要探索有效的预训练策略。 本篇工作,作者提出RetroMAE,一个新的基于掩码自编码器(Masked Auto-Encoder,MAE)…

十种排序算法(1) - 准备测试函数和工具

1.准备工作 我们先写一堆工具&#xff0c;后续要用&#xff0c;不然这些写在代码里可读性巨差 #pragma once #include<stdio.h>//为C语言定义bool类型 typedef int bool; #define false 0 #define true 1//用于交互a和b inline void swap(int* a, int* b) {/*int c *a…

AutoDL 云/本地部署 百川2、GLM2

AutoDL 云上部署 百川2、GLM2 AutoDL 云上部署 百川2、GLM2配置环境体验常见问题huggingface访问不了&#xff0c;使用学术资源加速大文件上传&#xff0c;百度、阿里网盘都可CUDA 空间不足系统盘空间不足省钱绝招软件源 本地部署 百川2、GLM2根据显存大小选模型拉取docker镜像…

MySQL-----事务

事务的概念 事务是一种机制&#xff0c;一个操作序列。包含了一组数据库的操作命令&#xff0c;所有的命令都是一个整体&#xff0c;向系统提交或者撤销的操作&#xff0c;要么都执行&#xff0c;要么都不执行。 是一个不可分割的单位 事务的ACID特点 ACID&#xff0c;是指在可…

【Algorithm】最容易理解的蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)算法

看了不少解读和笔记&#xff0c;本文把最容易理解的解读做个总结。 1. 蒙特卡洛方法 蒙特卡洛方法(Monte Carlo method)&#xff0c;是一种“统计模拟方法”。20世纪40年代&#xff0c;为建造核武器&#xff0c;冯.诺伊曼 等人发明了该算法。因赌城蒙特卡洛而得名&#xff0c…

R语言用jsonlite库写的一个图片爬虫

以下是一个使用R语言和jsonlite库下载图片的程序。首先&#xff0c;我们需要导入jsonlite库和options()函数&#xff0c;然后将代理服务器的主机名和端口号设置为"duoip"和"8000"。接着&#xff0c;我们将URL设置为"https://yun.baidu.com/"&…

LeetCode 143. 重排链表(双指针、快慢指针)

题目&#xff1a; 链接&#xff1a;LeetCode 143. 重排链表 难度&#xff1a;中等 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln-1 → Ln 请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → … 不…

Redis入门指南学习笔记(2):常用数据类型解析

一.前言 本文主要介绍Redis中包含几种主要数据类型&#xff1a;字符串类型、哈希类型、列表类型、集合类型和有序集合类型。 二.字符串类型 字符串类型是Redis中最基本的数据类型&#xff0c;它是其他4种数据类型的基础&#xff0c;其他数据类型与字符串类型的差别从某种角度…

欧科云链研究院:如何降低Web3风险,提升虚拟资产创新的安全合规

在香港Web3.0行业&#xff0c;技术推动了虚拟资产投资市场的快速增长&#xff0c;但另一方面&#xff0c;JPEX诈骗案等行业风险事件也接连发生&#xff0c;为Web3行业发展提供了重要警示。在近期的香港立法会施政报告答问会上&#xff0c;行政长官李家超表示&#xff0c;与诈骗…

自己动手实现一个深度学习算法——三、神经网络的学习

文章目录 1.从数据中学习1&#xff09;数据驱动2&#xff09;训练数据和测试数据 2.损失函数1)均方误差2)交叉熵误差3)mini-batch学习 3.数值微分1&#xff09;概念2&#xff09;数值微分实现 4.梯度1&#xff09;实现2&#xff09;梯度法3&#xff09;梯度法实现4&#xff09;…

从零开始的目标检测和关键点检测(二):训练一个Glue的RTMDet模型

从零开始的目标检测和关键点检测&#xff08;二&#xff09;&#xff1a;训练一个Glue的RTMDet模型 一、config文件解读二、开始训练三、数据集分析四、ncnn部署 从零开始的目标检测和关键点检测&#xff08;一&#xff09;&#xff1a;用labelme标注数据集 从零开始的目标检测…

[H5动画制作系列]坐标转化问题一次搞清,一了百了

前言: 本次演示的坐标包括三个坐标层&#xff1a; 1.舞台上的某位置相对于舞台的全局坐标的坐标(黑色)。 2.舞台上蓝色实例内部某位置相对于该蓝色实例内部局部坐标的坐标(蓝色)。 3.舞台上蓝色实例内部的红色实例内部某位置相对该红色实例内部局部坐标的坐标(红色)。 舞台…