Redis:常用命令

Redis:常用命令

码农世界 2024-05-18 前端 86 次浏览 0个评论

文章目录

  • get和set
  • Redis全局命令
    • keys
    • exists
    • del
    • expire
    • ttl
    • Redis的删除策略

      本篇开始对于Redis的命令进行学习,当然只是学习一些常见的

      get和set

      Redis中是使用键值对来进行存储的,所以get是根据key来取Value的,而set是来设置键值对的

      set

      set [key] [value]
      

      实例

      127.0.0.1:6379> set key1 value1
      OK
      127.0.0.1:6379> set key3 value3
      OK
      127.0.0.1:6379> set 'key2' "value2"
      OK
      

      Redis不区分大小写

      get

      get [key]
      
      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 key100
      (nil)
      

      Redis全局命令

      keys

      Redis可以看成是一个网络版本的哈希表,它支持很多的数据结构,key固定是字符串,但是Value可以是多种多样的数据结构,下面讲述的就是全局命令,可以搭配各种各样的数据结构

      keys [pattern]
      

      该命令可以看到的是每一个key的模样,同时也可以允许存在通配符等

      pattern是什么?

      表示的意思是,一个包含特殊符号的字符串,存在的意义是来描述,找的字符串是什么样子的

      h?llo 匹配 hello , hallo 和 hxllo
      h*llo 匹配 hllo 和 heeeello
      h[ae]llo 匹配 hello 和 hallo 但不匹配 hillo
      h[^e]llo 匹配 hallo , hbllo , ... 但不匹配 hello
      h[a-b]llo 匹配 hallo 和 hbllo
      

      先插入几个键值对:

      127.0.0.1:6379> set hello 1
      OK
      127.0.0.1:6379> set hallo 2
      OK
      127.0.0.1:6379> set hbllo 3
      OK
      127.0.0.1:6379> set hllo 4
      OK
      127.0.0.1:6379> set heeeeeeeeeeeeelo 5
      OK
      
      1. ?匹配的是任意一个字符
      127.0.0.1:6379> keys h?llo
      1) "hallo"
      2) "hello"
      3) "hbllo"
      
      1. * 匹配的是0个或者任意字符
      127.0.0.1:6379> keys h*llo
      1) "hllo"
      2) "hallo"
      3) "hello"
      4) "hbllo"
      
      1. [abcde]表示匹配这里面的某个选项
      127.0.0.1:6379> keys h[abc]llo
      1) "hallo"
      2) "hbllo"
      
      1. [^e] 表示排除e,除了e都行
      127.0.0.1:6379> keys h[^a]llo
      1) "hello"
      2) "hbllo"
      
      1. [a-b] 表示的是a-b范围内的字符都行
      127.0.0.1:6379> keys h[a-b]llo
      1) "hallo"
      2) "hbllo"
      

      注意事项

      keys命令的时间复杂度是O(N),所以一般会禁止使用keys,尤其是keys *

      127.0.0.1:6379> keys *
      1) "hllo"
      2) "heeeeeeeeeeeeelo"
      3) "hallo"
      4) "hello"
      5) "key1"
      6) "key3"
      7) "hbllo"
      8) "key2"
      

      Redis是单线程的,所以当执行keys的时候可能会导致阻塞,这是一件不可容忍的事,因此一般禁止

      exists

      exists key [key ...]
      
      127.0.0.1:6379> keys *
      1) "hllo"
      2) "heeeeeeeeeeeeelo"
      3) "hallo"
      4) "hello"
      5) "key1"
      6) "key3"
      7) "hbllo"
      8) "key2"
      127.0.0.1:6379> exists hello hallo
      (integer) 2
      

      那为什么要这样进行一次请求多个呢?这是考虑到了网络服务,Redis和HTTP的请求响应机制是一样的,这就意味着如果每次都请求,会消耗一定的网络资源,但是如果采用一次去检查多个的情况,就不会这样,相当于会节省一部分的网络资源

      del

      删除指定key

      这个命令相对比较简单,这里就不再进行赘述了,就是一个删除的命令

      127.0.0.1:6379> keys *
      1) "hllo"
      2) "heeeeeeeeeeeeelo"
      3) "hallo"
      4) "hello"
      5) "key1"
      6) "key3"
      7) "hbllo"
      8) "key2"
      127.0.0.1:6379> del hllo hallo
      (integer) 2
      127.0.0.1:6379> keys *
      1) "heeeeeeeeeeeeelo"
      2) "hello"
      3) "key1"
      4) "key3"
      5) "hbllo"
      6) "key2"
      

      这里值得注意的是,Redis数据被删除,要看它是否是一个数据库,如果它作为缓存,那问题不算特别大,但是如果是作为数据库,那就相当于在MySQL中丢失了数据,这就是一个比较严重的错误了

      针对于Redis的误删数据的错误,要根据具体情况具体分析

      expire

      expire的作用是给指定的key设置过期时间,key存活时间超过这个指定的值,就会被自动删除

      expire key seconds
      

      要注意的是,expire的key值,必须得是已经存在的key值,如果不是存在的key值是不可以被设置过期时间的

      127.0.0.1:6379> keys *
      1) "heeeeeeeeeeeeelo"
      2) "hello"
      3) "key1"
      4) "key3"
      5) "hbllo"
      6) "key2"
      127.0.0.1:6379> expire key2 3
      (integer) 1
      127.0.0.1:6379> keys *
      1) "heeeeeeeeeeeeelo"
      2) "hello"
      3) "key1"
      4) "key3"
      5) "hbllo"
      6) "key2"
      127.0.0.1:6379> expire key2 3
      (integer) 0
      127.0.0.1:6379> keys *
      1) "heeeeeeeeeeeeelo"
      2) "hello"
      3) "key1"
      4) "key3"
      5) "hbllo"
      

      ttl

      查询过期时间的命令叫做ttl,全称是time to live

      ttl key
      

      表示的是key还剩余的时间,如果返回-2,表示这个值已经不存在了,如果返回值是-1表示这个key还没有关联时间

      Redis的删除策略

      对于删除来说,到底该选用哪种策略呢?下面给出两种策略

      先说一下惰性删除:

      假设现在这个key已经到达过期时间了,但是暂时还没删除它,key还是存在的,当下一次进行访问的时候,正好用到了这个key,此时就会让Redis触发删除的操作,并且返回一个nil

      下面说一下定期删除:

      定期删除,就是在一个定期时间内进行检测,但是定期删除是要有一定条件的,原因在于Redis是一个单线程的程序,如果扫描key的时间太多,就会导致被阻塞,形成的效果和keys * 差不多

转载请注明来自码农世界,本文标题:《Redis:常用命令》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,86人围观)参与讨论

还没有评论,来说两句吧...

Top