Redis 性能调优——缓存设计优化

Redis 是一个开源的高性能的 Key-Value 服务器。本篇主要介绍一下缓存的设计与优化。

1. 缓存的受益与成本

- 说明
缓存的受益 1、加速读写,通过缓存加速读写速度,例如 CPU L1/L2/L3 Cache、Linux page Cache 加速硬盘读写、浏览器缓存、Ehcache 缓存数据库结果;
2、降低后端负载,后端服务器通过前端缓存降低负载,业务端使用 Redis 降低后端 MySQL 负载等。
缓存的成本 1、数据不一致,缓存和数据层有时间窗口不一致,和更新策略有关;
2、代码维护成本增加,多了一层缓存逻辑;
3、运维成本增加。

缓存的使用场景:

  • 降低后端负载,对高消耗的 SQL,例如 join 结果集/分组统计结果缓存;
  • 加速请求响应,利用 Redis/Memcache 优化 IO 响应时间;
  • 大量写合并为批量写,例如计数器先 Redis 累加再批量写 DB。

2.单线程架构

Redis 在一个同一时间点只会执行一条命令。

大多情况下,单线程是非常慢的。Redis 单线程架构为什么这么快?

  1. 主要原因:纯内存;
  2. 非阻塞 IO,Redis 使用 Event Loop 这样的模型作为 IO 多路复用的实现,并且 Redis 自身实现了一个事件处理,将 Event Loop 连接、读写、关闭转换为自身的一个事件,不再往 IO 上浪费过多时间;
  3. 避免线程切换和竞态消耗;

单线程架构要注意什么?

  1. 一次只运行一条命令;
  2. 拒绝长(慢)命令,例如 keys、flushall、flushdb、slow lua scrip、mutil/exec、operate big value(collection);

2.缓存更新策略

策略 说明 一致性 维护成本
LRU/LFU/FIFO 算法剔除 例如 maxmemory-policy 最差
超时剔除 例如 expire 较差
主动更新 开发控制生命周期

两条建议:

低一致性:推荐最大内存和淘汰策略;
高一致性:推荐超时剔除和主动更新结合,超时剔除是给主动更新做了一个兜底,还需要最大内存和淘汰策略二次兜底。

3.缓存粒度控制

从 MySQL 获取用户信息:select * from user where id

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值