论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
数据库
›
SQL-Server
›
Redis的根本使用命令(GET,SET,KEYS,EXISTS,DEL,EXPIRE, ...
Redis的根本使用命令(GET,SET,KEYS,EXISTS,DEL,EXPIRE,TTL,TYPE) ...
雁过留声
金牌会员
|
2024-11-20 05:10:44
|
显示全部楼层
|
阅读模式
楼主
主题
973
|
帖子
973
|
积分
2919
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
目录
SET
GET
KEYS
EXISTS
DEL
EXPIRE
TTL
redis中的过期策略是怎么实现的(面试)
上文介绍reids的安装以及根本概念,本章节重要介绍 Redis的根本使用命令的使用
Redis 是一个基于键值对(KEY - VALUE)存储的高性能数据库。在这种存储模式下,数据以键(KEY)和值(VALUE)的形式举行组织和存储。
KEY 是
唯一的 只对应 String类型
值(VALUE)支持多种数据类型(String,Set,Hash,List,Sorted Set.....)
redis中命令不区分大小写
进入redis中
redis-cli
复制代码
root@iZbp122ygczhdyhc5r271kZ:~# redis-cli
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379>
复制代码
SET
SET命令用于在 Redis 中设置一个键值对。根本语法是
SET key value
[
1)set方法
127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> set key2 value2
OK
127.0.0.1:6379> set key3 value3
OK
复制代码
2)过期时间设置(EX 和 PX)
EX用于设置键值对的过期时间,单位是秒。
127.0.0.1:6379> set key4 value4 ex 20
OK
127.0.0.1:6379> ttl key4
(integer) 15
复制代码
ttl查询剩余多少秒
PX则是用于设置过期时间,单位是毫秒
127.0.0.1:6379> set key5 value5 px 5000
OK
127.0.0.1:6379> ttl key5
(integer) 2
复制代码
3)条件设置(NX 和 XX)
NX(Not eXists)表现只有当键不存在时才设置键值对
127.0.0.1:6379> keys *
1) "key3"
2) "key2"
3) "key1"
127.0.0.1:6379> set key4 value4 nx
OK
127.0.0.1:6379> get key4
1) "value4"
复制代码
XX(eXists)与NX相反,只有当键已经存在时才设置键值对。
GET
GET命令用于获取指定键(key)对应的的值(value)。如果键不存在,GET命令会返回nil。
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> get key2
"value2"
127.0.0.1:6379> get key3
"value3"
127.0.0.1:6379> get key4
(nil)
复制代码
如果存在根据key值 返回对应的value
否则将返回一个空(nil)
KEYS
在 Redis 中,keys命令是一个用于查找符合特定模式(pattern)的键(keys)的命令。它返回全部与给定模式匹配的键的列表。
通配符介绍
*:可以匹配恣意数量(包括零个)的字符。比方,keys *会返回全部的键,因为它匹配任何键名。而keys user:*会返回全部以user:开头的键,像user:1、user:abc等都符合这个模式。
?:匹配一个恣意的字符。比方,keys user:??会匹配像user:12、user:ab这样长度为固定 4 个字符(user:加上后面两个恣意字符)的键,因为?只匹配一个字符。
先设置好一些值,以便演示
127.0.0.1:6379> set heool 1
OK
127.0.0.1:6379> set hello 2
OK
127.0.0.1:6379> set hllow 3
OK
127.0.0.1:6379> set hallo 4
OK
127.0.0.1:6379> set hhhhhh 5
OK
127.0.0.1:6379> set heool 6
OK
复制代码
1)?匹配一个字符
127.0.0.1:6379> keys h?llo
1) "hallo"
2) "hello"
复制代码
2)* 匹配0个或多个字符
127.0.0.1:6379> keys h*
1) "hallo"
2) "heool"
3) "hello"
4) "hhhhhh"
5) "hllow"
复制代码
3)【abcde】只能匹配abcde,别的不可 相当与固定选项
127.0.0.1:6379> keys h[ab]llo
1) "hallo"
复制代码
4)【^e】 只有e匹配不了 其他都可以匹配
127.0.0.1:6379> keys h[^e]*
1) "hallo"
2) "hhhhhh"
3) "hllow"
复制代码
5)【a-b】可以匹配a-b区间的字符 包括俩侧
127.0.0.1:6379> keys h[a-e]llo
1) "hallo"
2) "hello"
复制代码
注意:
KEYS * 慎用
因为为把全部的结果显示出来,有大概会使体系崩溃,导致全部的数据丢失
keys的时间复杂度:O(N)
EXISTS
在 Redis 中,exists命令用于查抄给定的一个或多个键(keys)是否存在。它返回一个整数值,表现给定键存在的数量。
语法为exists key [key...]。
127.0.0.1:6379> keys *
1) "hallo"
2) "heool"
3) "hello"
4) "hhhhhh"
5) "hllow"
127.0.0.1:6379> exists hallo
(integer) 1
127.0.0.1:6379> exists hallo heool hello
(integer) 3
127.0.0.1:6379> exists a
(integer) 0
复制代码
如果存在则返回1,不存在返回0。如果同时查抄多个键,它会返回存在的键的数量。
时间复杂度:O(1)
DEL
del命令是 Redis 中用于删除一个或多个键(keys)及其对应的值(values)的命令。其语法是del key [key...]。
127.0.0.1:6379> keys *
1) "hallo"
2) "heool"
3) "hello"
4) "hhhhhh"
5) "hllow"
127.0.0.1:6379> del hallo
(integer) 1
127.0.0.1:6379> del heool dello
(integer) 1
127.0.0.1:6379> del hhhhhh hllow
(integer) 2
127.0.0.1:6379> del a
(integer) 0
复制代码
如果键不存在,del命令会返回0,表现没有键被删除;如果键存在并乐成删除,会返回1(如果同时删除多个键,返回乐成删除的键的数量)。
时间复杂度:O(1)
EXPIRE
在 Redis 中,expire命令用于为一个已经存在的键(key)设置过期时间。语法为expire key seconds,此中key是要设置过期时间的键,seconds是过期时间的秒数。
127.0.0.1:6379> keys *
1) "key3"
2) "hello"
3) "key2"
4) "key1"
127.0.0.1:6379> expire key1 10
(integer) 1
127.0.0.1:6379> ttl key1
(integer) 6
127.0.0.1:6379> get key1
(nil)
复制代码
一旦过期时间到达,Redis 会自动删除这个键值对。
时间复杂度:O(1)
TTL
在 Redis 中,ttl(Time To Live)命令
用于获取一个键(key)的剩余生存时间(以秒为单位)。
语法是ttl key。
127.0.0.1:6379> keys *
1) "key3"
2) "hello"
127.0.0.1:6379> expire hello 10
(integer) 1
127.0.0.1:6379> ttl hello
(integer) 6
127.0.0.1:6379> ttl hello
(integer) -2
127.0.0.1:6379> ttl key3
(integer) -1
127.0.0.1:6379> get hello
(nil)
复制代码
比方,对于一个已经设置了过期时间的键,实行命令会返回该键剩余的生存时间秒数。如果键不存在或者没有设置过期时间,ttl命令返回-1;如果键已颠末期,ttl命令返回-2。
redis中的过期策略是怎么实现的(面试)
惰性删除(Lazy Deletion):
当客户端访问一个键时,Redis 会查抄这个键是否已颠末期。
如果键已颠末期,那么在实行相应的操作(如GET、SET等)之前,
Redis 会先删除这个过期的键,然后返回键不存在的结果(如nil)。
比方,当实行GET key操作时,Redis 内部会有一个查抄机制,
先判断键是否过期
。如果key已颠末期,Redis 会实行删除操作,
然后返回nil,就好像这个键从来不存在一样。
定期删除
Redis 会定期从设置了过期时间的键中随机抽取一部分键举行查抄,将此中过期的键删除。
这个查抄过程是在 Redis 的内部循环事件(Event Loop)中举行的,
有一定的时间间隔和查抄数量限定。
具体来说,Redis 会使用一个近似的 LRU(Least Recently Used)算法来确定要查抄的键。
它会维护一个过期键的样本池,每次从这个样本池中抽取一定比例的键举行查抄。
比方,大概会每次抽取 100 个键举行查抄,发现过期的键就立即删除。
Redis 过期策略的综合应用
在现实的 Redis 应用中,
惰性删除和定期删除是联合使用的。
这种综合策略的目的是在保证内存使用服从的同时,尽量镌汰对体系性能的影响。
比方,对于一个高流量的缓存体系,大部分时间依靠惰性删除来处置惩罚过期键,因为缓存数据通常是频仍访问的,过期键在被访问时能够及时被删除。同时,定期删除机制会在后台默默地工作,定期清理那些长时间未被访问的过期键,以防止内存占用过多。通过这种方式,Redis 能够在高效使用内存和提供高性能服务之间取得平衡。
结语:
写博客不但仅是为了分享学习经历,同时这也有利于我巩固知识点,总结该知识点,由于作者水平有限,对文章有任何问题的还请指出,担当大家的批评,让我改进。同时也盼望读者们不吝啬你们的点赞+收藏+关注,你们的鼓励是我创作的最大动力!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
雁过留声
金牌会员
这个人很懒什么都没写!
楼主热帖
XShell免费版的安装配置教程以及使用教 ...
阿里云体验有奖:如何将 PolarDB-X 与 ...
day02-代码实现01
【如何优化她】教你如何定位不合理的SQ ...
微服务大行其道的今天,Service Mesh是 ...
十年技术进阶路,让我明白了三件要事( ...
常用类-LocalDate、LocalTime、LocalDa ...
无需支付688苹果开发者账号,xcode13打 ...
鸿蒙3.0来了,这次,我真的想批评鸿蒙 ...
Elasticsearch 入门实战(5)--Java API ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
MES
网络安全
DevOps与敏捷开发
Oracle
Mysql
分布式数据库
快速回复
返回顶部
返回列表