【Redis_Day3】Redis通用命令

news2024/11/25 12:24:34

【Redis_Day3】Redis通用命令

  • redis客户端的三种形态
  • redis的快与慢
  • redis通用命令
    • 阅读redis官方文档
    • redis中两个核心命令
      • set命令
      • get命令
    • redis全局命令
      • keys命令:查询当前服务器上的key
        • 生产环境
      • exists命令:判定key是否存在
      • del命令:删除指定的key
      • expire命令:为指定的key设置过期时间。
      • ttl命令:查询指定key的过期时间
      • type命令:查看key对应value的数据类型
  • Redis中key的过期策略实现原理(浅析)
    • 定时器的实现原理(浅析)
  • 小结一下~

redis客户端的三种形态

redis是一个客户端-服务器结构的程序。redis客户端和服务器可以在一台机器上,也可以在不同主机上。客户端和服务器之间通过网络进行通信。

在这里插入图片描述

Redis的客户端有很多形态,比如

  1. redis-cli是Redis服务器自带的命令行客户端。通过命令redis-cli或命令redis-cli -h IP地址 -p 端口号进入客户端并连接到服务器。ctrl+d退出。
    在这里插入图片描述
  2. 图形化界面的客户端。比如桌面程序,web程序。
  3. 基于redis的api自行开发客户端。

redis的快与慢

和mysql这样的关系型数据库相比,redis的最大特点是快。
mysql是在硬盘存数据,redis是在内存存数据。

和内存中的操作变量比,就慢了。
redis在内存存储管理数据是先通过网络,再操作内存。同时redis可以把数据单独、持久化存储,服务器重启,并不会影响数据内容。而变量是直接操作内存,重启服务器后数据就没了。
在这里插入图片描述

redis通用命令

通过redis-cli客户端和redis服务器交互,涉及到很多redis命令。大概是上百个吧。常用的掌握,不常用的在用到的时候查阅官方文档。

阅读redis官方文档

redis官方地址:redis.io
进入官网后,继续进入社区版
在这里插入图片描述然后在搜索框中输入命令,
在这里插入图片描述
进入命令的官方文档:
在这里插入图片描述

redis中两个核心命令

redis是按照键值对的方式存储数据的。
redis中命令不区分大小写。

set命令

set命令:把key和value存储到redis中。key和value都是字符串。

总结set的用法:

  1. set 字符串1 字符串2:把键值对<字符串1-字符串2>存到redis中。键和值加不加引号无所谓。
    在这里插入图片描述

get命令

get命令:根据key来取value。

总结get的用法:

  1. get 键1:通过键1取它对应的值。如果键1不存在,返回nil。nil就是null/NULL的意思。
    在这里插入图片描述
    在这里插入图片描述

redis全局命令

redis通过数据结构组织数据。体现在两个方面:

  1. redis自身的这些键值对,是通过哈希表的方式来组织的。
  2. 在键值对中,key固定就是字符串,value实际上有很多数据类型,最常见的五种类型:字符串,哈希表,列表,集合,有序集合。操作不同的数据结构就会有不同的命令。

全局命令:能够搭配任意数据结构使用的命令。

keys命令:查询当前服务器上的key

keys命令:通过通配符描述key的样子,服务器中匹配上述样子的key就能被查询出来。

总结keys的用法:

  1. keys pattern:pattern是包含通配符的字符串。在服务器中查询能匹配pattern的所有key。
    patter的具体写法:
    ?:匹配任意一个字符;
    *:匹配任意个字符;
    [ae]:只能匹配a或e,其他字符不行,相当于给出固定选项;
    [^ea]:排除e和a,只有e和a匹配不了,其他的都能匹配;
    [a-b]:a到b区间的都能匹配,包括a和b。
    比如:
    在这里插入图片描述在这里插入图片描述keys命令的时间复杂度是O(N),redis执行命令时用的是单线程模型,所以如果redis中存储的key非常多,那么执行keys命令的时间会很长,会导致redis服务器堵塞,无法给其他客户端提供服务。
    所以在生产环境中使用keys命令是危险操作
  2. keys *:查询当前服务器上的所有key。
生产环境

生产环境也叫线上环境。线上环境是外界用户能访问到的。

办公环境,开发环境,测试环境,统称为线下环境,外界用户无法访问。

一旦生产环境出现问题,会直接对用户使用产生影响。

exists命令:判定key是否存在

