Redis 博文索引
博文索引
Redis 简介
优点
-
多功能
提供了丰富的数据结构,可以满足很多实用场景,基本上能做到开箱即用
并且支持管道、事务、发布订阅、缓存过期、Lua脚本支持等高级功能 -
高性能
数据内存数据库,读写无需访问外存
单线程设计,访问内存无需线程切换与同步 -
易部署
支持持久化,方便数据恢复
主从复制,提高数据的安全性
配合 Redis Cluster 可以实现数据分片,突破单机容量限制
配合 Redis Sentinel 可以实现自动灾备,实现高可用
缺点
-
存储容量受限
作为一款内存数据库,内存始终是主要瓶颈
由于内存价格较磁盘更为昂贵,因此需要细心规划 redis 的使用 -
CPU利用率
redis 的单线程设计,会导致多核 CPU 的资源利用率不高
需要同一台机器上部署多个实例来提高 CPU 使用率 -
大规模应用有坑
运维架构不完整,缺少监控
不擅长应对高连接数 (>10K) 或大数据量 (>16G) 的场景
应用场景
-
缓存(效率至上)
单副本,关闭主从复制
关闭 AOF / BGSAVE,减少磁盘 I/O 对性能影响
节点宕机,直接切空实例(丢失部分数据) -
数据库(兼顾安全)
双副本,开启主从复制
主库关闭 AOF / BGSAVE
主挂切备,备挂换新备 -
大规模应用(横向扩展)
搭建集群,分摊压力
读写分离,以一致性换取性能
最佳实践
- 合理设计 key-space,用 db 隔离不相关数据,为横向扩容预留空间
- 严禁设置低读超时 (<200ms) 和紧密重试,避免重连风暴
- 留意 key 分布,避免出现数据倾斜
- 避免保存超过 10k 的大 value
- 设置 ttl 时引入随机性,避免大量 key 同时过期
- 避免使用部分高级功能:Transaction, Pub/Sub, Blocking API,LUA Script
- 避免使用高危命令:keys、flushdb、flushall
- bitset 注意检查长度,避免引发 OOM