内容概要
Redis是什么
- Redis -
REmote DIctionary Server
- Redis是一个使用
ANSI C
语言编写的开源数据库 - 高性能的
key-value
数据库 - 内存数据库,支持数据持久化
- 提供了多种编程语言的客户端
- 从2010年3月15日起,Redis的开发工作由
VMware
主持 - 从2013年5月开始,Redis的开发由
Pivotal
赞助
官网:https://redis.io/
中文官网:http://www.redis.cn/
Redis的前世今生
redis的作者,叫Salvatore Sanfilippo
,来自意大利的西西里岛,2008年这个作者在做一个网站实时统计系统LLOOGG,就是用来统计用户访问网站的记录,最开始采用的是MySQL来实现,可能是由于MySQL的特性不太适用于这个场景,或者是当时机器不太好,导致他未能实现这个功能,所以他就开发了redis第一个版本来实现这个功能。
Redis的作者并不满足只将redis用于这一款产品,而是希望有更多的人来使用它,于是同一年将Redis开源发布,短短几年时间Redis就在国内外拥有了庞大的用户群体。直到今天,Redis仍然是一个非常优秀的存储服务系统。
谁在使用Redis
假如说我们现在问Redis作者一个问题,有哪些公司在使用Redis,我想他可能会开玩笑的说,Who is not using Redis?言下之意难道还有公司不在使用Redis吗。当然这也只是一句玩笑,但是从侧面证明Redis的使用确实是非常广泛的。来看一下国内外有哪些大公司在使用Redis,如图所示
Redis特性
在下一小节我们会对Redis特性进行详细说明
Redis数据结构
如图是Redis内部使用的一个redisObject
对象的结构,redis使用redisObject
表示所有的key和value。
Redis数据类型有:string
(字符串)、list
(链表)、set
(无序集合)、sorted set
(有序集合)、hash
(散列类型)
Redis典型使用场景
缓存系统
来看一个典型的场景,一个用户访问一个App Server
,首先App Server
会从cache
中去获取,如果cache
中有需要的数据,就直接返回给App Server
,然后返回给用户。
如果cache
中没有会从数据源Storage
中去获取真实数据,为了下次方便在cache
中获取相同的数据,我们会将Storage
中的数据存到cache
中,然后最终将Storage
中的数据返回给用户。
实际当中cache可以是很多种类型,例如本地缓存、memcache等,这里我们就使用Redis来表示。
计数器
如图像微博的转发数和评论数,都是可以使用Redis来完成这样一个功能,redis有提供incr
这样的命令可以在单线程下非常高效的进行计数,而且不会有计数错误的问题。所以像很多视频网站都会使用redis来对视频的播放数来进行一个记录,这些计数对产品决策以及上层的决策是非常有帮助的。
消息队列系统
消息队列系统在很多的公司已经成为项目中开发的一个标配,成熟的消息队列系统有很多,例如activemq、rabbitmq等。
而Redis也提供了像发布订阅、阻塞队列来实现类似的模型。在实现一些对消息队列功能不是很强要求的一些系统时,可以使用Redis来实现。
排行榜
Redis也可以实现类似排行榜的功能,Redis提供了一个有序集合对完成排行榜这样的功能是非常有帮助的。
社交网络
可以说Redis和社交网络是天然吻合的,很多媒体社交功能都可以使用redis实现,例如粉丝数、关注数、共同关注、时间轴列表等。
实时系统
最典型的如布隆过滤器,可以使用Redis提供的位图功能来实现布隆过滤器这样的功能,在对于一些垃圾邮件过滤、实时系统的处理会非常有帮助。
网友评论