exists命令能一次性查一个或多个key是否存在。
redis组织key是按照哈希表的方式来组织的。所以 exists命令的时间复杂度是O(1)。
总结exists的用法:

  1. exists key1 key2 key3:查询服务器中是否存在键key1,键key2,键key3,返回key存在的个数。
    在这里插入图片描述
    在这里插入图片描述
    一次查多个效率比较高。这主要是因为redis客户端和服务器之间通过网络进行通信。
    每次网络通信都要对数据进行封装和分用,还是很花时间的。
    而且在网络通信中是通过网卡进行数据传输等工作的,网卡属于IO设备,IO设备的效率低于内存,CPU。
    一般情况下,Redis客户端和服务器还不定在一台机器上,此时网络传输消耗的时间也更多了。
    Redis的很多命令都支持一次能操作多个key

del命令:删除指定的key

同exists命令,del命令能一次删除一个或多个key。del命令的时间复杂度也是O(1)。

总结del的用法:

  1. del key1 key2 key3:删除服务器中键key1,键key2,键key3,返回删除掉的key的个数。
    在这里插入图片描述

expire命令:为指定的key设置过期时间。

key存活时间超过设定的过期时间,key就会被自动删除。设置的时间单位是s。实践复杂度也是O(1)。
比如在该验证码五分钟内有效,该外卖优惠劵在今日24.00过期等等场景下。

总结expire命令的用法:

  1. expire key1 xxx :为key1设置过期时间,xxx秒后,key1被自动删除。返回0设置失败,返回1设置成功。key1必须存在。
    在这里插入图片描述

通过pexpire命令也可以为指定的key设置过期时间。使用方法同expire,区别是设置的时间单位是ms。

ttl命令:查询指定key的过期时间

ttl 全称 time to live,即存活时间。

ttl命令的功能是查看指定key的过期时间还剩多少。
总结ttl命令的用法:

  1. ttl key1:查询key1的过期时间还剩多少,时间单位是s。返回值如果是-1表示该key1没有设置过过期时间,返回值如果是-2表示该key1不存在。
    在这里插入图片描述

pttl和ttl命令一样,区别是时间单位是ms。

type命令:查看key对应value的数据类型

type的命令的时间复杂度也是O(1)。

总结type的用法:

  1. type key1:查看key1对应value的数据类型。如果key1不存在,返回值是none。
    在这里插入图片描述
    在redis中,操作不同数据类型的value的命令完全不同。操作前就可以先type一下。

Redis中key的过期策略实现原理(浅析)

一个redis中同时存在很多的key,这些key中可能有很大一部分都有过期时间,此时,redis服务器是如何知道哪些key已经过期要被删除,哪些key还没过期的。

直接遍历所有的key,效率太低行不通。

redis中采取的基本策略是:定期删除和惰性删除结合

惰性删除:假设key1已经到了过期时间,但是redis并没有删除它。直到key1接下来被访问到时,才会触发redis服务器删除key1的操作,并返回给客户端一个nil。

定期删除:redis每隔一段时间抽取一部分key检查它们的过期时间,对过期key执行删除操作。在这个过程中,控制每次抽取检查的数量,保证定期删除的过程要足够快。redis处理主要任务都是使用单线程模型,如果扫描过期key消耗时间太长,会导致redis正常处理命令被阻塞。

通过上述策略,依然可能存在有很多过期的key被残留,不能及时删除掉。为了解决这个问题,redis中还提供了一系列的内存淘汰策略。

定时器的实现原理(浅析)

定时器:在某个时间到达之后,执行指定的任务。

实现一个定时器,有以下两种比较高效的方式:分别是基于优先级队列(堆)和时间轮。

基于优先级队列实现定时器:现假设redis服务器中有很多设置了过期时间的key,把这些key加入到一个优先级队列中,指定优先级规则是过期时间早的先出队列。此时队首元素就是最早的要过期的key,给定时器中分配一个线程(多线程),让这个线程去检查队首元素,看队首元素是否过期,这个线程不需要频繁扫描队首元素,只要根据当前时刻和队首元素的过期时间,设置一个等待,当等待时间结束后,系统唤醒这个线程,这个线程去检查队首元素即可。

基于时间轮实现定时器:把时间划分成多个时间槽,每个槽代表一个固定的时间间隔。根据任务的超时时间把任务放进时间槽中,每个时间槽中存储多个定时任务。设置一个指向当前时间槽的指针,这个指针每隔固定时间就往后走一个时间槽,每次走到一个时间槽,就会尝试执行里面的定时任务。
控制指针向后走的线程并没有频繁扫描。一共多少个时间槽,每个槽代表间隔多少都是根据具体场景设计的。

