- redis是一个全内存的数据结构服务器:
- 支持多种常用数据结构,例如list set hash map
- 多种内存索引(hash索引,skip list,rtree索引、组合索引、二级索引等)
- 可以灵活的配置数据的存储格式(是否进行压缩)
- 支持多种计算功能,如简单的集合的交并补,排序等
- redis对于持久化的支持有两种,一种AOF(append only file),一种RDB。
- AOF是每一个写请求就做一次文件系统cache write,之后的fsync的频率可以配置
- never
- 每隔一段时间
- 每次write完立刻sync;
- AOF的数据格式跟redis client/server的binary数据格式相同,没有做任何压缩。
- RBD是一种压缩的格式,可以配置每隔一定周期,主线程空闲时会fork一个子进程,由子进程负责将内存快照写入磁盘。如果数据量很大时,主进程在fork的时候时间会比较长。fork系统调用做的两件事跟内存大小有很大关系,一个是去修改原来主进程的大量的物理内存页也表的读写标记位,另外一个是为新进程创建物理页表的映射项。
- AOF是每一个写请求就做一次文件系统cache write,之后的fsync的频率可以配置
- 由此可见,redis并没有一个支持ACID的存储引擎。AOF sync always勉强算,但是性能太差。因为做写操作是redis唯一的线程,fsync返回之前无法响应读请求。
- 支持lua,可以做些简单的运算。
- redis除了做缓存,订阅发布+持久化存储,可以用redis做一个即时通讯工具的消息通讯模块。
- redis还支持订阅发布、hyperloglog、简单的事务支持、R树索引等。