Redis基础(1)--基本全局指令与架构

news/2024/12/22 8:16:45/

1. 基本全局命令

Redis有5种数据结构,但它们都是键值对中的值,对于键来说有⼀些通用的命令。

1.1KEYS

返回所有满足样式(pattern)的key。支持如下统配样式。

  • h?llo 匹配 hello , hallo 和hxllo
  • h*llo 匹配 hllo 和 heeeello
  • h[ae]llo 匹配 hello 和 hallo 但不匹配 hillo
  • h[^e]llo 匹配 hallo , hbllo ,…但不匹配 hello
  • h[a-b]llo 匹配 hallo 和 hbllo

语法:KEYS pattern
命令有效版本:1.0.0之后
时间复杂度:O(N)
返回值:匹配pattern的所有key。

1.2 EXISTS

判断某个key是否存在。
语法:EXISTS key [key ...]
命令有效版本:1.0.0之后
时间复杂度:O(1)
返回值:key存在的个数。

注意:exists能够同时查看多个key是否存在,为什么要这样做?
因为Redis是客户端服务器模式的,每条指令会封装成网络请求发给服务端,服务端在接收到请求后解包,处理并将结果封装发回给客户端,封装和解包必然是要消耗性性能的。

1.3 DEL

删除指定的key。
语法:DEL key [key ...]
命令有效版本:1.0.0之后
时间复杂度:O(1)
返回值:删除掉的key的个数。

1.4 EXPIRE

为指定的 key 添加秒级的过期时间(Time To Live TTL)
语法:EXPIRE key seconds
命令有效版本:1.0.0之后
时间复杂度:O(1)
返回值:1表示设置成功。0表示设置失败

PEXPIRE:设置毫米级到期时间

1.5 TTL

获取指定 key 的过期时间,秒级。
TTL key
命令有效版本:1.0.0 之后
时间复杂度:O(1)
返回值:剩余过期时间。-1 表示没有关联过期时间,-2 表示 key 不存在。

注意:IP协议首部也有TTL,这个TTL本质上是一个计数器,当IP报文被路由器转发后,就会减一,减到0丢弃IP报文

键的过期机制

Redis主要用两种策略去处理过期的数据

  1. 定期删除:定期查看一部分键是否应该被删除,保证速度足够快,因为redis是单线程程序,不能够阻塞工作线程
  2. 惰性删除:访问时查看是否已经到期

注意:有了上面两种方案,还是有过期数据不会被删除的,redis还有内存淘汰机制去解决这个问题

定时器的两种高效实现

  1. 优先级队列:用优先级队列及堆来维护key的到期时间,到期时间最近的key放入堆顶,专门创建一个线程来维护这个堆,当有新的key被设置了到期时间,就将其加入到堆中,并且查看堆顶的到期时间,用其减去当前时间,得到需要等待的时间,让线程休眠等待的时间,有新的key被设置了到期时间,就唤醒线程
  2. 时间轮

在这里插入图片描述

1.6 TYPE

返回 key 对应 value 的数据类型。
语法:TYPE key
命令有效版本:1.0.0 之后
时间复杂度:O(1)
返回值: none , string ,list , set ,zset ,hash and stream .。

其中stream是消息队列用的

2. 单线程架构

Redis 使用了单线程架构来实现高性能的内存数据库服务,此处的单线程是只有一个线程来处理命令请求,并不是整个进程都只有一个线程,会有其他线程去处理IO。

2.1 单线程模型

在这里插入图片描述
当三个客户端同时访问Redis服务器时,看似是同时到达并处理请求,实际请求到达一定有先有后,由于Redis是单线程的,一个时间段只能处理一个请求,其他的请求即使来了也只能排队等着。不会有多线程场景下的线程安全问题。

这也能解释了Redis为什么能这么快~
这个快是和数据库相比的

  1. Redis访问内存,而数据库访问磁盘
  2. Redis处理网络请求用的是IO多路转接方案
  3. Redis的核心功能比数据库的核心功能要简单,数据库对于数据的插入删除查询都有更复杂的功能支持,这样必然会造成额外的开销,比如:约束,要做额外的工作
  4. 单线程模型避免了没必要的线程竞争开销
    redis操作都是短平快的,就是简单操作一下内存数据,不特别消耗cpu,使用多线程效率提升也不大

http://www.ppmy.cn/news/1557146.html

相关文章

Python解释器和PyCharm详解

目录 1.什么是Python解释器? Python解释器的类型和特性 Python解释器的优势 2.什么工具可以写Python文件? 3.为什么Python解释器和PyCharm不在同一个网站? 1.什么是Python解释器? Python解释器‌是Python程序运行的核心,它的主要作用是将Python代码转换为…

【Linux开发工具】版本控制器git

🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:Linux 🌹往期回顾🌹:【Linux开发工具】自动化构建-make/Makefile 🔖流水不争,争的是滔滔不 一、git简介二、…

简单工厂模式和策略模式的异同

文章目录 简单工厂模式和策略模式的异同相同点:不同点:目的:结构: C 代码示例简单工厂模式示例(以创建图形对象为例)策略模式示例(以计算价格折扣策略为例)UML区别 简单工厂模式和策…

stm32进硬件错误怎么回事

STM32进入硬件错误状态,通常是由一些特定的编程或硬件问题引起的。以下是一些可能的原因及相应的解决方法: 可能的原因 数组越界操作:在编程过程中,如果数组访问超出了其定义的边界,可能会导致内存访问错误&#xff0…

电脑提示ntdll.d缺失是什么原因?不处理的话会怎么样?ntdll.dll文件缺失快速解决方案来啦!

电脑提示ntdll.dll缺失:原因、影响与解决方案 在日常的电脑使用中,我们偶尔会遇到一些令人困惑的系统错误,其中“ntdll.dll缺失”便是较为常见的一种。作为软件开发从业者,我深知这一错误给用户带来的不便,因此&#…

人脸修复与增强腾讯开源项目GFPGAN介绍

GFPGAN 简述 GFPGAN (Generative Facial Prior GAN) 是一种基于生成对抗网络(GAN)的面部图像修复与增强模型。它由腾讯 ARC Lab 的研究团队开发,目的是以高效和高质量的方式修复低分辨率、受损或老化的人脸图像,同时保留其真实感和…

13、基于SpringBoot的旅游网站的设计与实现

随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势,旅游网站当然也不能排除在外,随着旅游网站的不断成熟,它彻底改变了过去传统的旅游网站方式,不仅使旅游管理难度变…

Go 语言GC(垃圾回收)的工作原理

Go语言的垃圾回收(Garbage Collection,简称GC)机制是一种自动的内存管理方法,它负责自动释放不再使用的内存,以避免内存泄漏和碎片化。Go语言的GC工作原理主要基于标记-清除(mark-and-sweep)算法…