Redis的基本使用命令(GET,SET,KEYS,EXISTS,DEL,EXPIRE,TTL,TYPE)

embedded/2024/11/24 9:59:28/

目录

SET

GET

KEYS 

EXISTS 

DEL

EXPIRE 

TTL 

redis%E4%B8%AD%E7%9A%84%E8%BF%87%E6%9C%9F%E7%AD%96%E7%95%A5%E6%98%AF%E6%80%8E%E4%B9%88%E5%AE%9E%E7%8E%B0%E7%9A%84%EF%BC%88%E9%9D%A2%E8%AF%95%EF%BC%89-toc" style="margin-left:0px;"> 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:1user:abc等都符合这个模式。
  • ?匹配一个任意的字符。例如,keys user:??会匹配像user:12user: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%E4%B8%AD%E7%9A%84%E8%BF%87%E6%9C%9F%E7%AD%96%E7%95%A5%E6%98%AF%E6%80%8E%E4%B9%88%E5%AE%9E%E7%8E%B0%E7%9A%84%EF%BC%88%E9%9D%A2%E8%AF%95%EF%BC%89" style="background-color:transparent;"> redis中的过期策略是怎么实现的(面试)

惰性删除(Lazy Deletion):

  • 当客户端访问一个键时,Redis 会检查这个键是否已经过期。如果键已经过期,那么在执行相应的操作(如GETSET等)之前,Redis 会先删除这个过期的键,然后返回键不存在的结果(如nil)。
  • 例如,当执行GET key操作时,Redis 内部会有一个检查机制,先判断键是否过期。如果key已经过期,Redis 会执行删除操作,然后返回nil,就好像这个键从来不存在一样。

 定期删除

  • Redis 会定期从设置了过期时间的键中随机抽取一部分键进行检查,将其中过期的键删除。这个检查过程是在 Redis 的内部循环事件(Event Loop)中进行的,有一定的时间间隔和检查数量限制。
  • 具体来说,Redis 会使用一个近似的 LRU(Least Recently Used)算法来确定要检查的键。它会维护一个过期键的样本池,每次从这个样本池中抽取一定比例的键进行检查。例如,可能会每次抽取 100 个键进行检查,发现过期的键就立即删除。
  1. Redis 过期策略的综合应用

    • 在实际的 Redis 应用中,惰性删除和定期删除是结合使用的。这种综合策略的目的是在保证内存使用效率的同时,尽量减少对系统性能的影响。
    • 例如,对于一个高流量的缓存系统,大部分时间依靠惰性删除来处理过期键,因为缓存数据通常是频繁访问的,过期键在被访问时能够及时被删除。同时,定期删除机制会在后台默默地工作,定期清理那些长时间未被访问的过期键,以防止内存占用过多。通过这种方式,Redis 能够在高效利用内存和提供高性能服务之间取得平衡。

结语: 写博客不仅仅是为了分享学习经历,同时这也有利于我巩固知识点,总结该知识点,由于作者水平有限,对文章有任何问题的还请指出,接受大家的批评,让我改进。同时也希望读者们不吝啬你们的点赞+收藏+关注,你们的鼓励是我创作的最大动力! 


http://www.ppmy.cn/embedded/140097.html

相关文章

HarmonyOs鸿蒙开发实战(20)=>一文学会基础使用组件导航Navigation

敲黑板,以下是重点技巧。文章末尾有实战项目效果截图及代码截图可参考 1.概要 Navigation是路由导航的根视图容器Navigation组件主要包含​导航页(NavBar)和子页(NavDestination),导航页不存在页面栈中&am…

Python数据结构之链表

一、链表 1、目的 解决顺序表存储数据有上限,并且插入和删除操作效率低的问题。 2、概念 链表:链式存储的线性表,使用随机的物理内存存储逻辑上连续的数据。 链表的组成:由一个个结点组成 结点:由数据域和链接域组…

用Python爬虫“偷窥”1688搜索词推荐:一场数据的奇妙冒险

在这个信息爆炸的时代,数据就像是藏在深海里的宝藏,等待着勇敢的探险家去发掘。今天,我们将化身为数据海盗,用Python作为我们的船只,航向1688的海域,去“偷窥”那些神秘的搜索词推荐。准备好了吗&#xff1…

观察者模式和订阅模式

观察者模式和订阅模式在概念上是相似的,它们都涉及到一个对象(通常称为“主题”或“发布者”)和多个依赖对象(称为“观察者”或“订阅者”)之间的关系。然而,尽管它们有相似之处,但在某些方面也…

深度学习每周学习总结J6(ResNeXt-50 算法实战与解析 - 猴痘识别)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 目录 0. 总结ResNeXt基本介绍 1. 设置GPU2. 导入数据及处理部分3. 划分数据集4. 模型构建部分5. 设置超参数:定义损失函数&…

LeetCode //C - 468. Validate IP Address

468. Validate IP Address Given a string queryIP, return “IPv4” if IP is a valid IPv4 address, “IPv6” if IP is a valid IPv6 address or “Neither” if IP is not a correct IP of any type. A valid IPv4 address is an IP in the form “ x 1 . x 2 . x 3 . x …

多模块开发环境中@autuwired注解注入Service层、Dao层组件注入失败

目录 多模块开发下Service模块中的组件在Web模块中注入失败 多模块开发下dao模块中的接口(继承JPA/CrudRepository)组件在Web模块中注入失败(单模块开发中没有问题); 引发思考SpringBootApplication和ComponentScan比较 注意事项: 结论&a…

Lucene数据写入与数据刷盘机制

一、Lucene数据写入流程 Lucene的数据写入流程主要涉及到文档的创建、索引的添加以及最终写入磁盘的过程。 文档的创建 Lucene中的文档(Document)是索引的基本单位,每个文档都包含了一系列的字段(Field)。这些字段可以…