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

Redis那些基础东西,先弄明白它到底是啥和怎么用

要弄明白Redis是啥,咱们可以打个最简单的比方:Redis就是一个超级快、而且功能比较特别的“大本子”或者“临时记事本”,它不是像MySQL那种用来永久存储你所有用户信息、订单数据的正式数据库,它的主要任务是帮你记住那些需要被飞快地存取、但又可以随时丢掉或重新计算出来的临时数据。

这个“大本子”有几个关键特点,理解了这几点,你就知道它大概能干啥了:

第一,快得离谱。 这是Redis最核心的优势,它为什么快?主要原因是它把所有的数据都直接放在电脑的内存里,内存就是我们常说的RAM,电脑一关机,里面的东西就没了(当然Redis有办法把数据存到硬盘上防止丢失,但主要操作都是在内存里进行的),从内存里读数据比从硬盘里读要快几百上千倍,当你需要极快的读写速度时,比如每秒要处理几万甚至几十万次请求,Redis就是首选。

Redis那些基础东西,先弄明白它到底是啥和怎么用

第二,结构简单又实用。 普通的数据库就像一张张表格,有行有列,很规整,但Redis这个“大本子”不是画格子的,它更像我们平时做笔记,有不同的记录方式,它支持几种简单的数据结构,这让它处理特定问题时特别顺手:

  • 字符串: 这是最基础的,就是存一个键值对,比如把用户ID和对应的验证码存起来:set userId:12345_captcha "8HJK9"
  • 列表: 像一个排队队伍,数据一个接一个,可以从左边或者右边放进队伍,也可以从另一边取出来,这特别适合做消息队列,比如把用户下的订单先按顺序存进一个列表里,后台程序再按顺序从这个列表里取订单来处理。
  • 集合: 像一个没有重复元素的袋子,你可以往里面扔东西,但重复的只会留一个,可以用来给文章打标签,一篇文章的所有标签存成一个集合,保证标签不重复;还可以很方便地求两篇文章的共同标签(求两个集合的交集)。
  • 有序集合: 像带分数的集合,每个元素都有一个分数值,可以根据分数从小到大排序,这个功能简直是为排行榜量身定做的,比如游戏玩家的积分排行榜,玩家ID是元素,积分是分数,可以轻松取出排名前十的玩家。
  • 哈希: 这个有点像一个小型的表格,可以存一组键值对,比如要存储一个用户的基本信息,你可以用一个键 user:1001,然后在这个键下面存一个哈希结构,里面包含 name: "张三", age: "28", city: "北京",这样获取用户所有信息时一次就能拿全,很方便。

第三,能干点“副业”。 除了上面这些基本操作,Redis还有一些挺有用的额外功能:

Redis那些基础东西,先弄明白它到底是啥和怎么用

  • 设置过期时间: 这是非常常用的一個功能,你可以给存进去的任何一个数据设置一个“保质期”,比如上面说的验证码,设置60秒后自动删除,这样你就不用写程序去手动清理了,Redis自己到点就扔,省心又省力。
  • 持久化: 虽然数据主要放在内存,但Redis也提供了机制,可以定期或者实时地把内存里的数据写到硬盘上做成一个快照,这样即使Redis服务重启了,也能从硬盘上把数据再加载回内存,防止数据完全丢失。
  • 发布/订阅: 这就像一个简单的广播系统,一个程序可以往某个“频道”发布一条消息,所有订阅了这个频道的其他程序都能立刻收到这条消息,可以用来做简单的实时通知系统。

Redis具体在什么场景下用呢?举几个最常见的例子:

  1. 缓存: 这是Redis最大量的用途,比如一个新闻网站,首页的热点新闻可能每分钟才有变化,但如果每个用户来访问都去数据库查一次,数据库压力就太大了,这时候就可以把首页的数据在Redis里存一份,设置1分钟的过期时间,接下来一分钟内,所有用户来访问,都直接从超快的Redis里读取首页,数据库就轻松了,这就是所谓的“缓存”,把经常读但又不太常变的数据放Redis里,提升访问速度,保护后端数据库。

    Redis那些基础东西,先弄明白它到底是啥和怎么用

  2. 会话存储: 你登录一个网站后,服务器需要记住你已经登录了,这个登录状态信息(会话)也可以放在Redis里,因为用户每次操作都可能要验证登录状态,对速度要求高,而且这个信息不是永久重要的,用户注销或过期后就可以删除。

  3. 排行榜: 就像前面说的,用有序集合做游戏积分榜、视频热度榜等,非常简单高效。

  4. 计数器: 比如统计文章的阅读量、网站的在线人数,因为Redis是单线程模型(避免多线程的锁竞争,这也是它快的一个原因),执行“加一”这种操作是原子性的,不会出错,非常适合做计数。

  5. 消息队列: 用列表结构实现简单的消息排队,让不同的程序之间可以异步地传递任务。

Redis不是一个万能的数据库,它更像一个功能强大的瑞士军刀,专门解决特定场景下的性能瓶颈和数据管理问题,它的核心价值就是速度灵活的数据结构,当你发现你的应用在某个地方因为读写数据库太慢而卡住了,或者需要实现一些像排行榜、秒杀计数这样需要高性能和特定数据模型的功能时,就该考虑把它请出来了。 参考和融合了Redis官方介绍、众多技术博客如菜鸟教程、阮一峰的网络日志等对Redis的普及性解释,以及《Redis设计与实现》等书籍的核心思想,并以通俗化语言呈现)