博文索引

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

最新文章

  1. angular学习笔记(二十八)-$http(6)-使用ngResource模块构建RESTful架构
  2. 深入理解使用ListView时ArrayAdapter、SimpleAdapter、BaseAdapter的原理
  3. DBCP数据源连接池实现原理分析
  4. [转] easyui 获取数据表格中选中行的数据 Get selected row data from...
  5. 浪潮之巅IT那点事之一——AT&amp;T的兴衰
  6. 【codevs1191】数轴染色 线段树 区间修改+固定区间查询
  7. Floyd最短路径算法
  8. 【HDOJ】4426 Palindromic Substring
  9. [Effective C++ --012]复制对象时勿忘其每一个成分
  10. 明解C语言,练习13-3,从文件中读入个人信息,按身高排序后显示
  11. 数学 ZJOI 2012 数列
  12. python安装zlib一直无效
  13. 集成框架 javaweb开发平台ssmy_m(生成代码) java struts2 mybatis spring maven jquery
  14. 3D人脸识别预处理,3D face recognition preprocess
  15. CSS学习中的瓶颈期深入分析
  16. 盘点CSS中可以和不可以继承的属性
  17. -bash: fork: Cannot allocate memory 问题的处理
  18. 使用 FFMPEG 命令为视频嵌入字幕
  19. vue 路由参数
  20. 二、认识Xcode(第一个工程:Hello world)

热门文章

  1. codevs 1344 模拟退火
  2. Mycat安装并实现mysql读写分离,分库分表
  3. Zookeeper+Kafka+Spark streaming单机整合开发
  4. Java并发包源码学习系列:阻塞队列实现之LinkedTransferQueue源码解析
  5. JDK-7新特性,更优雅的关闭流-java try-with-resource语句使用
  6. .net core Api 部署到Linux
  7. Maven三种打包方式jar war pom
  8. HDU 6900 Residual Polynomial【分治 NTT】
  9. Codeforces Round #655 (Div. 2) C. Omkar and Baseball
  10. 在eclipse完成对Java_web项目里面资源文件的读取