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

Redis里头数据到底咋存取,简单又实用的操作指南分享

Redis就像一个超级快的高速钥匙柜,你放进去的东西都得有一把唯一的钥匙(也就是Key),然后凭钥匙来存和取,咱们不用记那些复杂的命令,就把它当成一个简单的操作就行。

第一部分:最基础的,字符串(String)的存和取

这是最常用、最简单的类型,就好像你把一个纸条放进一个带标签的格子里。

  • 存数据(SET): 命令就是 SET,你想把用户名“张三”存起来,钥匙叫“user:1001:name”,那么操作就是: SET user:1001:name 张三 这就存好了,你还可以给它加个有效期,比如10分钟后自动消失,命令就变成: SET user:1001:name 张三 EX 600 (EX后面跟的是秒数)

  • 取数据(GET): 命令就是 GET,拿着钥匙去柜子里找就行了: GET user:1001:name 如果钥匙存在,Redis就会返回“张三”;如果钥匙不对或者过期了,就返回空。

  • 来源参考: 根据Redis官方文档(Redis Commands | SET)的说明,SET命令是设置键值对的核心命令,而GET是获取键值对的核心命令。

第二部分:存多个字段的对象,用哈希(Hash)

如果一个东西信息比较多,比如一个用户有名字、年龄、城市,用很多个单独的字符串钥匙会很乱,这时候就用哈希(Hash),它就像一个大信封,钥匙是信封的名字,信封里面有很多个小纸条(字段和值)。

  • 存数据(HSET): 命令是 HSET,把用户1001的完整信息存进去: HSET user:1001 name 张三 age 30 city 北京 这一条命令就把三个字段都塞进“user:1001”这个大信封里了。

  • 取单个字段(HGET): 命令是 HGET,只想看这个用户的城市: HGET user:1001 city 返回的就是“北京”。

  • 取全部字段(HGETALL): 命令是 HGETALL,想把整个信封里的东西都倒出来看看: HGETALL user:1001 它会把这个信封里所有的字段和值一个一个地列出来。

  • 来源参考: Redis官方文档(Redis Commands | HSET)中指出,哈希是存储对象的理想选择,可以高效地访问和修改对象的个别字段。

第三部分:存列表,比如消息队列,用列表(List)

List就像一个只有一端开口的竹筒(或者两端都开口),你可以往里塞纸条,也可以从外面抽纸条,这特别适合做消息队列,比如秒杀时排队下单。

Redis里头数据到底咋存取,简单又实用的操作指南分享

  • 从左边塞进去(LPUSH): 命令是 LPUSH,有三个任务要排队: LPUSH task_queue task1 task2 task3 注意,这样塞进去的顺序是task3在最里面,task1在最外面。

  • 从右边抽出来(RPOP): 命令是 RPOP,处理任务的人从另一边抽任务: RPOP task_queue 第一次抽,拿到的是“task1”,因为它是最后被推进来的,但在出口端它是第一个,这样就实现了先进先出的队列。

  • 来源参考: 在Redis官方文档(Redis Commands | LPUSH)中,列表常被用作消息队列、时间线等场景。

第四部分:存不需要重复的集合,用集合(Set)

Set就像一个袋子,你往里面扔东西,但袋子里不允许有两个一模一样的东西,它不管顺序,只管有没有。

  • 往袋子里扔东西(SADD): 命令是 SADD,给文章1001添加标签: SADD article:1001:tags 科技 Redis 数据库 即使你重复执行“科技”,袋子里也只有一个“科技”。

  • 检查东西在不在袋子里(SISMEMBER): 命令是 SISMEMBER,检查“Redis”是不是这篇文章的标签: SISMEMBER article:1001:tags Redis 如果在,返回1;不在,返回0。

  • 取整个袋子(SMEMBERS): 命令是 SMEMBERS,看看这篇文章都有哪些标签: SMEMBERS article:1001:tags 注意,取出来的顺序是不确定的。

    Redis里头数据到底咋存取,简单又实用的操作指南分享

  • 来源参考: Redis官方文档(Redis Commands | SADD)描述集合用于存储唯一值的无序集合。

第五部分:存取带分数的排序集合,用有序集合(Sorted Set)

这个比Set高级一点,它给袋子里每个东西都贴了个分数标签,然后可以根据分数大小来排序,最适合做排行榜。

  • 存带分数的数据(ZADD): 命令是 ZADD,记录玩家的分数: ZADD player_scores 1500 张三 3200 李四 2800 王五

  • 按排名取数据(ZRANGE): 命令是 ZRANGE,想看分数从低到高的前三名: ZRANGE player_scores 0 2 WITHSCORES 它会返回“张三 1500”、“王五 2800”、“李四 3200”,如果想从高到低,就用 ZREVRANGE

  • 查看某个人的排名(ZREVRANK): 命令是 ZREVRANK,想知道李四在排行榜是第几名(从0开始算): ZREVRANK player_scores 李四 因为是从高到低排,李四分数最高,所以返回0,表示第一名。

  • 来源参考: Redis官方文档(Redis Commands | ZADD)中说明有序集合非常适合排行榜、优先级队列等场景。

几个通用的必备操作

  • 检查钥匙是否存在(EXISTS): EXISTS user:1001:name,存在返回1,不存在返回0。
  • 给钥匙设有效期(EXPIRE): EXPIRE user:1001:name 300,让这个钥匙300秒后过期。
  • 删除钥匙(DEL): DEL user:1001:name,不管里面是什么类型的数据,直接连钥匙带内容整个删掉。
  • 来源参考: 这些是Redis的通用键命令,在官方文档(Redis Commands | Keys)部分有集中说明。

就是Redis最核心、最实用的存取操作,你不用一下子全记住,只需要知道有这些“柜子”和“袋子”,需要的时候再来查这个指南,知道用哪个命令就行了,多上手练几次,自然就熟了。