目录
高可用(High Availability)和分布式 (Distributed)
前言
Redis是⼀种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库不同的是,Redis中的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此Redis可以满⾜很多的应⽤场景,⽽且因为Redis会将所有数据都存放再内存中,所以它的读写性能⾮常惊⼈。不仅如此,Redis还可以将内存的数据利⽤快照和⽇志的形式保存到硬盘上,这样在发⽣类似断电或者机器故障的时候,内存中的数据不会“丢失”。除了上述功能以外,Redis还提供了键过期、发布订阅、事务、流⽔线、Lua脚本等附加功能。总之,如果在合适的场景使⽤好Redis,它就会像⼀把瑞⼠军⼑⼀样所向披靡。
Redis的产生
2008年,Redis的作者Salvatore Sanfilipp在开发一个叫做LLOOGG的网站的时候,需要一个高性能的队列功能,最开始他使用的是MySQL,但是后来发现怎么优化SQL语句,网站的性能都上不去,于是自己打造了一个专属的数据库,这就是Redis的前身。
Redis的特性
Redis的8个重要特性。
速度快
正常情况下,Redis执⾏命令的速度⾮常快,官⽅给出的数字是读写性能可以达到10万/秒,当然这也取决于机器的性能,但这⾥先不讨论机器性能上的差异,只分析⼀下是什么造就了Redis如此之快,可以⼤概归纳为以下四点:
- Redis的所有数据都是存放在内存中的,表1-1是⾕歌公司2009年给出的各层级硬件执⾏速度,所以把数据放在内存中是Redis速度快的最主要原因。
- Redis是⽤C语⾔实现的,⼀般来说C语⾔实现的程序“距离”操作系统更近,执⾏速度相对会更快。
- Redis使⽤了单线程,预防了多线程可能产⽣的竞争问题。(Redis在6.0版本引⼊了多线程机制,但主要也是在处理⽹络和IO,不涉及到数据命令,即命令的执⾏仍然采⽤了单线程模式。)
- 作者对于Redis源代码可以说是精打细磨,曾经有⼈评价Redis是少有的集性能和优雅于⼀⾝的开源代码。