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

Redis查询那些命令其实没那么难,掌握几个基础就能轻松搞定查询操作了

说到Redis,很多人觉得它是个很复杂的东西,尤其是一看到那么多命令就头大,但其实啊,你想用来做查询,也就是从里面把存进去的数据拿出来,根本用不着把上百个命令都学会,这就像你学开车,不需要先学会怎么造发动机一样,你只要掌握几个最基础、最常用的命令,大部分的查询需求就都能轻松搞定了,这些核心命令就像是你的“瑞士军刀”,虽然小巧,但功能强大。

咱们得知道Redis最基本的结构是键值对,这就好比一个超大号的储物柜,每个柜子都有一个唯一的编号(也就是键),你把东西(也就是值)放进去,想取的时候报上编号就行了,最最基础的查询命令就是GETSETSET是往里存,比如SET username "张三",就把“张三”这个值存到了“username”这个键下面,那查询呢?自然就是用GET username,Redis就会直接把“张三”还给你,简单吧?这就是最直接的查询。(来源:Redis官方文档对基本键值操作的介绍)

Redis查询那些命令其实没那么难,掌握几个基础就能轻松搞定查询操作了

世界上的数据不可能都是简单的单个字符串,我们要存一篇文章的标签,可能有“科技”、“编程”、“数据库”好几个,这时候再用一个简单的字符串就不方便了,Redis提供了“集合”这种数据类型,它最大的特点就是里面的元素是不重复的,而且没有顺序,对应的主要查询命令是SMEMBERS,你先用SADD article:1:tags 科技 编程 数据库命令给ID为1的文章加上标签,然后想查看这篇文章的所有标签,只需要SMEMBERS article:1:tags,Redis就会把这三个标签作为一个集合返回给你,你还可以用SISMEMBER命令来查询某个标签是否存在于集合中,比如SISMEMBER article:1:tags 科技,Redis会告诉你1(存在)或者0(不存在)。(来源:Redis集合数据类型常用命令)

还有一种非常常见的情况是,我们需要存一个有序的列表,比如微博的时间线、论坛的帖子列表,Redis的“列表”类型就派上用场了,它的主要查询命令是LRANGE,假设我们有一个存储最新文章ID的列表,用LPUSH news article:100 article:99往列表左边添加了文章,当你想查询最新的5篇文章时,命令是LRANGE news 0 4,这个命令的意思是,从列表“news”中,取出索引从0开始到4结束的所有元素,你看,这就轻松实现了一个分页查询的效果。(来源:Redis列表数据类型常用命令)

Redis查询那些命令其实没那么难,掌握几个基础就能轻松搞定查询操作了

有时候数据更像一张表格,比如一个用户的详细信息,有姓名、年龄、城市等,Redis的“哈希”类型就是干这个的,它非常适合存储对象,它的关键查询命令是HGETHGETALL,你用HSET user:1001 name "李四" age 28 city "北京"存了一个用户的信息,如果你只想查他的城市,就用HGET user:1001 city,Redis会返回“北京”,如果你想把这个用户的全部信息都查出来,那就用HGETALL user:1001,Redis会以字段和值一一对应的方式把所有的信息都给你。(来源:Redis哈希数据类型常用命令)

还有一个超级实用的查询技巧,就是KEYS命令,虽然官方不太建议在生产环境大量使用,但对于初学者排查问题或者数据量不大时,它非常方便,你忘了用户信息的键具体叫什么了,只记得是以“user:”开头的,你就可以用KEYS user:*这个命令,Redis会把所有以“user:”开头的键都列出来给你看,这就好比你在电脑里用“*.txt”搜索所有的文本文件一样。(来源:Redis键模式匹配查询命令)

你看,其实总结下来,用于查询的核心命令就那么几个:针对简单字符串的GET,针对集合的SMEMBERS,针对列表的LRANGE,针对哈希对象的HGETHGETALL,再加上一个找键的KEYS,你完全不用一开始就去啃那些复杂的诸如交集、并集、排序、过期时间等等高级命令,先把这几个基础命令用熟了,你就能应对超过80%的日常查询场景,Redis的查询真的没那么神秘,把它想象成一个结构清晰的智能储物柜,知道什么东西放在哪种类型的柜子里,然后用对应的钥匙去打开它,一切就都简单明了了。