误区一:Redis是单线程的,所以性能不高。其实Redis的主线程确实是单线程处理命令,但它还有后台线程处理fork、AOF、惰性删除等操作,IO多路复用让单线程高效处理高并发。别以为单线程就慢了,它每秒能处理上百万QPS。
常见误区详解
误区二:Redis适合所有缓存场景。很多人把Redis当万能缓存库,但它内存数据库,数据全在内存,冷数据多时内存爆炸。适合热点数据,不适合大批量历史数据,用磁盘数据库更好。
误区三:KEYS * 命令很无害。在生产环境用KEYS * 就是灾难,它会阻塞主线程扫描全库,库大时几分钟不动。改用SCAN命令,逐步迭代不阻塞。
误区四:Redis持久化选一个就行。RDB快但可能丢数据,AOF安全但写盘慢。实际用两者结合,AOF重写时用RDB,互补优点。别只选一个极端。
误区五:Pipeline是批量操作神器。其实Pipeline只是把多命令打包发过去,减少网络RTT,但Redis服务器还是串行执行。不是真正并行,适合网络瓶颈场景。
误区六:所有数据都存Redis。Redis内存贵,存太多数据成本高,还容易内存碎片。不是所有东西都该存,评估数据量和访问模式。
误区七:忽略了内存碎片。Redis用jemalloc,但hash表扩容收缩时碎片率高到50%以上,看起来内存够用实际已满。定期用MEMORY PURGE清理。
误区八:主从复制就高可用了。主从只读写分离,主挂了从不能自动接管,必须哨兵或Cluster才高可用。别指望简单复制扛住故障。
FAQ
Q: Redis单线程为什么还那么快?
A: 因为非阻塞IO多路复用,事件驱动模型,一个线程高效处理所有连接。
Q: 怎么避免KEYS命令阻塞?
A: 用SCAN命令带cursor逐步扫描。
Q: Redis持久化怎么选?
A: RDB+AOF结合用。
Q: 内存满了怎么处理?
A: 配置maxmemory和eviction策略如allkeys-lru。