博文索引

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

版权声明:本文为buttercup原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/buttercup/p/14151217.html