当前位置:首页 > 问答 > 正文

Redis的数据库那些事儿,怎么查看和搞懂它到底藏了啥

Redis和我们平时用的MySQL那种表格状的数据库完全不同,它更像是一个放在内存里的超级大柜子,里面有很多不同类型的“抽屉”,每个“抽屉”都有自己的名字(就是Key),而且不同“抽屉”的构造(数据类型)也不一样,用来放不同的东西,要搞懂Redis藏了啥,关键就是学会打开这些“抽屉”看看。

第一件事:连接上Redis

在你查看任何东西之前,你得先进入Redis的大门,这通常通过一个叫redis-cli的命令行工具来完成,就像你要管理你的电脑,得先打开“命令提示符”或“终端”一样,你只需要在终端里输入redis-cli,如果Redis就在你本机上,而且用的是默认端口6379,你就可以直接连上了,如果Redis在别的机器上或者用了别的密码,你需要加上主机地址(-h)和密码(-a)等参数,连上之后,你会看到一个提示符,比如0.0.1:6379>,这说明你已经准备好了,可以开始“寻宝”了。

第二件事:认识Redis的五种主要“抽屉”类型

这是最核心的部分,Redis之所以快和好用,就是因为这些不同结构的“抽屉”,你不能用同一种方法去查看所有类型的“抽屉”,所以必须先判断你面前的Key是哪种类型。

Redis的数据库那些事儿,怎么查看和搞懂它到底藏了啥

  1. 字符串(String):这是最简单、最常用的“抽屉”,它就是一个键对应一个值,这个值可以是文本、数字甚至是图片的二进制数据,你可以用它来存用户的登录状态、一个简单的计数器或者一段缓存的内容。

    • 怎么查看:使用GET key_name命令,你有一个key叫user:1001:name,你输入GET user:1001:name,它就会直接把里面存的名字,张三”,给你显示出来。
  2. 哈希(Hash):这个“抽屉”有点像一个小型的表格,一个主Key下面,包含了多个字段(Field)和值(Value),非常适合用来存储一个对象的多个属性,比如存储一个用户的信息,用户名、年龄、城市等都可以放在同一个Hash里。

    • 怎么查看
      • 查看这个Hash的所有字段和值:HGETALL key_name,它会一下子把所有的东西都列出来。
      • 只看某个特定字段的值:HGET key_name field_name,比如HGET user:1001 age就只查看年龄。
  3. 列表(List):这个“抽屉”就是一个有序的字符串列表,你可以从左边或者右边把元素推进去或拉出来,它很像一个队列或者栈,常用来做消息队列、最新文章列表等。

    • 怎么查看:使用LRANGE key_name start stop命令,这个命令可以查看列表中指定范围内的所有元素。LRANGE news_list 0 9就是查看名为news_list的列表里,最前面10个元素(索引从0开始)。
  4. 集合(Set):这个“抽屉”的特点是里面放的元素都是唯一的,不允许重复,而且顺序是乱的,它的主要用处是存储不重复的数据,比如文章的标签、共同好友等。

    Redis的数据库那些事儿,怎么查看和搞懂它到底藏了啥

    • 怎么查看:使用SMEMBERS key_name命令,这个命令会把这个集合里所有的成员都给你列出来,但顺序是不保证的。
  5. 有序集合(Sorted Set):这是Set的升级版,它给每个元素都绑定了一个分数(Score),然后根据这个分数来为元素从小到大排序,它是实现排行榜的绝佳选择。

    • 怎么查看
      • 按分数范围查看:ZRANGE key_name start stop [WITHSCORES],加上WITHSCORES选项,它会连分数一起显示出来。
      • 按排名倒序查看(比如看排行榜前10名):ZREVRANGE key_name 0 9 WITHSCORES

第三件事:高级侦查技巧

光会看单个“抽屉”还不够,有时候我们想知道这个“大柜子”的整体情况。

  • 我怎么知道有哪些“抽屉”(Key)? 使用KEYS pattern命令,这个命令可以按照模式匹配来查找Key,比如KEYS user:*会找出所有以user:开头的Key。但是要非常小心! 如果你的Redis里Key非常多,这个命令可能会让服务器卡住一会儿,因为它会遍历所有的Key,在生产环境中要谨慎使用,一个更安全的选择是使用SCAN命令,它可以渐进式地遍历,不会阻塞服务。

    Redis的数据库那些事儿,怎么查看和搞懂它到底藏了啥

  • 我面前这个“抽屉”是哪种类型? 在你用GET命令去查一个Key之前,最好先知道它是什么类型,不然会报错,用TYPE key_name命令就可以直接告诉你这个Key是string, hash, list, set, 还是zset。

  • 这个“抽屉”有多大? 对于不同的数据类型,有不同的命令来看里面有多少个元素:

    • String(字符串):STRLEN key_name 看值的长度。
    • Hash(哈希):HLEN key_name 看有多少个字段。
    • List(列表):LLEN key_name 看有多少个元素。
    • Set(集合):SCARD key_name 看有多少个成员。
    • Sorted Set(有序集合):ZCARD key_name 看有多少个成员。
  • 这个“抽屉”什么时候过期? Redis可以给Key设置一个存活时间(TTL),用TTL key_name命令可以查看这个Key还有多少秒会过期,如果返回-2,表示这个Key已经不存在了;返回-1,表示这个Key永不过期。

总结一下

要搞懂Redis到底藏了啥,你就像是一个仓库管理员:

  1. 先用KEYSSCAN看看仓库里有哪些货架(Key)。
  2. 走到一个货架前,用TYPE命令看看它是什么类型的储物柜(数据类型)。
  3. 根据储物柜的类型,选择正确的工具(命令)打开它:GET用于单件物品,HGETALL用于小格子柜,LRANGE用于顺序排列的货架,SMEMBERS用于无顺序的收纳箱,ZRANGE用于带分数的排行榜货架。
  4. 还可以用TTL看看物品的保质期还剩多久。

通过组合使用这些简单的命令,你就能对Redis数据库里的内容了如指掌了,多在实际环境中敲命令试试,比只看理论要学得快得多。