Redis是一个非常快速和强大的存储(持久化)系统,它最大的特点是支持丰富的数据结构。
由于Redis本身的限制,它所能处理的数据必须完全放在内存中,而硬盘上的数据是内存数据的一个镜像,所以,限制了它的容量不能超过内存的容量。当前服务器内存以32G为普遍情况,96G算较好,如果一个系统要存储1T的数据,那么必须用上10台服务器,硬件成本非常高。对于一个100万活跃用户的系统,平均每人每天产生1K数据,便需要1G的存储空间,这仅相当于每个用户每天只发10条微博或者10条聊天信息,真正流行的系统将远远超过这个数据规模。
一般数据达到几百M或者1G时,redis必须且只能开启aof操作日志异步写硬盘的持久化模式,由于用户记录数据变更日志的aof文件体积增加比较严重,必须定期对aof文件进行收缩(rewrite)。收缩的过程其实是将内存数据镜像到硬盘的过程,redis主进程需要fork一个进程出来,虽然操作系统有写时拷贝功能,但仍然要为fork出来的进程保留足够的内存空间,所以redis只能使用内存容量的50%。
在写aof文件时,redis完全没有任何速度控制策略,经常导致硬盘读写占满,其它进程一旦涉及到文件操作,都将被阻塞住。
redis自身支持主从模式,可以方便的进行数据备份,避免单点失败造成数据丢失,但是当网络出现抖动时,可以导致主从之间发生一次全量复制,这对网络带宽是一个打击。
redis是一个单机的存储方案,当数据超过单台服务器的内存容量时,必须由软件的设计者在软件逻辑层设计出一套数据拆分的方案。
结论:
redis不适合作为海量数据存储方案。redis适合在数据规模较小,性能要求较高的条件下应用。
时间: 2024-10-02 19:00:43