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

打印 上一主题 下一主题

主题 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中
  1. redis-cli
复制代码
  1. root@iZbp122ygczhdyhc5r271kZ:~# redis-cli
  2. 127.0.0.1:6379>
  3. 127.0.0.1:6379>
  4. 127.0.0.1:6379>
  5. 127.0.0.1:6379>
  6. 127.0.0.1:6379>
  7. 127.0.0.1:6379>
复制代码

SET

   

  • SET命令用于在 Redis 中设置一个键值对。根本语法是SET key value [
  1)set方法
  1. 127.0.0.1:6379> set key1 value1
  2. OK
  3. 127.0.0.1:6379> set key2 value2
  4. OK
  5. 127.0.0.1:6379> set key3 value3
  6. OK
复制代码
2)过期时间设置(EX 和 PX) 
EX用于设置键值对的过期时间,单位是秒。
  1. 127.0.0.1:6379> set key4 value4 ex 20
  2. OK
  3. 127.0.0.1:6379> ttl key4
  4. (integer) 15
复制代码
ttl查询剩余多少秒

PX则是用于设置过期时间,单位是毫秒 
  1. 127.0.0.1:6379> set key5 value5 px 5000
  2. OK
  3. 127.0.0.1:6379> ttl key5
  4. (integer) 2
复制代码
3)条件设置(NX 和 XX)
NX(Not eXists)表现只有当键不存在时才设置键值对 
  1. 127.0.0.1:6379> keys *
  2. 1) "key3"
  3. 2) "key2"
  4. 3) "key1"
  5. 127.0.0.1:6379> set key4 value4 nx
  6. OK
  7. 127.0.0.1:6379> get key4
  8. 1) "value4"
复制代码

XX(eXists)与NX相反,只有当键已经存在时才设置键值对。 

GET

   
  GET命令用于获取指定键(key)对应的的值(value)。如果键不存在,GET命令会返回nil。
  1. 127.0.0.1:6379> get key1
  2. "value1"
  3. 127.0.0.1:6379> get key2
  4. "value2"
  5. 127.0.0.1:6379> get key3
  6. "value3"
  7. 127.0.0.1:6379> get key4
  8. (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:加上后面两个恣意字符)的键,因为?只匹配一个字符。
   
  先设置好一些值,以便演示 
  1. 127.0.0.1:6379> set heool 1
  2. OK
  3. 127.0.0.1:6379> set hello 2
  4. OK
  5. 127.0.0.1:6379> set hllow 3
  6. OK
  7. 127.0.0.1:6379> set hallo 4
  8. OK
  9. 127.0.0.1:6379> set hhhhhh 5
  10. OK
  11. 127.0.0.1:6379> set heool 6
  12. OK
复制代码


1)?匹配一个字符 
  1. 127.0.0.1:6379> keys h?llo
  2. 1) "hallo"
  3. 2) "hello"
复制代码
2)* 匹配0个或多个字符 
  1. 127.0.0.1:6379> keys h*
  2. 1) "hallo"
  3. 2) "heool"
  4. 3) "hello"
  5. 4) "hhhhhh"
  6. 5) "hllow"
复制代码
3)【abcde】只能匹配abcde,别的不可 相当与固定选项
  1. 127.0.0.1:6379> keys h[ab]llo
  2. 1) "hallo"
复制代码
4)【^e】 只有e匹配不了 其他都可以匹配
  1. 127.0.0.1:6379> keys h[^e]*
  2. 1) "hallo"
  3. 2) "hhhhhh"
  4. 3) "hllow"
复制代码
5)【a-b】可以匹配a-b区间的字符 包括俩侧
  1. 127.0.0.1:6379> keys h[a-e]llo
  2. 1) "hallo"
  3. 2) "hello"
复制代码
  注意:
  KEYS * 慎用
  因为为把全部的结果显示出来,有大概会使体系崩溃,导致全部的数据丢失
  keys的时间复杂度:O(N) 
  
EXISTS 

    在 Redis 中,exists命令用于查抄给定的一个或多个键(keys)是否存在。它返回一个整数值,表现给定键存在的数量。
  语法为exists key [key...]。
  1. 127.0.0.1:6379> keys *
  2. 1) "hallo"
  3. 2) "heool"
  4. 3) "hello"
  5. 4) "hhhhhh"
  6. 5) "hllow"
  7. 127.0.0.1:6379> exists hallo
  8. (integer) 1
  9. 127.0.0.1:6379> exists hallo heool hello
  10. (integer) 3
  11. 127.0.0.1:6379> exists a
  12. (integer) 0
复制代码
  如果存在则返回1,不存在返回0。如果同时查抄多个键,它会返回存在的键的数量。
  时间复杂度:O(1)
  
DEL

    del命令是 Redis 中用于删除一个或多个键(keys)及其对应的值(values)的命令。其语法是del key [key...]。
  1. 127.0.0.1:6379> keys *
  2. 1) "hallo"
  3. 2) "heool"
  4. 3) "hello"
  5. 4) "hhhhhh"
  6. 5) "hllow"
  7. 127.0.0.1:6379> del hallo
  8. (integer) 1
  9. 127.0.0.1:6379> del heool dello
  10. (integer) 1
  11. 127.0.0.1:6379> del hhhhhh hllow
  12. (integer) 2
  13. 127.0.0.1:6379> del a
  14. (integer) 0
复制代码
  如果键不存在,del命令会返回0,表现没有键被删除;如果键存在并乐成删除,会返回1(如果同时删除多个键,返回乐成删除的键的数量)。 
  时间复杂度:O(1)
  
EXPIRE 

   在 Redis 中,expire命令用于为一个已经存在的键(key)设置过期时间。语法为expire key seconds,此中key是要设置过期时间的键,seconds是过期时间的秒数。
  1. 127.0.0.1:6379> keys *
  2. 1) "key3"
  3. 2) "hello"
  4. 3) "key2"
  5. 4) "key1"
  6. 127.0.0.1:6379> expire key1 10
  7. (integer) 1
  8. 127.0.0.1:6379> ttl key1
  9. (integer) 6
  10. 127.0.0.1:6379> get key1
  11. (nil)
复制代码
   一旦过期时间到达,Redis 会自动删除这个键值对。
  时间复杂度:O(1)
  
TTL 

   

  • 在 Redis 中,ttl(Time To Live)命令用于获取一个键(key)的剩余生存时间(以秒为单位)。语法是ttl key。
  1. 127.0.0.1:6379> keys *
  2. 1) "key3"
  3. 2) "hello"
  4. 127.0.0.1:6379> expire hello 10
  5. (integer) 1
  6. 127.0.0.1:6379> ttl hello
  7. (integer) 6
  8. 127.0.0.1:6379> ttl hello
  9. (integer) -2
  10. 127.0.0.1:6379> ttl key3
  11. (integer) -1
  12. 127.0.0.1:6379> get hello
  13. (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 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

雁过留声

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表