说实话,以前公司用MySQL配Memcached那套,刚开始还好,数据一上来直接裂开。
MySQL天天拆库拆表,Memcached也得跟着加机器,运维累成狗,改个结构跟打仗一样。
更离谱的是,Memcached缓存一崩或者命中率暴跌,流量哗一下全怼到数据库,DB瞬间卡死,线上事故说来就来。
还有数据不一致的问题,更新了数据库结果缓存没刷,用户看到的还是老数据,坑爹。
跨机房同步也是个头疼事,延迟高还容易丢数据。
后来各种NoSQL冒出来,看得人眼花缭乱。
其实仔细一看,大家定位不一样。
有的主打内存高速读写,比如Redis,就是把数据全放内存里跑,快是真快,断电也不怕,它还能持久化一波。
这种特别适合热点数据高频访问的场景。
还有的像MongoDB,schema-free,存JSON贼方便,自动分片,扩容轻松,适合结构经常变的业务。
再比如dynamo和bigtable那两种思路,一个去中心化靠gossip传信息,最终一致;一个中心化管全局,强一致性,写日志再合并落盘,优化写性能。
所以选型真不能瞎搞,得看业务要啥:要速度?要扩展?还是要强一致?
再说回Redis和Memcached到底咋选。
很多人说Redis就是升级版Memcached,但真不止那么简单。
Memcached轻量,纯内存k/v,多线程并发强,适合简单缓存。
但Redis牛的地方在于,不只是k/v,还能存list、set、zset、hash这些复杂结构,做限流、排行榜、队列都方便。
而且支持主从复制,数据能备份,不怕挂。
最关键它能持久化,重启后数据还能恢复,这就比Memcached强多了。
总结一句话:
如果只是想做个简单缓存加速,Memcached够用;
但如果想玩点高级功能,又要高可用、持久化、数据结构丰富,直接上Redis就对了。
MySQL天天拆库拆表,Memcached也得跟着加机器,运维累成狗,改个结构跟打仗一样。
更离谱的是,Memcached缓存一崩或者命中率暴跌,流量哗一下全怼到数据库,DB瞬间卡死,线上事故说来就来。
还有数据不一致的问题,更新了数据库结果缓存没刷,用户看到的还是老数据,坑爹。
跨机房同步也是个头疼事,延迟高还容易丢数据。
后来各种NoSQL冒出来,看得人眼花缭乱。
其实仔细一看,大家定位不一样。
有的主打内存高速读写,比如Redis,就是把数据全放内存里跑,快是真快,断电也不怕,它还能持久化一波。
这种特别适合热点数据高频访问的场景。
还有的像MongoDB,schema-free,存JSON贼方便,自动分片,扩容轻松,适合结构经常变的业务。
再比如dynamo和bigtable那两种思路,一个去中心化靠gossip传信息,最终一致;一个中心化管全局,强一致性,写日志再合并落盘,优化写性能。
所以选型真不能瞎搞,得看业务要啥:要速度?要扩展?还是要强一致?
再说回Redis和Memcached到底咋选。
很多人说Redis就是升级版Memcached,但真不止那么简单。
Memcached轻量,纯内存k/v,多线程并发强,适合简单缓存。
但Redis牛的地方在于,不只是k/v,还能存list、set、zset、hash这些复杂结构,做限流、排行榜、队列都方便。
而且支持主从复制,数据能备份,不怕挂。
最关键它能持久化,重启后数据还能恢复,这就比Memcached强多了。
总结一句话:
如果只是想做个简单缓存加速,Memcached够用;
但如果想玩点高级功能,又要高可用、持久化、数据结构丰富,直接上Redis就对了。
