Redis常用命令,你了解哪些呢?

news2024/10/7 8:29:10

目录

前置工作:先进入Redis客户端

 1、Redis最核心的两个命令:get & set

set:存键值对

get:根据key,取出value

2、Redis全局命令

2.1、keys ---查询当前服务器上匹配的key

2.1.1. ? 匹配任意一个字符

2.1.2. * 匹配0个或任意多个字符

2.1.3.  [123] 只能匹配到1 2 3 ,别的都不可以-固定选项

2.1.4.  [^e] 排除e ,除了e其他都能匹配

2.1.5.  [1-3]匹配1-3这个区间内的字符,包含边界值

2.1.6  keys的注意事项

2.2、 exists 判定key是否存在

2.3、del  删除指定的key

2.4、 expire 给指定的key设置过期时间

2.5、ttl 查看key的过期时间还剩多少

3、为什么redis的很多命令都支持一次对多个key进行操作

4、redis的key的过期策略是如何实现的?

5、使用定时器实现redis的过期策略思路

5.1、基于优先级队列实现的定时器

5.2、基于时间轮实现的定时器


前置工作:先进入Redis客户端

命令:redis-cli

 1、Redis最核心的两个命令:get & set

redis中是以键值对的方式去存储数据,所以存储存储,当然要有存的这个操作啦~

set:存键值对

语法格式:set key value

返回ok则存键值对成功~

存好了之后,后面使用就是需要通过key取出value值啦~

  • 这里的key和value加不加单双引号都可以,就是表示一个字符串类型~
  • redis中的命令不区分大小写

get:根据key,取出value

语法格式: get key 

  • key value存在则返回value值
  • key value不存在,则返回nil  【类似于null】

2、Redis全局命令

        Redis中支持很多的数据结构,整体上说就是Redis键值对结构,key固定是字符串,value实际上会有很多种类型~

        全局命令就是能够搭配任意一个数据结构来使用的命令

2.1、keys ---查询当前服务器上匹配的key

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

2.1.1. ? 匹配任意一个字符

2.1.2. * 匹配0个或任意多个字符

2.1.3.  [123] 只能匹配到1 2 3 ,别的都不可以-固定选项

 

2.1.4.  [^e] 排除e ,除了e其他都能匹配

2.1.5.  [1-3]匹配1-3这个区间内的字符,包含边界值

2.1.6  keys的注意事项

  • keys命令的时间复杂度是O(n)
  • keys * 要慎用  -- keys * 的时间可能会非常长,导致redis被阻塞了,无法给其他客户端提供服务,此时可能会导致请求直接去数据库查询了,请求量比较大的情况下,容易让mysql挂掉~

2.2、 exists 判定key是否存在

  • 语法格式:exists key [key ...]
  • 返回值:key存在的个数-->针对多个key来说是有用滴【key是唯一的,这里指的个数,意思是一次判定多个key是否存在,返回个数】
  • 时间复杂度O(1)

例:

2.3、del  删除指定的key

  • 语法格式:del key [key ...]
  • 返回值:删除掉的key的个数
  • 时间复杂度O(1)

例:

注:

        删除操作,需不需要谨慎对待?

        分情况。具体来说:redis主要的应用场景就是作为缓存,此时redis里存的只是一个热点数据,全量数据是在MySQL数据库中的,这种情况下,把redis中的key删掉一个或几个,问题不大~但如果把redis中的一大半以上的数据都给删除了,问题就会很大,为什么?当redis中没有这些数据,请求来了,就会去MySQL中找,请求大的话,MySQL就比较容易挂掉~   此外如果说,直接把redis就当做数据库来用,那删数据,哪怕是删了一个,影响也很大~  再此外,redis作为消息队列时,这种情况下,删数据影响大不大就需要看具体的业务类场景了~

2.4、 expire 给指定的key设置过期时间

  • 语法格式: expire key seconds
  • 返回值:成功为1,失败为0
  • 时间复杂度O(1)
  • 适用场景:手机验证码等

例:

2.5、ttl 查看key的过期时间还剩多少

  • 语法格式: ttl key
  • 返回值:有过期时间则返回剩余时间,无【key存在】则返回-1,key不存在返回-2
  • 时间复杂度O(1)

 例:

注:这里使用pttl也可以:

2.6、type  查看key对应value的数据类型

  • 语法格式:type key
  • 返回格式:对应的数据类型,无key则返回none
  • 时间复杂度:O(1)
  • redis中所有的key都是string,key对应的value值可能存在多种类型

例:

 


