Redis是一个开源的高性能键值对数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,并借助许多高层级的接口使其可以胜任如缓存,队列系统等不同的角色。
使用者:新浪微博,知乎,街旁,GitHub,Stack Overflow,Instagram
特性:

(1)存储结构:
有过脚本语言编程经验的读者对字典(或称映射,关联数组)数据结构一定很熟悉,如代码dict[“key” ] = “value” 中 dict 是一个字典结构变量,字符串”key”是键名,而”value”是键值,在字典中我们可以获取或设置键名对应的键值,也可以删除一个键。
Redis 是 Remote Dictionary Server(远程字典服务器)的缩写,它以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。同大多数脚本语言中的字典一样,Redis字典中的键值出了可以是字符串,还可以是其他数据类型。到目前为止Redis支持的键值数据类型如下:
字符串类型
散列类型
列表类型
集合类型
有序集合类型

(2)内存存储与持久化
Redis数据库中的所有数据都存储在内存中。由于内存的读写速度远快于硬盘,因此Redis在性能上对比其他基于硬盘存储的数据库有非常明显的优势,在一台普通的笔记本电脑上,Redis可以在一秒内读写超过十万个键值。
将数据存储在内存中也有问题,例如,程序退出后内存中的数据会丢失。不过Redis提供了对持久化的支持,即将可以内存中的数据异步写入到硬盘中,同时不影响继续提供服务。

(3)功能丰富
Redis虽然是作为数据库开发的,但由于其提供了丰富的功能,越来越多的人将其用作缓存,队列系统等。
Redis可以为每个键设置生存时间(Time To Live),生存时间到期后键会自动被删除。这一功能配合出色的性能让Redis可以作为缓存系统来使用,而且由于Redis支持持久化和丰富的数据类型,使其成为了另一个非常流行的缓存系统Memcached的有力竞争者。
作为缓存系统,Redis还可以限定数据占用的最大内存空间,在数据达到空间限制后可以按照一定的规则自动淘汰不需要的键。
除此之外,Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易地实现一个高性能的优先级队列。同事在更高层面上,Redis还支持”发布/订阅”的消息模式,可以基于此构建聊天室等系统。

(4)简单稳定
即使功能再丰富,如果使用起来太复杂也很难吸引人。Redis直观的存储结构使得通过程序与Redis交互十分简单。在Redis中使用命令来读写数据,命令语句之于Redis就相当于Sql语言之于关系数据库。Redis提供了一百多个命令,听起来很多,但常用的却只有十几个,并且每个命令都很容易记忆。