Redis是一个开源的高性能键对数据库。它通过提供多种键数据类型来适应不同场景下的存储需求,并借助许多高层级的接口使其可以胜任如缓存、队列系统等不同的角色。 1.1历史和发展 2008年,意大利一家创业公司Merzia的创始人Salvatore Sanfilippo为了避免MySQL
Redis是一个开源的高性能键值对数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,并借助许多高层级的接口使其可以胜任如缓存、队列系统等不同的角色。
1.1历史和发展
2008年,意大利一家创业公司Merzia的创始人Salvatore Sanfilippo为了避免MySQL的低性能,亲自定做一个数据库,并于2009年开发完成,这个就是Redis。
短短几年,用户数据量猛增。国内如新浪微博、街旁和知乎等,国外如GitHub、暴雪等,都是Redis的用户。
Redis的代码托管在GitHub上,开发十分活跃。
1.2特性
1.2.1存储结构
Redis是REmote DIctionary Server(远程字典服务器)的缩写,他以字典结构存储数据,并允许其他应用通过TCP协议读写字典里的内容,Redis字典中的键值除了可以是字符串外,还可以是其他数据类型,比如
字符串类型
散列类型
列表类型
集合类型
有序集合类型
这种字典形式的存储结构与常见的MySQL等关系数据库的二维表形式的存储结构有很大的差异。
(1)支持开发者可以将程序中的数据直接映射到Redis中
(2)对不同数据类型提供了非常方便的操作方式,如使用集合类型存储文章标签,Redis可以对标签进行如交集、并集这样的集合运算操作。
1.2.2内存存储与持久化
Redis数据库中的所有数据都存储在内存中,由于内存的读写速度远快于硬盘,性能明显优势,无时延情况下Redis可以在一秒内读写超过100000个键值。
将数据存储在内存中也有问题,程序退出后内存中的数据会丢失,但是,Redis提供了对持久化的支持,即可以将内存中的数据异步写入到硬盘中,同时不影响继续提供服务。
1.2.3功能丰富
用作缓存、队列系统等。
Redis可以为每个键设置生存时间(TTL),生存时间到期后键会自动被删除,这一功能配合出色的性能让Redis可以作为缓存系统来使用,成为了缓存系统Memcached的有力竞争者。
性能上:Redis是单线程模型,而Memcached支持多线程,多核服务器上后者性能好点。
但是Redis大多数情况下足够优异都不会成为瓶颈,如果需要用到高级的数据类型或者持久化功能等,Redis会更好点。
作为缓存系统,Redis还可以限定数据占用的最大内存空间,在数据达到空间限制后可以按照一定的规则自动淘汰不需要的键。
除此之外,Redis的列表类型键可以实现队列,并且支持阻塞式读取,可以很容易实现一个高性能的优先队列。同时在更高层面上,Redis还支持“发布 /订阅”的消息模式,可以基于此构建聊天室等系统。
1.2.4简单稳定
Redis提供一百多中命令,但是常用的就十几种。
Redis提供了几十种不同编程语言的客户端库,很好的封装了Redis的命令,使得在程序中与Redis交互变得更容易。
Redis使用C语言开发,代码量只有30000多行,易懂易修改,好维护。
Redis是开源的,稳定版本非常可靠。