3、为什么redis的很多命令都支持一次对多个key进行操作

        redis是一个客户端 服务器 结构的程序,客户端和服务器之间通过网络来通信~

        如果redis不支持一次对多个key进行操作,那必然会产生更多轮次的网络通信,而网络通信中,对数据的封装和分用都需要时间,更何况你的客户端和服务器不一定在一个主机上,中间还隔得很远~

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


4、redis的key的过期策略是如何实现的?

        部分同学猜测哈?会不会是将redis中的key进行遍历一下,该删删该留留呢?还挺暴力哈!但是这种操作,效率非常的低,再加上redis本身就是以单线程来工作的,这样就是导致效率非常的低~

redis的过期策略:

  • 定期删除
  • 惰性删除

定期删除:在一段时间中,抽取部分key进行检测,该删删,该留留,一段时间后再来一次~

惰性删除:当key的过期时间到了,但他还没有被删除,key还存在,而后等到下次使用到这个key时,再检查过期时间,该删删,该留留

        上述两者虽然能够处理一些过期的key,但是依然会存在很多过期的key可能未被及时删除,因此redis有提供了很多的内存淘汰策略~

Redis中未引用定时器的方式来清理过期key,考虑是不想引入多线程~


5、使用定时器实现redis的过期策略思路

5.1、基于优先级队列实现的定时器

        优先级队列中,采用“过期时间越早,优先级越高”的思路~

        当redis中,有很多key设置了过期时间,那就可以将这些key加入到优先级队列中,指定优先级规则是过期时间你越早的,先出队列,例如我们可以使用小根堆作为辅助,对首元素就是最早要过期的key。

        此时呢,定时器只要分配一个线程,让这个线程去检查对首元素是否过期,过期则删除,没有过去的话,再根据对首元素的过期时间来设置等待时间,到了时间后,再来检查~  那这里呢,如果临时加了一个新任务,例如上次设置等待1小时再检查,而这个任务半小时后过期,怎么办?我们可以在添加新任务时,唤醒刚才的线程,重新检查一下对首元素,再调整等待时间~

5.2、基于时间轮实现的定时器

        把时间划分为很多个小段,具体划分要根据需求~

        

例如上述这样的,每个小间隔都是一个时间间隔,例如:10s

每个小间隔中,都挂着一个链表~

 

每个链表都是一个任务~

可能是10s后尝试执行第一个格子中链表的任务,再10s后执行第二个,依次进行~

对于实践论来说,每个格子的时间,共多少格子,都要根据实际业务场景来调整~ 

好啦~本期到这里了,下期见啦~

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

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

相关文章

Python VScode 配置

在上一章节中我们已经安装了 Python 的环境,本章节我们将介绍 Python VScode 的配置。 准备工作: 安装 VS Code安装 VS Code Python 扩展安装 Python 3 安装 VS Code VSCode(全称:Visual Studio Code)是一款由微软…

关于岛屿的三道leetcode原题:岛屿周长、岛屿数量、统计子岛屿

题1:岛屿周长 给定一个 row x col 的二维网格地图 grid ,其中:gridi 1 表示陆地, gridi 0 表示水域。 网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰…

龙迅LT9611 2PORT MIPIDSI/CSI转HDMI,带HDCP,支持分辨率高达4K30HZ

龙迅LT9611 1.描述: LT9611 MIPIDSI/CSI到HDMI1.4桥具有双端口MIPID-PHY接收器前端配置,每个端口有4个数 据通道,每个数据通道运行2Gbps,最大输入带宽为16Gbps。该桥提供了一个HDMI数据输出与可 选的S/PDIF或8通道I2S串行音频…

STM32F4XX/APM32F4XX USB OTA升级

近期在研究USB CDC协议,使用USB Virtual Port Com功能与上位机通讯做了OTA功能。开发平台:MDK529 开发硬件:APM32F411 首先看下手册Flash分布,Flash总共8个扇区。 接下来进行Flash分区。 扇区 0 和 扇区 1做Boo区。 扇区 2做APP跳…

C#面试十问

1:C#中变量类型分为哪两种?它们的区别是什么?2:Class和Struct的区别?3:C#中类的修饰符和类成员的修饰符有哪些?4:面向对象的三个特征(特点)是什么&#xff1f…

随机游走任务中时间差分(0)和常数α蒙特卡罗方法的比较

一、说明 在这篇文章中,我们讨论了常α MC 方法和 TD(0) 方法之间的区别,并比较了它们在随机游走任务中的性能。TD方法在本文的所有测试中都覆盖了MC方法,因此将TD视为强化学习任务的方法是更可取的选择。 二、方法库介…

算法通关村第10关【白银】| 数组中第k大的数

