当前位置: 首页 > article >正文

redis:基本全局命令-键管理(1)

在这里插入图片描述

个人主页 : 个人主页
个人专栏 : 《数据结构》 《C语言》《C++》《Linux》《网络》 《redis学习笔记》

文章目录

  • 前言
    • KEYS
    • EXISTS
    • DEL
    • EXPIRE
    • TTL
    • TYPE
  • 总结


前言

本文是作为基本全局命令-键管理的学习笔记


redis 是按照键值对的方式存储数据的,redis也支持多种数据结构;整体来说,redis是键值对结构,key固定是字符串,而value会有多种类型(如字符串,哈希表,列表,集合,有序集合等),操作不同的数据结构就会有不同的命令。全局命令,就是能够搭配任意一个数据结构使用的命令

KEYS

语法:

KEYS pattern

返回所有满足样式(pattern)的key。

那pattern支持那些样式?我们先在redis-cli中写入一些数据
在这里插入图片描述

pattern支持的通配符:

  • ?匹配任意一个字符List item
    在这里插入图片描述

  • *匹配0个或者多个任意字符
    在这里插入图片描述

  • [abcde] 只能匹配 [ ] 内部给出的 a b c d e字符,
    在这里插入图片描述

  • [^e]排除e,只有e匹配不了,其他的都能匹配
    在这里插入图片描述

  • [a-b]匹配a-b范围内的字符,包含两侧边界
    在这里插入图片描述


注意:
时间复杂度:O(N),N是指Redis需要扫描以找到匹配给定模式的键的数量。

在生产环境上,一般会禁止使用keys命令,尤其是keys *(查询redis中所有的key),这是因为,生产环境上的key可能非常多,而redis是一个单线程的服务器,执行key *的时间非常长,使redis服务器被阻塞了,无法给其它客户端提供服务。redis经常用于缓存,如果redis被keys *阻塞了,此时其它的查询redis操作就超时了,这些请求会直接插数据库,mysql就有可能挂掉。


EXISTS

语法:

EXISTS key [key …]

判断某个key是否存在。
时间复杂度 O(1)
返回值 key存在的个数 (key是唯一的,但一次可以查询多个key)
在这里插入图片描述


注意:
这里有一个问题,当我们需要查询多个key是否存在时,我们是一次查询多个key效率高,还是分开每次查询一个key效率高?
肯定是一次查询多个key效率高。
redis是一个客户端 服务器 结构的程序,客户端和服务器之间是通过网络来进行通信的。分开的写法,会产生更多轮次的网络通信。

redis的很多命令都是支持一次就能操作多个key的


DEL

语法:

DEL key [key …]

删除指定的key
时间复杂度 O(1)
返回值 删除的key的个数

在这里插入图片描述


注意:

  • redis作为缓存,此时redis里存储的是热点数据,全量数据是在mysql数据库中,如果只是删除redis中的几个key,一般问题不大;但如果大量删除key,此时大部分的请求就直接发给mysql,容易把mysql搞挂
  • redis作为数据库,与mysql一样,删除数据印象很大
  • redis作为消息队列,看具体的业务

EXPIRE

语法:

EXPIRE key seconds

为指定的key添加秒级的 过期时间(key存活时间超过这个指定时间,就会被自动删除)
时间复杂度 O(1)
返回值 1表示设置成功,0表示设置失败 (此处设定的过期时间,必须针对已经存在的key设置)

在这里插入图片描述
很多的业务场景是有时间限制的,如手机验证码,外卖的优惠卷,基于redis实现分布式锁等等。


redis的 key 的过期策略是怎么实现的?
一个redis中可能存在大量的key,redis服务器怎么 知道那些key已经过期需要被删除,那些key还没过期?直接遍历所有的key,显然不行,效率太低了。
redis的整体策略是1.定期删除,2.惰性删除

  • 定期删除,Redis会周期性地主动查找并删除一部分已过期的键,以避免大量过期键长期占用内存空间
  • 惰性删除,Redis不会主动删除过期键,而是在客户端尝试访问一个键时,Redis服务器才会检查这个键是否已经过期。如果发现该键已过期,则在返回结果前立即将其从数据库中删除。

这里定期删除只删除一部分已过期的键,是保证这个查找过程足够快;因为redis是单线程的程序,如果查找过期key的时间太长了,就有可能导致正常处理请求命令被阻塞了。


TTL

语法:

TTL key

获取指定key的过期时间,秒级
时间复杂度 O(1)
返回值 剩余过期时间,-1 表示没有关联过期时间,-2 表示key不存在

在这里插入图片描述
expire 和 ttl 命令都有对应的支持毫秒为单位的版本:pexpire 和 pttl


键的过期机制:
在这里插入图片描述


TYPE

语法:

TYPE key

返回key对应的数据类型
时间复杂度 O(1)
返回值 指定key所储存的值的类型
在这里插入图片描述


总结

以上就是我是redis学习笔记

在这里插入图片描述


http://www.kler.cn/a/372851.html

相关文章:

  • 14. NSWindow 窗口与 NSWindowController 窗口控制器
  • 从零学习大模型(十)-----剪枝基本概念
  • 【jvm】为什么Xms和Xmx的值通常设置为相同的?
  • 基于LangChain构建安全Agent应用实践(含代码)
  • “震惊!消费满额即领高额返现,循环购物模式揭秘“
  • 数据结构 之 二叉树遍历 ------中序(根)遍历 和 后序(根)遍历(六)
  • 同WiFi网络情况下,多个手机怎么实现不同城市的IP
  • MATLAB下的四个模型的IMM例程(CV、CT左转、CT右转、CA四个模型),附源代码可复制
  • yocto 下基于SDK的 tcpdump 移植
  • 爬虫利器playwright
  • ts:常见的内置数学方法(Math)
  • Java项目练习——学生管理系统
  • MR30分布式IO:石化行业的智能化革新
  • IIC学习总结
  • CodeS:构建用于文本到 SQL 的开源语言模型
  • list类模拟实现
  • 从0学习React(7)
  • Maven(18)如何使用Maven打包项目?
  • 1通道10GSPS或2通道5G 14 bit数字化仪
  • 跟着小土堆学习pytorch(六)——神经网络的基本骨架(nn.model)
  • 命令如诗,步入Linux的晨曦:指令初学者的旅程(下)
  • 日期差值题目(也可能是最容易看懂的了)
  • UG NX二次开发(C#)-计算圆柱面与其他平面的夹角
  • 第十二课 Vue中的事件修饰符
  • ubuntu系统docker容器中的torch,使用宿主机的gpu
  • 如何将原本打开Edge呈现出的360浏览器,更换成原本的Edge页面或者百度等其他页面