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

个人主页 : 个人主页

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

文章目录


前言

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


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

KEYS

语法:

KEYS pattern

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

那pattern支持那些样式?我们先在redis-cli中写入一些数据

pattern支持的通配符:

  • ?匹配任意一个字符List item

  • *匹配0个或者多个任意字符

  • abcde\] 只能匹配 \[ \] 内部给出的 a b c d e字符, ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/cd34203d9c13419c9133ad7c28391c90.png)

  • a-b\]匹配a-b范围内的字符,包含两侧边界 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c38e53578ec542649bda9033eb35a20e.png)

注意:

时间复杂度: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学习笔记

相关推荐
一屉大大大花卷26 分钟前
初识Neo4j之入门介绍(一)
数据库·neo4j
周胡杰1 小时前
鸿蒙arkts使用关系型数据库,使用DB Browser for SQLite连接和查看数据库数据?使用TaskPool进行频繁数据库操作
前端·数据库·华为·harmonyos·鸿蒙·鸿蒙系统
wkj0011 小时前
navicate如何设置数据库引擎
数据库·mysql
赵渝强老师1 小时前
【赵渝强老师】Oracle RMAN的目录数据库
数据库·oracle
暖暖木头1 小时前
Oracle注释详解
数据库·oracle
御控工业物联网1 小时前
御控网关如何实现MQTT、MODBUS、OPCUA、SQL、HTTP之间协议转换
数据库·sql·http
GJCTYU3 小时前
spring中@Transactional注解和事务的实战理解附代码
数据库·spring boot·后端·spring·oracle·mybatis
MicroTech20253 小时前
微算法科技(NASDAQ: MLGO)探索Grover量子搜索算法,利用量子叠加和干涉原理,实现在无序数据库中快速定位目标信息的效果。
数据库·科技·算法
Code季风3 小时前
SQL关键字快速入门:CASE 实现条件逻辑
javascript·数据库·sql
weixin_478689763 小时前
操作系统【2】【内存管理】【虚拟内存】【参考小林code】
数据库·nosql