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

Redis-基本命令

Redis是单线程的,有5中数据结构,分别为:String(字符串),hash(哈希),list(列表),set(集合),zset(有序集合),都是键值对的值,redis的命令非常多,对于键来说有一些通用的命令:

进入Redis客户端命令redis-cli

keys:

语法: keys pattern

查询当前服务器上匹配的key。

通过一些特殊的符号(通配符)来描述key的模样,匹配上述模样的key就能被查询到。

时间复杂度:O(N)

返回值:匹配pattern的所有key

pattern的匹配方式:

?:匹配任意单个字符

* :匹配0个或多个任意字符

[abc]:给出固定选项,只能匹配abc,别的不行;

[^a]:只有a匹配不了,别的都可以匹配

[a-e]:匹配a到e这个范围内的字符,包含两侧边界(闭区间)

注意:在实际的生产环境中,要切记使用 keys *  这个命令,当查询到的数据量太大时,可能会使Redis服务器阻塞。

set:

语法:set key value

作用:Redis是按照键值对的方式存储数据的,用来存储key和value,类型都是String,不需要加双引号。

get:

语法:get key

作用:通过key获取value,当key不存在时,会返回nil(Redis中的nil就是NULL的意思)

exists:

判断某个key是否存在。

语法:exists key [key...]

时间复杂度: O(1)

返回值:key存在的个数

del:

作用:删除指定的一个或多个key

语法: del key [key...]

时间复杂度:O(1)

返回值:删除掉key的个数

expire:

作用:为指定的key设置秒级别的过期时间

语法: expire key seconds

时间复杂度:O(1)

返回值:1:设置成功,0:设置失败

应用场景:手机验证码,优惠券到期时间

ttl:

作用:获取指定key的过期时间

语法: ttl key

时间复杂度:O(1)

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

redis的key的过期策略是怎样实现的?

一个redis中可能存在多个key,每次删除遍历一遍的成本较高,redis的整体过期策略有2种:

1.定期删除:每次抽取部分进行验证过期删除;保证每次抽区检查的时间足够快。

(为啥要保证快呢?因为redis是单线程的,若太长时间去扫描过期的key,就可能导致正常处理请求的命令被阻塞,产生类似于keys *的效果)

2.惰性删除:当这个key已经到达过期时间了,但是还没有被删除,当一个请求访问到这个过期的key时,就会触发Redis的删除机制,服务器执行删除key的操作,同时再返沪i一个nil;

Redis结合上述两种删除策略,还提供了一系列的内存淘汰策略。

有讨论说redis是通过 定时器的方式来实现过期key的删除,但这是不可能的,因为定时器需要需要基于优先级队列(过期时间越早,优先级越高,仅关注队手元素即可),或时间轮 (将时间划分成很多的小段,每个小段上挂着一个链表,每个链表代表一个要执行的任务,让时间轮转动,通过指针进行扫描)来实现,但这两种方式都要引入多线程,而redis是单线程的。

type:

作用:返回key对应的数据类型

语法:type key

时间复杂度: O(1)

返回值:none,string,list,set,zset,hash,stream,

Redis是单线程的,当多个客户端Redis的命令到达服务端时,需要在队列中排队,等待redis服务器一个一个的去取出来里卖弄的命令再执行,微观上redis服务器是串行执行多个命令的。

相关文章:

  • Tailwind CSS 尺寸控制
  • 兰洋科技上合组织论坛发表专题分享,全球液冷布局引领绿色算力未来
  • 开发基于Jeston Orin Nx 开发版 16G的实现
  • YOLO+ONNX+PyQt打包为exe踩坑记录
  • ASP.NET Core Web API 实现 JWT 身份验证
  • (LeetCode 面试经典 150 题 ) 55. 跳跃游戏 (贪心)
  • 人工智能中的集成学习:从原理到实战
  • 用 PyTorch 构建液态神经网络(LNN):下一代动态深度学习模型
  • 从Yocto中获取源码用传统的方式单独编译
  • 网络分层模型与协议体系技术研究报告
  • 【力扣 中等 C】467. 环绕字符串中唯一的子字符串
  • OBCP第三章 OceanBase SQL 引擎高级技术学习笔记
  • 【C++11】右值引用和移动语义
  • 云效代码仓库导入自建gitlab中
  • 多相机人脸扫描设备如何助力高效打造数字教育孪生体?
  • UE Universal Camera 相机插件-限制镜头在区域内移动
  • 【Unity智能模型系列】MediaPipeUnityPlugin 实现人脸数据获取
  • [按键手机安卓/IOS脚本插件开发] 按键插件调试与判断循环结构辅助工具
  • 【CMake基础入门教程】第七课:查找并使用第三方库(以 find_package() 为核心)
  • 数字孪生技术驱动UI前端变革:从静态展示到动态交互的飞跃