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

Redis查询怎么开始?一步步带你搞懂基本操作和查数据方法

想知道怎么用Redis查数据,首先得明白Redis是个啥,简单说,它就像一个超级快的“大本子”,但这个本子不是放在文件柜里,而是直接放在电脑的内存里,因为读写内存的速度比读写硬盘快成千上万倍,所以Redis特别适合用来存放那些你经常要访问、对速度要求很高的数据,比如网站的在线用户信息、购物车里的商品、或者游戏的实时排行榜。

第一步:你得先有个Redis并且连上它

你不能凭空操作Redis,首先你得在电脑上安装它,可以去Redis官网下载安装包,或者如果你用的是Mac,用Homebrew命令 brew install redis 就能装好;用Ubuntu的话,可以用 sudo apt-get install redis-server,安装好后,在终端里输入 redis-server 命令启动Redis服务。

服务启动后,别关掉这个窗口,另外打开一个新的终端窗口,输入 redis-cli 命令,看到提示符变成 0.0.1:6379> 就说明你已经成功连接到本机的Redis服务器了!这个 redis-cli 就是你用来跟Redis“大本子”对话的工具。

第二步:认识Redis里数据的几种“放法”(数据结构)

和MySQL这种用表格放数据的数据库不同,Redis里的数据有几种不同的“存放格式”,这叫数据结构,弄懂这个特别关键,因为你查数据的方法完全取决于它当初是怎么存进去的,主要的有这么几种:

  1. 字符串(Strings):这是最简单的一种,就是键值对,一个键(key)对应一个值(value),这个值可以是数字、文字甚至是一串二进制数据,你可以把用户的在线状态存成 user:1001:status "online"
  2. 列表(Lists):像一个排队队伍,数据一个接一个按顺序放进去,你可以在队伍的头或尾加人,也可以查看某一段队伍里有哪些人,常用来存消息队列、最新文章列表等。
  3. 集合(Sets):像一个没有顺序、而且成员绝不重复的袋子,你可以往里扔东西,也可以快速判断某个东西在不在袋子里,还能方便地找出两个袋子之间的共同成员(交集)、不同成员(差集)等,适合存标签、共同好友等。
  4. 有序集合(Sorted Sets):这是Sets的升级版,每个成员都带一个分数(score),可以根据这个分数来排序,这简直就是为排行榜量身定做的,比如游戏得分排行榜,成员是玩家ID,分数就是他的得分。
  5. 哈希(Hashes):这个最像一个小表格,一个键(key)下面可以存好多对字段(field)和值(value),比如存用户信息,键是 user:1001,然后里面可以存 fieldnamevalue张三fieldagevalue25,这样获取和修改用户信息就很方便。

第三步:开始动手“查”数据(基本命令)

现在你已经连上了Redis,也知道了数据大概怎么存的,就可以开始用命令查数据了,在 redis-cli 里输入命令。

  • 最基本的查:GET 如果你想查一个存成“字符串”的数据,就用 GET key,比如你之前用 SET mykey "Hello Redis" 存了一个值,现在想看看它是什么,就输入 GET mykey,它会返回 "Hello Redis",如果这个key不存在,它会返回 (nil)

  • 查哈希表里的字段:HGET 和 HGETALL 如果数据是用哈希存的,HSET user:1001 name 张三 age 25

    • 只想查这个用户的姓名:用 HGET user:1001 name,返回 "张三"
    • 想把这个用户的所有信息都查出来:用 HGETALL user:1001,它会返回所有字段和值:1) "name" 2) "张三" 3) "age" 4) "25"。
  • 查列表:LRANGE 比如你用一个列表存了最新新闻的ID:LPUSH news:latest 101 102 103(这样存进去,顺序其实是103, 102, 101)。 想查看最新的5条新闻ID:用 LRANGE news:latest 0 4,这里的 0 是起始索引(0代表第一个),4 是结束索引,它会返回从第一个到第五个元素。

  • 查集合:SMEMBERS 和 SISMEMBER 比如存了某个文章的标签:SADD article:1:tags tech redis database

    • 想看看这篇文章所有标签:用 SMEMBERS article:1:tags
    • 想判断某个标签(redis")是否在这篇文章的标签里:用 SISMEMBER article:1:tags redis,如果在返回 (integer) 1,不在返回 (integer) 0
  • 查有序集合(排行榜):ZRANGE 比如游戏得分榜:ZADD leaderboard 1000 "playerA" 800 "playerB" 1500 "playerC"。 想查排名前三的玩家(从高到低):用 ZREVRANGE leaderboard 0 2 WITHSCORESZREVRANGE 是按分数从大到小排,0 2 是索引范围,WITHSCORES 会把分数也显示出来,它会返回:1) "playerC" 2) "1500" 3) "playerA" 4) "1000" 5) "playerB" 6) "800"。

重要提醒:KEYS 命令要小心用

你可能会想,我忘了key叫啥名怎么办?Redis确实提供了一个 KEYS pattern 命令,KEYS user:* 可以找出所有以"user:"开头的key。在生产环境(正式服务器)上千万不要随便用这个命令! 因为如果Redis里的key非常多,这个命令会遍历所有key,可能导致Redis服务卡住一会儿,就像你在一个有几百万人的体育馆里用喇叭喊“名字里带‘张’的请起立”一样,会非常耗时,替代方案是使用 SCAN 命令,它可以分批慢慢地找,不会阻塞服务。

Redis查询的核心就是:先连上 redis-cli,然后根据你的数据是用哪种结构存的(字符串、哈希、列表等),选择对应的命令(GET、HGET、LRANGE等)来查。 多在你自己电脑上的 redis-cli 里敲命令试试,是熟悉这一切最快的方法。

Redis查询怎么开始?一步步带你搞懂基本操作和查数据方法