2.Redis 通用命令
Redis 中最核心的两个命令:
set
作用:设置 key 对应的 value 值并存储进去。若key已包含一个值,则无论其类型如何,都会覆盖该值。在SET操作成功时,将丢弃与密钥相关联的任何先前生存时间。
对于上述这里的 key和value ,不需要加上引号,直接就是表示字符串的类型~~
当然,如果要是给 key 和 value 加上引号也是可以的(单引号或者双引号都可以)
且 redis 中的命令与mysql一致不区分大小写。
get
作用:根据 key 来获取 value值
如果当前key不存在,那么返回 nil , 和 null / NULL一个意思
基本全局命令
Redis 有5种数据结构,但它们都是键值对这种的值,对于键来说有⼀些通⽤的命令。而全局命令,就是能够搭配任意一个数据结构来使用的命令~~
keys
作用:用来查询当前服务器上匹配的key
通过一些特殊符号(通配符)来描述 key 的模样,匹配上述模样的 key 就能够被查询出来
返回所有满⾜样式(pattern)的key。⽀持如下统配样式。
- h?llo 匹配 hello , hallo 和 hxllo ? 匹配任意一个字符
- h*llo 匹配 hllo 和 heeeello *匹配0个或者多个任意字符
- h[ae]llo 匹配 hello 和 hallo 但不匹配 hillo [abcde] 只能匹配到 a b c d e,别的不行,相当于给出了固定的选项了
- h[^e]llo 匹配 hallo , hbllo,但不匹配 hello [^e] 排除e, 只有e 匹配不了,其他的都能匹配
- h[a-b]llo 匹配 hallo 和 hbllo [a-b] 匹配 a - b 这个范围内的字符,包含两侧边界
语法: keys pattern
注意事项
keys 命令的时间复杂度是 O(N)
所以,在生产环境上,一般都会禁止使用keys命令。尤其是大杀器 keys *。
生产环境上的 key * 可能会非常多!而redis是一个单线程的服务器,执行keys *的时间非常长,就使得 redis 服务器被阻塞了,无法给其他客户端提供服务!
exists
作用:判断 key 是否存在。
语法:exists key [key ...]
返回值:key 存在的个数。
时间复杂度:O(N),这里的N不是总的 key 数量N,而是你索需要查询的 key 的个数,如果是查询的key个数为1个,那么就是O(1)
del
作用:删除指定的 key
语法:del key [key ...]
返回值:删除掉的 key 的个数
时间复杂度:O(N),这里的N不是总的key数量N,而是你查询的key的个数,如果是查询的key个数为1个,那么就是O(1)
expire
作用:是给指定的 key 设置过期时间,单位是秒
语法:EXPIRE key seconds
与其相对应的就是pexpire,它们之间的区别是设置的单位不同,pexpire设置过期时间单位是毫秒,expire单位是秒。
ttl
作用:获取指定key的过期时间,秒级
语法:TTL key
返回值:剩余过期时间。-1表⽰没有关联过期时间,-2表⽰key不存在。
与其相对应的是pttl,单位是毫秒。
type
作用:返回key对应的value类型
语法: TYPE key
返回值: none , string , list , set , zset , hash and stream等
redis 的key 的过期策略是什么实现的
一个redis 中可能同时存在很多很多key,这些 key中可能有很大一部分都有过期时间,此时,redis 服务器咋知道那些key 已经过期要被删除,那些key还没过期?
如果直接遍历所有的key,显然是行不通的,效率非常低~~
redis 整体的策略是:
- 定期删除:每次抽取一部分,进行验证过期时间~~
- 惰性删除:假设这个 key 已经到过期时间了,但是暂时还没删它,key 还存在,紧接这后面又有一次访问,正好用到了这个key,于是这次访问就会让redis服务器触发删除key的操作,同时再返回一个nil
虽然有了上述两种策略结合,整体的效果一般~~
仍然可能会有很多过期的 key 被残留了,没有及时删除掉~~
redis为了对上述进行补充,还提供了一系列的内存淘汰策略~~
在其他博主上能看到下图这样的机制:
其中定时删除是错误的,原因如下:
1.redis 中并没有采取 定时器 的方式来实现过期 key 删除。
2.如果有多个key 过期,也可以通过一个 定时器(可以是基于 优先级队列 或者 基于 时间轮 都可以实现比较高效的定时器) 来高效/节省cpu的前提下来处理多个key~
基于优先级队列定时器设计思路
正常的队列是先进先出,而优先级队列则是按照指定的优先级先出,例如c++ STL中的priority_queue一样。
那么啥叫优先级高呢?我们可以自定义,比如再 reids 过期 key 的场景中,就可以通过 “过期时间越早,就是优先级越高”。
那么我们现在假定有很多 key 设置了过期时间,就可以把这些 key 加入到一个优先级队列中,指定优先级规则是过期时间早的先出队列,队首元素,就是最早的要过期的key
key | value |
---|---|
key1 | 12:00 |
key2 | 13:00 |
key3 | 14:00 |
此时定时器中只要分配一个线程,让这个线程去检查队首元素,看是否过期即可,如果队首元素还没过期,后续元素一定没过期!此时让 这个扫描线程不需要遍历所有的key只需要盯住队首元素即可。
另外再扫描线程检查队首元素过期时间的时候不能太频繁,此时做法就是可以根据当前时刻和队首元素的过期时间,让扫描线程进行等待,当时间到了,系统在去唤醒这个线程,此时扫描线程不需要高频扫描队首元素,把cpu的开销可以降低下来。
其中万一再线程休眠时,来了一个新的任务,是11.30要执行,那么可以再新任务添加进来的时候,先唤醒一下刚下的线程,并且重新检查一下队首元素,再根据时间差距重新调整阻塞时间即可。
基于时间轮实现的定时器思路
首先把时间划分程很多小段,假设每个单元格是100ms的间隔,当有新任务进来时,先找到要存储的单元格位置并存入,如果发现设置的时间超出对应时间轮一轮的范围只需要多旋转几轮直到找到即可,并且当每过100ms时,此时就需要检查当前格子上的每一个任务,并尝试看是否能执行当前任务。
相关文章:
![](https://img-blog.csdnimg.cn/ea0a5444f96c44468539eed4a8da1c4b.png)
2.Redis 通用命令
Redis 中最核心的两个命令: set 作用:设置 key 对应的 value 值并存储进去。若key已包含一个值,则无论其类型如何,都会覆盖该值。在SET操作成功时,将丢弃与密钥相关联的任何先前生存时间。 对于上述这里的 key和val…...
![](https://img-blog.csdnimg.cn/1d340e4604e64aee897a195b7b18b7b8.png)
【学习FreeRTOS】第18章——FreeRTOS软件定时器
1.软件定时器的简介 定时器:从指定的时刻开始,经过一个指定时间,然后触发一个超时事件,用户可自定义定时器的周期硬件定时器:芯片本身自带的定时器模块,硬件定时器的精度一般很高,每次在定时时…...
![](https://img-blog.csdnimg.cn/img_convert/956c1369947d5efab27b8d45307ed657.jpeg)
C++--两个数组的dp问题(2)
1.交错字符串 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给定三个字符串 s1、s2、s3,请判断 s3 能不能由 s1 和 s2 交织(交错) 组成。 两个字符串 s 和 t 交织 的定义与过程如下,其中每个字符串都…...
![](https://www.ngui.cc/images/no-images.jpg)
利用人工智能彻底改变库存管理:综合指南
通过本指南了解人工智能如何增强库存管理,为希望简化运营的管理者和企业主提供帮助。 库存管理是任何销售实物产品的企业的重要组成部分。它包括跟踪库存水平,预测未来需求,并确保始终有足够的产品来满足客户需求,但又不会因库存过多而浪费金钱。有效的库存管理可以显着降…...
![](https://img-blog.csdnimg.cn/c02590d4e72f4e23a81db2f091600c69.png)
连接器信号完整性仿真教程 七
本将介绍微带线及差分微带线仿真。做连接器信号完整性仿真时,有时后没法将激励端口直接设置到连接器端子上,这就需画出连接器PCB PAD,将激励端口设置在PAD的端面上,或者用引线连接PAD,将引线引出到适当的位置ÿ…...
![](https://img-blog.csdnimg.cn/1107fe22b3554edfbdfa966a6b8dfb25.png)
Wireshark数据抓包分析之UDP协议
一、实验目的: 通过使用wireshark对UDP数据包的抓取分析UDP协议的内容 二、预备知识: UDP协议的概念:UDP使用底层的互联网协议来传送报文,同IP一样提供不可靠的无连接传输服务。它也不提供报文到达确认、排序及流量控制等功能。 …...
![](https://img-blog.csdnimg.cn/5f2308166f5745499a4688be99c46f90.png)
Java小游戏
一、需求 二、思路一 HP当然是怪物的一个属性成员,而武器是角色的一个属性成员,类型可以使字符串,用于描述目前角色所装备的武器。角色类有一个攻击方法,以被攻击怪物为参数,当实施一次攻击时,攻击方法被调…...
![](https://img-blog.csdnimg.cn/e4ce049d1f8249a48a894d42f4201e55.png)
服务器Linux系统配置mysql数据库主从自动备份
服务器Linux系统配置mysql数据库主从自动备份 当数据内容越来越多的时候,数据库也变得越来越大了。如果不小心误删了,或者被黑主机了,那就什么都没有了。所以数据库的数据怎么能让它不丢失做到万无一失变得尤为重要! 我是艾西&a…...
![](https://www.ngui.cc/images/no-images.jpg)
Java通过PowerMockito和Mokito进行单元测试
PowerMockito和Mokito的概念 PowerMockito和Mockito都是Java语言中的测试框架,用于进行单元测试和集成测试。它们中的每一个都有不同的功能和应用。 Mockito是一个基于模拟的测试框架。它允许你模拟对象,在测试中隔离被测代码的依赖项。使用Mockito&am…...
![](https://img-blog.csdnimg.cn/img_convert/7c99f78d2f3bcdcc7c2181a659eb20f6.png)
数字化技术无限延伸,VR全景点亮智慧生活
随着互联网的发展,我们无时无刻不再享受着互联网给我们带来的便利,数字化生活正在无限延伸,各行各业也开始积极布局智能生活。要说智慧生活哪个方面应用的比较多,那应该就是VR全景了,目前VR全景已经被各个行业广泛应用…...
![](https://img-blog.csdnimg.cn/img_convert/e6a2c3e58ab3277bbcc05e2814419af6.jpeg)
抖音艺术签名小程序源码/艺术签名设计小程序源码/字节跳动小程序开发
最近很火的抖音艺术签名小程序源码,这是一款艺术签名设计小程序源码,字节跳动小程序开发,之适用于字节系小程序。介意请绕过! 下载地址:https://bbs.csdn.net/topics/616145725...
![](https://img-blog.csdnimg.cn/img_convert/083a99e74772c21d513856d6eb6f1105.png)
养号自动化,指纹浏览器和RPA机器人解除烦恼
在这个充满科技魔力的时代,社交媒体已经成为人们生活的一部分,而Facebook更是我们分享欢乐、联络亲友的重要平台。然而,随之而来的是一个棘手的问题:如何保持账号的活跃度,而又不被沉重的养号工作压垮?别担…...
![](https://img-blog.csdnimg.cn/8d3e069f784648b1b0bc1df179567e5c.jpeg)
ES6中promise的使用
ES6中promise的使用 本文目录 ES6中promise的使用基础介绍箭头函数function函数状态 原型方法Promise.prototype.then()Promise.prototype.catch() 静态方法Promise.all()Promise.race()Promise.any() 链式回调 基础介绍 官网:https://promisesaplus.com/ window.…...
![](https://img-blog.csdnimg.cn/17adc4e6dc1e4af5b79e76144681e3a0.png)
前端如何走通后端接口
0 写在前面 现在基本都是前后端分离的项目了,那么前端小伙伴如何获取后端小伙伴接口呢? 1 条件 同一WiFi下,让后端小伙伴分享出自己的ip地址: 步骤1:winr调出运行界面 步骤2:cmd调出命令行窗口 步骤3:…...
![](https://img-blog.csdnimg.cn/5002a344dbfe4d6e9e206a10f817e2f4.png)
iOS swift5 扫描二维码
文章目录 1.生成二维码图片2.扫描二维码(含上下扫描动画)2.1 记得在info.plist中添加相机权限描述 1.生成二维码图片 import UIKit import CoreImagefunc generateQRCode(from string: String) -> UIImage? {let data string.data(using: String.En…...
![](https://img-blog.csdnimg.cn/315b5b1462754d97a82ade9cb76d7126.png)
【马拉车算法/动态规划】最长回文字串
最长回文字串 1.问题描述2.中心扩展法(O(N^2))3.动态规划4.Manacher(马拉车算法) 1.问题描述 常用有3种算法:中心扩展法、动态规划和Manacher算法 2.中心扩展法(O(N^2)) 解释: 从中心向外扩展。 分为两种…...
![](https://www.ngui.cc/images/no-images.jpg)
什么是 fail-fast? 什么是fail-safe?
面试回答 在系统设计中,快速失效(fail-fast)系统一种可以立即报告任何可能表明故障的情况的系统。快速失效系统通常设计用于停止正常操作,而不是试图继续可能存在缺陷的过程。 其实,这是一种理念,说白了就是…...
![](https://img-blog.csdnimg.cn/img_convert/8c39ee15e5f0494a5a1730a16ae10c96.png)
第三届计算机、物联网与控制工程国际学术会议(CITCE 2023)
第三届计算机、物联网与控制工程国际学术会议(CITCE 2023) The 3rd International Conference on Computer, Internet of Things and Control Engineering(CITCE 2023) 第三届计算机、物联网与控制工程国际学术会议(CITCE 2023)…...
![](https://www.ngui.cc/images/no-images.jpg)
react antd 日期选择 WeekPicker MonthPicker 取值转为起止日期
默认WeekPicker 取值,返回的是2023年34周,这样后台用起来不方便。可以转化成指定周的起止日期 const startDate moment(weekData).day(1).format(YYYY-MM-DD); // 周一日期 const endDate moment(weekData).day(7).format(YYYY-MM-DD); // 周日日期同…...
![](https://img-blog.csdnimg.cn/a058fbadfbcd415381c4352bd6c2f2db.png)
table,设置 数据相同时, 合并列
<el-table :data"tableData" :span-method"objectSpanMethod" border style"width: 100%" show-summary><el-table-column type"index" label"序号" width"100" /><el-table-column prop"dat…...
![](https://www.ngui.cc/images/no-images.jpg)
kotlin如何接收前端传递过来的数据
Kotlin 可以使用 Spring Boot 等框架来接收前端传递过来的数据。 在 Spring Boot 中,你可以使用 RequestBody 注解来将前端传递的 JSON 格式数据转换为相应的 Kotlin 对象。 示例代码: RestController RequestMapping("/api") class UserCo…...
![](https://img-blog.csdnimg.cn/227aa9eba8774811849a47b75e3e6f12.png)
《中国区块链发展报告(2023)》发布 和数集团推动区块链发展
北京区块链技术应用协会与社会科学文献出版社日前在京共同发布《区块链蓝皮书:中国区块链发展报告(2023)》。蓝皮书归纳梳理了2022年区块链产业发展现状及趋势,并结合行业热点Web3.0、AIGC,探讨我国区块链发展的热点话…...
![](https://img-blog.csdnimg.cn/02d8ec88e03840fe987d92c609bba40b.png)
FreeSWITCH 1.10.10 简单图形化界面3 - 阿里云NAT设置
FreeSWITCH 1.10.10 简单图形化界面3 - 阿里云NAT设置 0、 界面预览1、 查看IP地址2、 修改协议配置3、 开放阿里云安全组4、 设置ACL5、 设置协议中ACL,让PBX匹配内外网6、 重新加载SIP模块7、 查看状态8、 测试一下 0、 界面预览 http://myfs.f3322.net:8020/ 用…...
![](https://img-blog.csdnimg.cn/img_convert/19f0900568c5bdc3c084dee3f46d023d.png)
Android SDK 上手指南||第五章 用户界面设计
第五章 用户界面设计 在本篇教程中我们将为应用程序项目添加布局方案,在这方面XML与Eclipse ADT接口将成为工作中的得力助手——不过在后面两节中还会用到一部分Java开发知识。XML与Java在Android平台的开发工作当中可谓无处不在,如果大家对二者还缺乏基…...
![](https://www.ngui.cc/images/no-images.jpg)
std::list和std::vector删除指定下标的元素
list和vector都可以使用erase函数移除指定下标的元素,注意输入的是迭代器,返回值为指向下一个元素的位置。: iterator erase(iterator position); iterator erase(iterator first,iterator last); 如果下标是index,直接调用即可:…...
![](https://www.ngui.cc/images/no-images.jpg)
Apache POI 以及 导出Excel表
一、Apache POI 1、介绍 Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下,POI 都是用于操作 Excel 文件。 2、Apache POI 怎么…...
![](https://img-blog.csdnimg.cn/60648827fa484a08a63a7cc6ff315b33.png)
RabbitMQ从原理到实战—基于Golang【万字详解】
文章目录 前言一、MQ是什么?优势劣势 二、MQ的用途1、应用解耦2、异步加速3、削峰填谷4、消息分发 三、RabbitMQ是什么1、AMQP 协议2、RabbitMQ 包含的要素3、RabbitMQ 基础架构 四、实战1、Simple模式(即最简单的收发模式)2、Work Queues 模型3、Publish/Subscribe…...
![](https://img-blog.csdnimg.cn/d82a6a22f06f437c8654be8d05b57302.png#pic_center)
机器学习——KNN算法
1、:前提知识 KNN算法是机器学习算法中用于分类或者回归的算法,KNN全称为K nearest neighbour(又称为K-近邻算法) 原理:K-近邻算法采用测量不同特征值之间的距离的方法进行分类。 优点:精度高 缺点&…...
![](https://img-blog.csdnimg.cn/img_convert/dc122498abb9b635b6a81df9592f3b9b.png)
Kali 软件管理测试案例
案例1 :显示目录树 tree ┌──(root㉿kali)-[~] └─# tree --help usage: tree [-acdfghilnpqrstuvxACDFJQNSUX] [-L level [-R]] [-H baseHREF][-T title] [-o filename] [-P pattern] [-I pattern] [--gitignore][--gitfile[]file] [--matchdirs] [--metafirs…...
![](https://www.ngui.cc/images/no-images.jpg)
【分布式】Zookeeper
Java开发者视角下的Zookeeper—— 在什么场景下使用,怎么用 可以参考:https://zhuanlan.zhihu.com/p/62526102 Zookeeper是什么? ZooKeeper 是一个分布式的,开放源码的分布式应用程序协同服务。ZooKeeper 的设计目标是将那些复…...
![](http://www.cnx-software.com/wp-content/uploads/2017/04/ESP8266-USB-to-Serial-Board.jpg)
网站后台添加/灰色词首页排名接单
前言 原创文章,转载引用务必注明链接。水平有限,如有疏漏,欢迎指正。 试用了一下,感觉这板子WebduinoBlockly在线开发环境,下限低、上限也低,以后肯定要刷其他固件的。举个简单的例子,WBlockly的…...
![](https://img-blog.csdnimg.cn/img_convert/328be91a9af2577d9e4595100bdbe3c9.png)
做神马网站优化排/2023年东莞疫情最新消息
PHP array_values() 函数用来获得数组中所有元素的值,语法如下:array array_values ( array $arr )参数 arr 表示被操作的数组。返回值:以索引数组的形式返回 arr 中所有元素的值。使用示例如下://键值数组$info array(name >…...
![](/images/no-images.jpg)
做设计做网站/搜索引擎关键词优化
用与改变root目录可以用pivot_root和chroot命令,但是这两者之间是有区别的pivot_root :直接将整个文件系统的root目录改为指定目录chroot :对于运行的指令以目标目录作为root目录,只影响单个进程.exec :用于结束当前执行的进程并继承其上下文,开始一个新的进程.PID不会改变. 和…...
![](https://img-blog.csdnimg.cn/img_convert/13ee93761808720f675302331e1e8a7a.jpeg)
thinkphp网站源码下载/百度搜图
2023年,低代码仍然是热点关键词,毫无疑问,我们“低代码”仍会是2023年软件行业的热门关键字。 今天探讨下传统开发跟低代码开发产品有什么区别,产品交付方面怎么样? 传统开发: 正常一个软件产品的开发周期都…...
![](https://img-blog.csdnimg.cn/7817e9ae3fe0473e821d74a5de406bf9.png)
南京高端网站建设/网络客服
Yolov5的模型定义分两个阶段,分别是基础模块设计阶段和完整模型搭建阶段。基础模块设计阶段,是基于pytorch架构的基本神经网络算子,进一步构造成具有特定功能和含义的自定义神经网络模块。完整模型搭建阶段,是通过结构化文件&…...
![](/images/no-images.jpg)
wordpress 外教 缩略图/网站搭建平台都有哪些
第二章 掌握临界知识的底层思维与方法 跳出"低水平勤奋陷阱"...