上述两种方案都涉及到了多线程,Redis中没有采取上述两种方案。

小结一下~

  1. redis中六个常用的全局命令:
  • keys:查看匹配规则的key
  • exists:判定指定key是否存在
  • del:删除指定的key
  • expire/pexpire:设置过期时间
  • ttl/pttl:查看key的过期时间
  • type:查询key对应的value类型
  1. 两个核心命令:
  • set:把key和value存储到redis中。
  • get:根据key来取value
  1. 在生产环境中使用keys命令是危险操作。特别是keys *
  2. Redis中针对key的过期策略:定期删除+过期删除+内存淘汰机制三者结合。
  3. 定时器的两个高效实现思路:基于优先级队列实现和基于时间轮实现。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

静态库、动态库、framework、xcframework、use_frameworks!的作用、关联核心SDK工程和测试(主)工程、设备CPU架构

1.1库的概念 库&#xff1a;程序代码的集合&#xff0c;编译好的二进制文件加上头文件供使用&#xff0c;共享程序代码的一种方式。 1.2库的分类 根据开源情况分为&#xff1a;开源库&#xff08;能看到具体实现&#xff09;、闭源库&#xff08;只公开调用的的接口&#xf…

小菜家教平台:基于SpringBoot+Vue打造一站式学习管理系统

前言 现在已经学习了很多与Java相关的知识&#xff0c;但是迟迟没有进行一个完整的实践&#xff08;之前这个项目开发到一半&#xff0c;很多东西没学搁置了&#xff0c;同时原先的项目中也有很多的问题&#xff09;&#xff0c;所以现在准备从零开始做一个基于SpringBootVue的…

【C++、数据结构】哈希表——散列表(一)(概念/总结)

「前言」 &#x1f308;个人主页&#xff1a; 代码探秘者 &#x1f308;C语言专栏&#xff1a;C语言 &#x1f308;C专栏&#xff1a; C / STL使用以及模拟实现 &#x1f308;数据结构专栏&#xff1a; 数据结构 / 十大排序算法 &#x1f308;Linux专栏&#xff1a; Linux系统编…

山东路远生态科技有限公司竣工投产仪式暨产品发布会圆满举行

第二十届三中全会于2024年7月15日至18日在北京举行。全会审议通过了《关于进一步全面深化改革、推进中国式现代化的决定》。其中提到,“要健全因地制宜发展新质生产力体制机制”。 新质生产力是由技术革命性突破、生产要素创新性配置、产业深度转型升级而催生的当代先进生产力…

MD5(Crypto)

解题思路 打开文件发现一串代码&#xff0c;结合题目提示&#xff0c;应该是 MD5 加密。 找个在线的 MD5 解密网站&#xff0c;行云流水得到 flag。 题目设计原理 题目设计&#xff1a;无他&#xff0c;MD5 加密。 题目原理&#xff1a; MD5&#xff08;Message-Digest Algo…

EHOME视频平台EasyCVR萤石设备视频接入平台视频诊断技术可以识别哪些视频质量问题?

EasyCVR视频监控汇聚管理平台是一款针对大中型项目设计的跨区域网络化视频监控集中管理平台。萤石设备视频接入平台EasyCVR不仅具备视频资源管理、设备管理、用户管理、运维管理和安全管理等功能&#xff0c;还支持多种主流标准协议&#xff0c;如GB28181、GB35114、RTSP/Onvif…

QML项目实战:自定义Button

目录 一.添加模块 ​1.QtQuick.Controls 2.1 2.QtGraphicalEffects 1.12 二.自定义Button 1.颜色背景设置 2.设置渐变色背景 3.文本设置 4.点击设置 5.阴影设置 三.效果 1.当enabled为true 2.按钮被点击时 3.当enabled为false 四.代码 一.添加模块 1.QtQuick.Con…

实战攻略 | ClickHouse优化之FINAL查询加速

【本文作者&#xff1a;擎创科技资深研发 禹鼎侯】 查询时为什么要加FINAL 我们在使用ClickHouse存储数据时&#xff0c;通常会有一些去重的需求&#xff0c;这时候我们可以使用ReplacingMergeTree引擎。这个引擎允许你存储重复数据&#xff0c;但是在merge的时候会根据order …

labview学习总结

