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是开源的,稳定版本非常可靠。