227,511
社区成员




Redis(Remote Dictionary Server)远程词典服务器是一款遵守BSD协议的开源高性能键值对(Kev-Value)存储数据库,提供了丰富的数据结构,例如Strings、Hashes、Lists、Sets、Sorted Sets等等。数据存储于内存中,支持事务、持久化、LUA脚本、发布/订阅、缓存淘汰、流技术等多种功能特性,而且还提供了主从模式、Redis Sentinel和Redis Cluster集群架构方案。
分布式缓存,挡在 MySQL 数据库之前的带刀护卫
MySQL的数据存储于硬盘,一般用于保证数据的一致性,根据28原则,80%的情况下用户的操作都是查询动作,20%的情况才是写入动作。那我们可以思考一下,查询本身就不会改变数据本身,那为什么一定要在MySQL中查询呢?
什么地方的读取和写入速度要比硬盘更快呢?肯定是内存,而Redis就是一款将数据存储于内存中的高性能键值对(Kev-Value)存储数据库。
上面这张图,给我们解释了用户查询数据的流程,MySQL完全躲在Redis后面,当有查询数据的请求时,首先看Redis中是否存在数据,如果不存在才到MySQL数据库中进行查询,同时将数据缓存至Redis中,从而使得后续的查询命令能够在Redis中直接获得结果。
内存存储和持久化(RDB+AOF),Redis 支持异步将内存中的数据写到硬盘上,同时不影响继续服务
根据分布式缓存中给出的解释,Redis中查询不到的数据会从MySQL中查询并进行缓存,由于内存中的数据在重启设备后会丢失,Redis存储在内存中的数据也是一样会全部丢失的,这将会给MySQL造成很大的压力,于是Redis就支持将内存中的数据异步缓存至硬盘上,一旦出现上述情况,Redis能够快速恢复。
通过高可用架构搭配,预防缓存穿透、击穿和雪崩
上一节点中我们聊到Redis可能会出现挂掉的情况,此时所有的压力都会直接给到MySQL,试想一下使用内存存储的Redis都挂了,MySQL能不能抗住,如果MySQL也扛不住,是不是意味着,你的网站服务就彻底挂掉了?
因此,Redis支持从单机、主从、哨兵、集群的高可用架构搭配,从而预防上述情况的出现。
支持多种数据结构,使得用户能够基于这些数据类型,快速实现不同的业务逻辑。
list和set操作,使得Redis能够作为一个很好的消息队列平台来使用,而队列功能就可以实现类似购买限制的效果。
zset数据类型能够快速实现类似月度销量排行榜、社交APP礼物排行榜、小程序投票排行榜等功能。
性能极高,读取速度是110000次/秒,写入速度是81000次/秒