当前位置 博文首页 > buttercup:Redis 博文索引

    buttercup:Redis 博文索引

    作者:buttercup 时间:2021-02-18 14:29

    博文索引

    • Redis 对象与编码
    • Redis 持久化
    • Redis 主从复制
    • Redis 哨兵
    • Redis 缓存淘汰
    • 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
    bk
    下一篇:没有了