Cache (缓存) & Buffer (缓冲)

创建时间:
2018-10-10 08:47
最近更新:
2018-10-10 08:47

Resource

  1. Cache 和 Buffer 都是缓存,主要区别是什么
  2. 缓存方案设计 经验之谈 - 丁香园 CTO,前 JavaEye 网站创始人 Tony Praise
  3. .NET 缓存模块设计 Tony Praise - 上层封装,与具体的缓存实现无关
  4. .NET 缓存管理框架 CacheManager
  5. 缓存更新的套路
  6. Web 开发后端缓存思路

Resource - Contrast

  1. MongoDB 或者 Redis 可以替代 Memcached 吗
  2. Mongodb Redis Memcached 的对比
  3. Redis VS. Memcached 均不适合数据量高于 1 千万条,且保证数据完整的 key-value 存储
  4. memcached 和 redis 两大数据库缓存系统实现对比

网摘 - 更新缓存的方案

以 Memcached 为例,增改删一般采用 lazy load 策略,即新增时只写入数据库,并不会马上更新 Memcached,而是等到再次读取时才会加载到 Memcached 中,修改和删除操作也是更新数据库,然后将 Memcached 中的数据标记为失效,等待下次读取时再加载。

大致上两种方案:
1、脚本同步: 自己写脚本将数据库数据写入到 redis/memcached。这就涉及到实时数据变更的问题 (MySQL row binlog 的实时分析),binlog 增量订阅 Alibaba 的 canal,以及缓存层数据 丢失/失效 后的数据同步恢复问题。
2、业务层实现: 先读取 nosql 缓存层,没有数据再读取 mysql 层,并写入数据到 nosql。nosql 层做好多节点分布式 (一致性 hash),以及节点失效后替代方案 (多层 hash 寻找相邻替代节点),和数据震荡恢复了。

网摘 - 内存缓存

  • 针对单机应用,内存缓存 (System.Runtime.Caching) 就足够,集群环境应该上集中式缓存,比较常用的是 Memcached 和 Redis。
  • 使用 Redis / Memcached 与 在代码中直接把缓存数据存入内存变量中 的主要区别是: 多进程或者多机器可以共同使用同一个 Redis / Memcached。