Redis是一个开源的使用ANSI C编写的key-value数据库。和常见缓存系统Memcached类似,Redis的所有数据操作都在内存中完成,所以Redis的读写性能相当高。不同于MenCached,Redis不是一个缓存系统,而是一个独立的内存数据库系统。Redis实现了数据持久化,周期性地把数据写入磁盘或者把修改操作写入追加的记录文件。从2010年3月15日起,Redis的开发工作由VMware主持。
丰富的value类型
作为key-value型数据库,Redis也提供了key到value的映射关系。但不同于key-value型数据库,Redis中的value除了常规的数值或字符串,还可以是以下形式之一:
- Lists(列表)
- Sets(集合)
- Sorted sets(有序集合)
- Hashes(哈希表)
数据持久化
数据持久化是内存数据库的必备功能,Redis提供RDB快照和AOF操作日志记录两种方式且持久化机制很灵活。
1. RDB快照
RDB快照方式就是将当前整个数据集按某个时间点进行一次保存,将所有数据写入RDB文件,然后通过fsync将文件持久化到磁盘。Redis借助了fork命令的copy on write机制。在生成快照时,Redis首先fork出一个子进程,然后在子进程中遍历所有的数据,将数据写成为文件。Redis提供用户配置接口,用以决定RDB快照生成的时机,比如10分钟内有100次或一小时内有1000次写入则生成RDB快照,也可以多个规则一起实施。RDB文件不仅用于恢复数据库,也被用于实现Redis主从同步。
2. AOF
AOF是Append Only File的缩写,顾名思义,它是一个追加写入的一个日志文件。AOF操作日志是最简单的日志记录,它记录Redis从第一次启动到当前时刻的所有写操作,生成一份完整的操作日志。从安全性方面讲,AOF自然比RDB更为安全,但是AOF存在两个问题。第一,AOF文件会越变越大;第二,写性能受损。对于第一个问题,Redis提供了AOF Rewrite功能,其功能就是重新生成一份AOF文件,新的AOF文件中一条记录的操作只有一次,而不像老文件那样可能记录了对同一个值的多次操作。对于第二个问题,这是无法避免的。不过,Redis提供了三种不同的配置类控制AOF日志写入磁盘的次数,分别是:
- appendfsync always:每次写日志都调用fsync同步操作日志到硬盘;
- appendfsync everysec:每秒调用一次fsync同步操作日志到硬盘;
- appendfsync no:不主动调用fsync.
读写性能
提供的API语言
Redis对常用编程语言均提供了API,包括: C、C++、Java、Javascript、C#、Objective-C、Perl、PHP、Python、Ruby、Scala、Tcl、Erlang等。
应用
使用Redis的企业/应用有:新浪微博、GitHub、Engine Yard等。
原文链接:https://www.f2er.com/nosql/204321.html