如果要用Redis保存1亿个键值对,每个键值对大小为256B,该如何选择集群呢?先估算一下,这些键值对需要多少空间。1亿 * 256B 大约需要25G左右的空间来保存这些数据。
我们可以使用单台机器来保存,但是数据量如果继续增加呢?只能纵向扩展,增加内存,但这种方式是由问题的
- 单台机器数据量如此巨大,Redis进行RDB持久化时,如果全量数据做持久化,可想而知这个过程是多么的漫长;
- 单台机器不可能不限制的纵向扩展,总会遇到天花板,那后期就无法使用了。
Redis的高可靠主要体现在两方面,一是数据尽量不丢失;二是服务尽量少的中断。AOF和RDB持久化机制保证了数据不丢失,对于后者主要通过冗余设计来保证。
Redis提供了多种分布式架构设计。主要包括:主从同步、哨兵机制、分片集群方式。
主从同步
Redis提供了主从模式,以保证数据副本的一致性,主从库之间采用的是读写分离的方式。读操作在主从库上都能完成,写操作只在主库上完成,然后再将写操作从主库同步到从库。
采用读写分离后,写操作只在主库上进行,而读操作可以在任意服务上进行,这样可以分担主库的压力。如果主从库都能进行写操作,那势必会增加复杂度,如果不做一致性处理,那最终的数据就不知道应该是什么了。
主从库数据同步