缓存设计
/** * 假定有并发请求1、2、3 * 请求1先进入synchronized代码块,请求2、3等待 * 请求1会查询数据库并更新缓存,退出synchronized * 请求2、3依次进入synchronized并命中缓存 */ // 先从缓存读取对应id的信息流 var record = cache.get("feed:" + id) if (record == null) { // 缓存未命中时加锁,要求串行化执行 synchronized { // 再次尝试从缓存读取对应id的信息流 record = cache.get("feed:" + id) if (record == null) { // 从数据库读取并更新缓存 record = db.feed.get(id) cache.put("feed:" + id, record) } } }
Last updated