labview学习总结 安装labview的特点一、图形化编程范式二、并行执行机制三、硬件集成能力四、应用领域优势五、开发效率六、系统集成能力**labview基本组成示意图****常用程序结构图解**结语 基础知识介绍界面前后面板的概念平铺式和层叠式 帧的概念结构类型顺序结构for循环whi…

Linux 服务器使用指南:从入门到登录

&#x1f31f;快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 &#x1f31f; &#x1f6a9;博主致力于用通俗易懂且不失专业性的文字&#xff0c;讲解计算机领域那些看似枯燥的知识点&#x1f6a9; 目录 一…

《AI 大模型:重塑软件开发新未来》

引言 在科技的璀璨星河中&#xff0c;AI 大模型宛如一颗耀眼的新星&#xff0c;正以前所未有的力量改写着软件开发的篇章。随着其技术的持续演进&#xff0c;软件开发流程正经历着翻天覆地的变化。从代码自动生成的神奇魔法&#xff0c;到智能测试的精准洞察&#xff0c;AI 大…

acmessl.cn提供接口API方式申请免费ssl证书

目录 一、前沿 二、API接口文档 1、证书可申请列表 简要描述 请求URL 请求方式 返回参数说明 备注 2、证书申请 简要描述 请求URL 请求方式 业务参数 返回示例 返回参数说明 备注 3、证书查询 简要描述 请求URL 请求方式 业务参数 返回参数说明 备注 4、证…

windows server2019下载docker拉取redis等镜像并运行项目

一、基本概念 1、windows server 指由微软公司开发的“Windows”系列中的“服务器”版本。这意味着它是基于Windows操作系统的&#xff0c;但专门设计用于服务器环境&#xff0c;而不是普通的桌面或个人用户使用。主要用途包括服务器功能、用户和资源管理、虚拟化等 2、dock…

Docker-- cgroups资源控制实战

上一篇&#xff1a;容器化和虚拟化 什么是cgroups&#xff1f; cgroups是Linux内核中的一项功能&#xff0c;最初由Google的工程师提出&#xff0c;后来被整合进Linux内核; 它允许用户将一系列系统任务及其子任务整合或分隔到按资源划分等级的不同组内&#xff0c;从而为系统…

解决ImportError: DLL load failed while importing _message: 找不到指定的程序。

C:\software\Anoconda\envs\yolov5_train\python.exe C:\Project\13_yolov5-master\train.py C:\software\Anoconda\envs\yolov5_train\lib\site-packages\torchvision\io\image.py:13: UserWarning: Failed to load image Python extension: [WinError 127] 找不到指定的程序…

超越Axure:探索新一代原型设计工具

Axure RP是一款被广泛认可的快速原型设计工具&#xff0c;专为专业设计师打造&#xff0c;用于创建高效的产品原型图&#xff0c;包括APP和网页的原型图、框架图和结构图等。Axure RP制作的原型图能够实现与实际APP相似的交互效果&#xff0c;便于向用户或客户展示&#xff0c;…

综合项目--博客

一。基础配置&#xff1a; 1.配置主机名&#xff0c;静态IP地址 2.开启防火墙配置 3.部分开启selinux并且配置 4.服务器之间使用同ntp.aliyun.com进行世家能同步 5.服务器之间实现SSH绵密登陆 二。业务需求 1.Sever-NFS-DNS主机配置NFS服务器&#xff0c;将博客网站资源…

dns欺骗

[[Ettercap]] 少不了这个 arp 毒化和流量截取的中间人工具。 dns欺骗原理 什么是 DNS 欺骗&#xff1f; DNS 欺骗&#xff08;DNS Spoofing&#xff09; 是一种网络攻击技术&#xff0c;攻击者通过修改 DNS 响应&#xff0c;将目标用户的 DNS 查询结果篡改&#xff0c;指向攻…

危机来临前---- 力扣: 876

危机即将来临 – 链表的中间节点 描述&#xff1a; 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例&#xff1a; 何解&#xff1f; 1、遍历找到中间节点 &#xff1a; 这个之在回文链表中找…

SQL Server数据库中,报错:用户名或密码不正确

1、 用户名或密码不正确 2、解决方式 可能是服务器名称不对&#xff0c;检查服务器名称是否是安装sqlserver数据的服务器名称。安装sqlserver数据的服务器&#xff0c;没有开启1433端口&#xff0c;需要开启端口 下一步保证&#xff1a;TCP/IP 状态状态为&#xff1a;已启用 然…