思路:快速排序,每次都定位一个元素,找指定位置的元素还得有序,很容易就想到快排思想 小优化之处就是当前归位元素比目标元素小就继续往右,比目标元素大就往左,相等就返回 class Solution {public int fin…

【算法竞赛宝典】稀疏数组

【算法竞赛宝典】稀疏数组 题目描述代码展示 题目描述 代码展示 random.cpp #include <iostream>using namespace std;int main() {freopen("zip5.in", "w", stdout);int n, m;cin >> n >> m;cout << n << << m <…

小白入门python

建议用vscode进行代码学习 vscode下载地址:Download Visual Studio Code - Mac, Linux, Windows 左侧点击扩展安装python,右下角选择python版本&#xff0c;记得配置系统环境变量&#xff0c;python在系统(cmd)的版本由环境变量优先级决定,在编程软件中由自己选择解释器

4.1 链式栈StackT

C关键词&#xff1a;内部类/模板类/头插 C自学精简教程 目录(必读) C数据结构与算法实现&#xff08;目录&#xff09; 栈的内存结构 空栈&#xff1a; 有一个元素的栈&#xff1a; 多个元素的栈&#xff1a; 成员函数说明 0 clear 清空栈 clear 函数负责将栈的对内存释放…

为什么磁盘满可能导致cpu使用率飙升

先说原因 因为当文件在安装和卸载的时候&#xff0c;会使硬盘中的数据排列非常分散或者断断续续的&#xff0c;让电脑在查找时速度变慢&#xff0c;就造成大量的使用CPU资源。这时就需要更换CPU。 案例 事件描述 公司监控系统事件报警某个应用的磁盘满了。通过后端执行命令发现…

linux编程--进程--进程相关概念

5个问题了解进程&#xff1a; 什么是程序&#xff0c;什么是进程&#xff0c;有什么区别如何查看系统中有哪些进程&#xff1f;什么是进程标识符&#xff1f;什么叫父进程&#xff0c;什么叫子进程&#xff1f;c程序的存储空间是如何分配的&#xff1f; 1.程序是静态的概念&a…

【力扣】96. 不同的二叉搜索树 <动态规划>

【力扣】96. 不同的二叉搜索树 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;5 示例 2&#xff1a; 输入&am…

算法竞赛备赛之数学知识训练提升,暑期集训营培训

1.质数 在大于1的整数&#xff0c;如果质包含1和本身这两个约数&#xff0c;就称之为素数/质数。 1.质数的判定&#xff08;试除法&#xff09; 优化后的&#xff1a; #include<iostream> #include<algorithm> ​ using namespace std; ​ bool is_prime(int n…

Multisim14.0仿真(五)三角波发生器

一、仿真原理图&#xff1a; 二、仿真效果&#xff1a;

微服务架构|go-zero 的自适应熔断器

原文链接&#xff1a; go-zero 的自适应熔断器 上篇文章我们介绍了微服务的限流&#xff0c;详细分析了计数器限流和令牌桶限流算法&#xff0c;这篇文章来说说熔断。 熔断和限流还不太一样&#xff0c;限流是控制请求速率&#xff0c;只要还能承受&#xff0c;那么都会处理&…

Meta AI的Nougat能够将数学表达式从PDF文件转换为机器可读文本

大多数科学知识通常以可移植文档格式&#xff08;PDF&#xff09;的形式存储&#xff0c;这也是互联网上第二突出的数据格式。然而&#xff0c;从这种格式中提取信息或将其转换为机器可读的文本具有挑战性&#xff0c;尤其是在涉及数学表达式时。 为了解决这个问题&#xff0c…

Sharding-JDBC(九)5.3.0版本,实现按月分表、自动建表、自动刷新节点

目录 一、简介二、Maven依赖三、配置文件application.ymlsharding.yaml 四、代码实现1.自动建表、自动刷新节点思路2.创建表结构3.TimeShardingAlgorithm.java 分片算法类4.ShardingAlgorithmTool.java 分片工具类5.ShardingTablesLoadRunner.java 初始化缓存类6.SpringUtil.ja…

xss前十二关靶场练习

目录 一、xss原理和分类 1.原理 2.分类&#xff1a;xss分为存储型和反射型以及dom型 &#xff08;1&#xff09;反射性 &#xff08;2&#xff09;存储型 &#xff08;3&#xff09;dom型 二、靶场关卡练习​编辑 1.第一关 2.第二关 3.第三关 4.第四关 5.第五关 6…

flutter plugins插件【三】【Flutter Intl】

3、 Flutter Intl 多语言国际化 在Android Studio中菜单Tools找到flutter intl创建多语言配置。 创建后会在pubspec.yaml出现 flutter_intl:enabled: true 在工程的lib会生成l10n与generated文件夹 l10n包含 intl_en.arb intl_zn.arb 我们在intl_en.arb添加 { home: &quo…