起源
2008年,意大利一家创业公司Merzia的创始人Salvatore Sanfilippo为了避免MySQL的低性能,亲自定做一个数据库,并于2009年开发完成了Redis的最初版本。
Salvatore Sanfilippo自己也没有想到,短短的几年时间,Redis就拥有了庞大的用户群体。Hacker News在2012年发布了一份数据库的使用情况调查,结果显示有近12%的公司在使用Redis。国内如新浪微博、街旁和知乎,国外如GitHub、Stack Overflow、Flickr、暴雪和Instagram,都是Redis的用户。
特性
redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。它具有以下特性:
- 速度快,性能高
Redis的数据的数据的操作是在内存里完成的,同时再配合上高效的网络IO模型。单台每秒能处理大约10万次的QPS。 - 丰富的数据结构
redis支持string,list,hash, set, sortedset等不同的数据类型。 - 多语言支持
redis为客户端提供了一个简单的通信协议,现在主流的开发语言都提供了相应的client库,包括java,c++,python,ruby,php等。 - 持久化
redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 - 高可用,分布式
为应对海量数据存储的要求, redis提供了对高可用与分布式应用的支持,包括复制,cluster等。
典型使用场景
缓存系统
如图所示是一个典型的缓存系统,App Server 总是先访问缓存中的数据,如果不存在再从后端数据库中访问。
计数器
如图所示是微博朋友圈,其点赞数就是计算器很好的例子。利用redis的原子自增指令incr可以实现计数器的功能。消息队列系统
消息队列在日常开发中使用频率很高,Redis也提供了基于内存的消息队列。当对消息可靠性要求不高时,可以使用Redis来作为消息队列。排行榜
如图所示是微博朋友圈人气排行榜,利用redis的sortedset有序的特点,以点赞数来作为排序的参考就可以实现上述功能。实时系统
如图所示是一个实时垃圾邮件过滤邮件系统,使用redis构建一个BloomFilter可以轻松实现这样的系统。