SlideShare a Scribd company logo
1 of 85
缓存架构与缓存设计
技术部 kim
不讨论什么?
• 软件安装和介绍
• 数据结构和源码细节
• 性能报告
What is 缓存?
• 处理速度差异的技术方法
• 缓存的快,都是相对的!
缓存技术包括
• 文件缓存(file cache)
• 共享缓存(shared cache)
• 软件内置缓存(local cache)
• 缓存客户端(client cache)
• CDN 缓存(cdn cache)
• etc…
重点说下 Client Cache
• 被动更新
• LRU机制
• 协议简单
• 基于 libevent 非阻塞
• 单点无冗余
• 独立分布式,散列,O(1)
Why use 缓存?
• 减小负载
• 减少阻塞、数据库查询、脚本执行
• 让机器顺畅工作
缓存架构
文件缓存
• 优点:部署快,安全不丢失,易于拓展
• 缺点:无法应付并发,iNode限制,磁盘短
命,管理麻烦
应用(一)
好友动态日志目录 /queue/all
共享缓存
• 优点:速度快,部署快、使用方便,运维
更新和管理容易
• 缺点:服务器间不共享
/dev/shm 共享
• 默认是真实内存的一半
• 进程间共享数据
• 物理内存缺乏时用swap交换数据
• 支持动态在线调整
• 无权限限制
应用(一)
站内的登录秘钥:/dev/shm/secrectkey
应用(二)
缓存 pfs 图片存储系统的查询结果:/dev/shm/pfs_domain
内置缓存
• 优点:速度快,无第三方依赖,无需另开
端口
• 缺点:需要安装和配置,无法处理大缓存
应用(一)
• PHP 的 APC :http://php.net/apc/
• 目标文件缓存( apc_compiler_cache )
• 用户数据缓存( apc_user_cache)
应用(二)
-- Nginx 共享内存字典模块: lua_shared_dict
-- 缓存黑词
local badwords
local lcache = ngx.shared['lcache']
if lcache then
badwords = lcache:get(‘KEY_BADWORDS’)
end
if not badwords then
local hc = self:_getHttpObj()
badwords = hc:get('api.xxx.com', '/API/black_word')
if badwords then
lcache:set(‘KEY_BADWORDS’, badwords, 600)
end
end
缓存客户端
• 优点:服务期间共享,功能丰富,集群应
用,适合大缓存处理
• 缺点:Socket、带宽、内存消耗,数据丢失、
安全隐患,部署和管理成本高
Memcached
• 90%应用都有使用
• 历史悠久,性能、稳定性高
应用(一)
// 缓存状态值:
$key = $account . '@reg_' . $regType;
$userExist = $memd->Get($key);
if (!$userExist) {
$userLoginX = new UserLoginX();
$userExist = $userLoginX->checkExists($account);
if ($userExist) {
$memd->Put($key, "1", 10800);
}
}
应用(二)
// 缓存数据
$cacheKey = md5('api@db_promo@2012' . $num);
$videoList = $memd->Get($cacheKey);
if (!$videoList) {
$data_json = Http::Get("api.xxx.com",
‘API/api_bd_list’);
if ($data_json) {
$videoList = json_decode($data_json, true);
$memd->Put($cacheKey, $videoList, 1800);
}
}
应用(三)
// 计数器,发送限制,避免过于频繁发送信息
$data = array ("startTime" => time (), "num" => $msgNum );
$cache_key = "memKeyPreLimit" . $userid;
$rs = $memd->Get ($cache_key);
if (isset($rs) && is_array ( $rs )) {
$startTime = $rs ["startTime"];
$num = $rs ["num"];
if ((time () - $startTime) < 900 && ($num + $msgNum < 30)) {
$data = array ("startTime" => $startTime, "num" => $num + $msgNum );
}
}
$memd->Put($cache_key, json_encode( $data ), 900);
应用(四)
保存session,比如站内验证码
应用(五)
// 缓存备份,多用于取接口数据的时候失败的时候不至于没数据显示
$cacheKey = 'key_list_fresh';
$backupKey = 'key_list_backup';
$videoList = $memd->Get($cacheKey);
if (!$videoList) {
$data_json = Http::Get(“api.xxx.com", 'API/list');
if ($data_json) {
$videoList = json_decode($data_json, true);
$memd->Put($cacheKey, $videoList, 1800);
$memd->Put($backupKey, $videoList, 86400); // 更新备份
} else {
$videoList = $memd->Get($backupKey); // 接口取失败就取备份
}
}
TtServer
• 5%左右的应用在使用,comment、my、fav
在使用
• 支持 Memcached 协议的 DBM 数据库,数据
可持久化
应用(一)
// 取评论内容
protected function _fetchContent($key)
{
$result = '';
$localConfig = $GLOBALS['scfg']['tt_server'];
if (!$this->_dbContent) {
$this->_dbContent = new Mem($localConfig);
}
$content = $this->_dbContent->Get($key);
$result = sprintf('%s', json_decode($content));
if (json_last_error() != JSON_ERROR_NONE) {
$result = sprintf('%s', json_decode(json_encode($content)));
}
return $result;
}
KtServer
• 10%左右的应用在使用,包括部分核心应用
• 高并发读写,持久化存储,故障恢复快
应用(一)
• 视频拓展信息缓存集合(类似 redis hash 的
实现)
Redis
• 50%左右的应用使用
• 数据结构丰富,极适合并发高的复杂应用。
极占内存,对开发人员要求较高。
应用(一)
// 用 incr、incrby、decr、decrby 实现计数器
// 限制每5秒投一票,每天投票总数是90票
$rc = $redis->get($rcKey);
if (!$rc) {
$redis->setex($rcKey, 1, 86400);
}
$rs = $redis->get($rKey);
if ($rs === false && $rc < 90) {
$redis->setex($rKey, 1, 5);
$redis->incr($rcKey);
} else {
throw new Exception('留言速度太频繁啦!');
}
应用(二)
// 统计数字分段处理技术,对不同评论总数使用不同长度的缓存时间
$total = $redis->get($rKey);
if ($total === false) {
$total = $obj->getTotal($id);
if ($total > 300000) {
$res = $redis->set($rKey, $total);
} else if ($total > 99999) {
$res = $redis->setex($rKey, $total, 86400 * 72);
} else if ($total > 9999) {
$res = $redis->setex($rKey, $total, 86400 * 6);
} else {
$res = $redis->setex($rKey, $total, 3600);
}
}
应用(三)
// lpush/ltrim/lpop/lrange 模拟有限队列,用户点播单列表:
$listData = getUserDianBoList($userId);
foreach ($listData as $data) {
$count = $redis->LPush($uKey, $data);
if ($count > MAX_RECORD_NUM_PER_LIST) {
$redis->LTrim($uKey, 0, MAX_RECORD_NUM_PER_USER - 1);
}
}
……
$list = $redis -> lRange($uKey, 0, MAX_RECORD_NUM_PER_USER - 1);
应用(四)
-- 利用 hmset 实现实时记录最新更新的表:
local rhkey = 'tb|updates'
local hData = {}
hData[tableIndex] = cjson.encode(currentTime)
rds:hmset(rhkey, hData)
……
local tableRecords = rds:hgetall($rhkey);
if tableRecords then
.......
end
应用(五)
-- 使用 hmget / hmset 实现正确的分页缓存
-- 清理所有分页:rds:hclear(hlkey)
local list
local hlkey = 'hashlist|' .. vid
local hlfield = orderby .. '|' .. num
local hResult = rds:hmget(hlkey, hlfield)
if hResult and hResult[1] then
list = cjson.decode(hResult[1])
else
list = self:_getList(vid, orderby, num)
local hData = {}
hData[hlfield] = cjson.encode(list)
rds:hmset(hlkey, hData)
end
应用(六)
// 使用 zset 来实现自动排重
// 60秒内不能发表重复内容
public function checkDuplicatedCnt($vid, $content)
{
$redis = self::getRedis();
$md5Cnt = md5($content);
$rKey = ‘cnt|‘ . $vid;
$isDuplicated = !$redis->sAdd($rKey, $md5Cnt);
$redis->setTimeoutOnce($rKey, 60);
return $isDuplicated;
}
应用(七)
// 使用 zIncrBy、 zRevRange 实现日排行榜功能:Top 20
$rKey = 'toplist|' . date('md', time());
$score = 1;
$result = $redis->zIncrBy($rKey, $vid, $score);
$redis->setTimeoutOnce($rKey, 86400);
......
$result = $redis->zRevRange($rKey, 0, 19);
应用(八)
-- 实时记录分表的最新更新时间及其顺序:
local zsetData = {}
local rzkey = ‘table|updated‘
table.insert(zsetData, updated_at) -- 更新时间
table.insert(zsetData, tablehash) -- 更新的表
rds:zadd(rzkey, unpack(zsetData))
……
local withScore = true;
local tableRecords = rds:zrevrange(‘table|updated’, 0, 1000, withScore);
应用(九)
-- 使用 pipeline 快速生成数据:
rds:init_pipeline()
local zsetData = {}
local hashData = {}
for k,v in pairs(tblVinfo) do
-- 存进有序集备用
table.insert(zsetData, v['times'])
table.insert(zsetData, v['id'])
-- 存进哈希集备用
hashData[tostring(v['id'])] = cjson.encode(v)
end
rds:zadd(rzkey, unpack(zsetData))
rds:hmset(rhkey, hashData) -- 用 mset/mget 一次设置/获取多个值,优化性能
rds:commit_pipeline()
应用(十)
// 用 MULTI 来实现事务,保证原子性
// 想象一下假如同一时刻刚好有2个进程都在执行 push 。。。
$pipe = $redis->multi();
foreach ($result['data'] as $value) {
$len = $pipe->rPush($rKey, json_encode($value));
}
$pipe->setTimeout($rKey, 600);
$pipe->exec();
SSDB
• 弹幕在试用,视频人气重构也在试用
• 使用 leveldb 做存储引擎,占内存极少。支
持主主同步架构。绝大多数情况下可以替
换掉 redis ,性价比极高。
CDN 缓存
• 优点:速度快
• 缺点:成本高
应用(一)
// 播放页针对视频不同状态,设置不同的cdn缓存时间
if ($videoInfo['chk'] == 'n') { //未审核状态设置缓存时间600S
$cdnCacheTime = 600;
} else {
$cdnCacheTime = 259200;
}
header("Expires: " . gmdate("D, d M Y H:i:s", time() + $cdnCacheTime) . " GMT");
header("Cache-Control: max-age=" . $cdnCacheTime);
header("Last-Modified: " . gmdate("D, d M Y H:i:s", time()) . " GMT");
if (ob_get_length()) {
header("Content-Length: " . ob_get_length());
}
ob_end_flush();
缓存代理 twemproxy
• 70% 的应用在使用,构筑在客户端缓存与
应用之间,充当桥梁
• 轻量级,配置简单,支持 memcached ascii
和 redis 协议,多点长连接,高可用性
关于缓存的技巧
(一)区分对待查询结果
• 查询成功,且数据不为空 -- 长缓存
• 查询成功,但数据为空 -- 短缓存
• 查询失败 -- 不缓存
应用
local res = db:findOne(sql)
if type(res) == 'table' and res['id'] then
rds:setex(key, cjson.encode(res), 3600)
elseif db.lasterr == db.ERROR_NOT_FOUND then
rds:setex(key, cjson.encode(res), 60)
else
-- 查询异常或者查询超时等情况
end
(二)缓存耦合
• 优点:提升系统实时性,减少系统间依赖,
增强系统稳定性
• 缺点:有违 RESTFUL 风格,修改和管理成本
增加
松耦合
紧耦合
(三)利用“用户”驱动
• 利用接口A的访问,生成页面B的缓存
• 能共用一份缓存的时候,绝不使用两份
一般的做法
更好的做法
终于,到总结了。。。
1. 每一分内存都是宝贵的资源
2. 缓存读写不一定比磁盘快
3. 会过期的缓存才是好缓存
4. 生产环境禁用 flush
5. 严禁长key
6. 做好缓存校验
最后你始终还有一个疑问。。。
如何在适当的场合使用合适的
缓存技术?
1. 靠经验
2. KISS原则
3. 数据重要程度以及访问频度
FAQ
谢谢!

More Related Content

What's hot

SSDB(LevelDB server) vs Redis
SSDB(LevelDB server) vs RedisSSDB(LevelDB server) vs Redis
SSDB(LevelDB server) vs Redisideawu
 
KISSY for starter
KISSY for starterKISSY for starter
KISSY for starteryiming he
 
Web开发中的缓存
Web开发中的缓存Web开发中的缓存
Web开发中的缓存jeffz
 
Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架Cabin WJ
 
前端MVVM框架安全
前端MVVM框架安全前端MVVM框架安全
前端MVVM框架安全Borg Han
 
ByPat博客出品-高性能Web服务器nginx及相关新技术的应用
ByPat博客出品-高性能Web服务器nginx及相关新技术的应用ByPat博客出品-高性能Web服务器nginx及相关新技术的应用
ByPat博客出品-高性能Web服务器nginx及相关新技术的应用redhat9
 
MongoDB Basic
MongoDB BasicMongoDB Basic
MongoDB Basicsimplels
 
MongoDB for C# developer
MongoDB for C# developerMongoDB for C# developer
MongoDB for C# developerdianming.song
 
DNS协议与应用简介
DNS协议与应用简介DNS协议与应用简介
DNS协议与应用简介琛琳 饶
 
Monitor is all for ops
Monitor is all for opsMonitor is all for ops
Monitor is all for ops琛琳 饶
 
應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局Alex Lau
 
Patterns in Zend Framework
Patterns in Zend FrameworkPatterns in Zend Framework
Patterns in Zend FrameworkJace Ju
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践rewinx
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践Frank Cai
 
分区表基础知识培训
分区表基础知识培训分区表基础知识培训
分区表基础知识培训maclean liu
 
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile ServicesKuo-Chun Su
 
缓存技术浅谈
缓存技术浅谈缓存技术浅谈
缓存技术浅谈Robbin Fan
 
独爽不如众乐
独爽不如众乐独爽不如众乐
独爽不如众乐Zheng Biao
 

What's hot (19)

SSDB(LevelDB server) vs Redis
SSDB(LevelDB server) vs RedisSSDB(LevelDB server) vs Redis
SSDB(LevelDB server) vs Redis
 
KISSY for starter
KISSY for starterKISSY for starter
KISSY for starter
 
Web开发中的缓存
Web开发中的缓存Web开发中的缓存
Web开发中的缓存
 
Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架
 
前端MVVM框架安全
前端MVVM框架安全前端MVVM框架安全
前端MVVM框架安全
 
ByPat博客出品-高性能Web服务器nginx及相关新技术的应用
ByPat博客出品-高性能Web服务器nginx及相关新技术的应用ByPat博客出品-高性能Web服务器nginx及相关新技术的应用
ByPat博客出品-高性能Web服务器nginx及相关新技术的应用
 
MongoDB Basic
MongoDB BasicMongoDB Basic
MongoDB Basic
 
Mongo db 特性
Mongo db 特性Mongo db 特性
Mongo db 特性
 
MongoDB for C# developer
MongoDB for C# developerMongoDB for C# developer
MongoDB for C# developer
 
DNS协议与应用简介
DNS协议与应用简介DNS协议与应用简介
DNS协议与应用简介
 
Monitor is all for ops
Monitor is all for opsMonitor is all for ops
Monitor is all for ops
 
應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局
 
Patterns in Zend Framework
Patterns in Zend FrameworkPatterns in Zend Framework
Patterns in Zend Framework
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
分区表基础知识培训
分区表基础知识培训分区表基础知识培训
分区表基础知识培训
 
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
 
缓存技术浅谈
缓存技术浅谈缓存技术浅谈
缓存技术浅谈
 
独爽不如众乐
独爽不如众乐独爽不如众乐
独爽不如众乐
 

Viewers also liked

PHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsPHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsHo Kim
 
Php Code Audits (PHP UK 2010)
Php Code Audits (PHP UK 2010)Php Code Audits (PHP UK 2010)
Php Code Audits (PHP UK 2010)Damien Seguy
 
Functions - complex first class citizen
Functions - complex first class citizenFunctions - complex first class citizen
Functions - complex first class citizenVytautas Butkus
 
PHP Static Code Review
PHP Static Code ReviewPHP Static Code Review
PHP Static Code ReviewDamien Seguy
 
Web UI performance tuning
Web UI performance tuningWeb UI performance tuning
Web UI performance tuningAndy Pemberton
 
Coding Best practices (PHP)
Coding Best practices (PHP)Coding Best practices (PHP)
Coding Best practices (PHP)Christian Baune
 
Modular & Event driven UI Architecture
Modular & Event driven UI ArchitectureModular & Event driven UI Architecture
Modular & Event driven UI ArchitectureVytautas Butkus
 
Coding Standard And Code Review
Coding Standard And Code ReviewCoding Standard And Code Review
Coding Standard And Code ReviewMilan Vukoje
 
PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...
PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...
PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...Rouven Weßling
 
JavaScript and UI Architecture Best Practices
JavaScript and UI Architecture Best PracticesJavaScript and UI Architecture Best Practices
JavaScript and UI Architecture Best PracticesSiarhei Barysiuk
 
Modern Static Code Analysis in PHP
Modern Static Code Analysis in PHPModern Static Code Analysis in PHP
Modern Static Code Analysis in PHPVladimir Reznichenko
 
Refactoring Legacy Code
Refactoring Legacy CodeRefactoring Legacy Code
Refactoring Legacy CodeAdam Culp
 
Component Based UI Architecture - Alex Moldovan
Component Based UI Architecture - Alex MoldovanComponent Based UI Architecture - Alex Moldovan
Component Based UI Architecture - Alex MoldovanITCamp
 
Modern UI Architecture_ Trends and Technologies in Web Development
Modern UI Architecture_ Trends and Technologies in Web DevelopmentModern UI Architecture_ Trends and Technologies in Web Development
Modern UI Architecture_ Trends and Technologies in Web DevelopmentSuresh Patidar
 
Code review guidelines
Code review guidelinesCode review guidelines
Code review guidelinesLalit Kale
 
UI Architecture & Web Performance
UI Architecture & Web PerformanceUI Architecture & Web Performance
UI Architecture & Web PerformanceKyle Simpson
 
Selenium Architecture
Selenium ArchitectureSelenium Architecture
Selenium Architecturerohitnayak
 
Content Design, UI Architecture and Content-UI-Mapping
Content Design, UI Architecture and Content-UI-MappingContent Design, UI Architecture and Content-UI-Mapping
Content Design, UI Architecture and Content-UI-MappingWolfram Nagel
 

Viewers also liked (20)

PHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsPHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming Skills
 
Php Code Audits (PHP UK 2010)
Php Code Audits (PHP UK 2010)Php Code Audits (PHP UK 2010)
Php Code Audits (PHP UK 2010)
 
Functions - complex first class citizen
Functions - complex first class citizenFunctions - complex first class citizen
Functions - complex first class citizen
 
PHP Static Code Review
PHP Static Code ReviewPHP Static Code Review
PHP Static Code Review
 
Coding standards php
Coding standards phpCoding standards php
Coding standards php
 
Web UI performance tuning
Web UI performance tuningWeb UI performance tuning
Web UI performance tuning
 
Coding Best practices (PHP)
Coding Best practices (PHP)Coding Best practices (PHP)
Coding Best practices (PHP)
 
Modular & Event driven UI Architecture
Modular & Event driven UI ArchitectureModular & Event driven UI Architecture
Modular & Event driven UI Architecture
 
PHP CODING STANDARDS
PHP CODING STANDARDSPHP CODING STANDARDS
PHP CODING STANDARDS
 
Coding Standard And Code Review
Coding Standard And Code ReviewCoding Standard And Code Review
Coding Standard And Code Review
 
PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...
PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...
PHPcon Poland - Static Analysis of PHP Code – How the Heck did I write so man...
 
JavaScript and UI Architecture Best Practices
JavaScript and UI Architecture Best PracticesJavaScript and UI Architecture Best Practices
JavaScript and UI Architecture Best Practices
 
Modern Static Code Analysis in PHP
Modern Static Code Analysis in PHPModern Static Code Analysis in PHP
Modern Static Code Analysis in PHP
 
Refactoring Legacy Code
Refactoring Legacy CodeRefactoring Legacy Code
Refactoring Legacy Code
 
Component Based UI Architecture - Alex Moldovan
Component Based UI Architecture - Alex MoldovanComponent Based UI Architecture - Alex Moldovan
Component Based UI Architecture - Alex Moldovan
 
Modern UI Architecture_ Trends and Technologies in Web Development
Modern UI Architecture_ Trends and Technologies in Web DevelopmentModern UI Architecture_ Trends and Technologies in Web Development
Modern UI Architecture_ Trends and Technologies in Web Development
 
Code review guidelines
Code review guidelinesCode review guidelines
Code review guidelines
 
UI Architecture & Web Performance
UI Architecture & Web PerformanceUI Architecture & Web Performance
UI Architecture & Web Performance
 
Selenium Architecture
Selenium ArchitectureSelenium Architecture
Selenium Architecture
 
Content Design, UI Architecture and Content-UI-Mapping
Content Design, UI Architecture and Content-UI-MappingContent Design, UI Architecture and Content-UI-Mapping
Content Design, UI Architecture and Content-UI-Mapping
 

Similar to Web Caching Architecture and Design

Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
Introduction to CodeIgniter
Introduction to CodeIgniterIntroduction to CodeIgniter
Introduction to CodeIgniterChun-Kai Wang
 
Html5和css3入门
Html5和css3入门Html5和css3入门
Html5和css3入门Xiujun Ma
 
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统Frank Xu
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 zhen chen
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xBo-Yi Wu
 
Template mb-kao
Template mb-kaoTemplate mb-kao
Template mb-kaoxwcoder
 
Erlang游戏开发
Erlang游戏开发Erlang游戏开发
Erlang游戏开发litaocheng
 
線上埋碼資料收集實作
線上埋碼資料收集實作線上埋碼資料收集實作
線上埋碼資料收集實作FEG
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制maclean liu
 
前端性能优化和自动化
前端性能优化和自动化前端性能优化和自动化
前端性能优化和自动化kaven yan
 
Huangjing renren
Huangjing renrenHuangjing renren
Huangjing renrend0nn9n
 
Sina App Quick Guide 1
Sina App Quick Guide 1Sina App Quick Guide 1
Sina App Quick Guide 1guestf4aed35
 
Nosql及其主要产品简介
Nosql及其主要产品简介Nosql及其主要产品简介
Nosql及其主要产品简介振林 谭
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡cachowu
 

Similar to Web Caching Architecture and Design (20)

Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
Introduction to CodeIgniter
Introduction to CodeIgniterIntroduction to CodeIgniter
Introduction to CodeIgniter
 
Html5和css3入门
Html5和css3入门Html5和css3入门
Html5和css3入门
 
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储
 
Glider
GliderGlider
Glider
 
nodejs开发web站点
nodejs开发web站点nodejs开发web站点
nodejs开发web站点
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.x
 
Mvc
MvcMvc
Mvc
 
Template mb-kao
Template mb-kaoTemplate mb-kao
Template mb-kao
 
CRUD 綜合運用
CRUD 綜合運用CRUD 綜合運用
CRUD 綜合運用
 
Erlang游戏开发
Erlang游戏开发Erlang游戏开发
Erlang游戏开发
 
線上埋碼資料收集實作
線上埋碼資料收集實作線上埋碼資料收集實作
線上埋碼資料收集實作
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
 
前端性能优化和自动化
前端性能优化和自动化前端性能优化和自动化
前端性能优化和自动化
 
Huangjing renren
Huangjing renrenHuangjing renren
Huangjing renren
 
Sina App Quick Guide 1
Sina App Quick Guide 1Sina App Quick Guide 1
Sina App Quick Guide 1
 
Nosql及其主要产品简介
Nosql及其主要产品简介Nosql及其主要产品简介
Nosql及其主要产品简介
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
 
Php
PhpPhp
Php
 

More from Ho Kim

解决Lvs上行丢包的过程和收获
解决Lvs上行丢包的过程和收获解决Lvs上行丢包的过程和收获
解决Lvs上行丢包的过程和收获Ho Kim
 
40 Powerful Shortcuts of Xcode 6.x
40 Powerful Shortcuts of Xcode 6.x40 Powerful Shortcuts of Xcode 6.x
40 Powerful Shortcuts of Xcode 6.xHo Kim
 
Project Management Using Redmine
Project Management Using RedmineProject Management Using Redmine
Project Management Using RedmineHo Kim
 
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tipsOpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tipsHo Kim
 
Lua 30+ Programming Skills and 20+ Optimization Tips
Lua 30+ Programming Skills and 20+ Optimization TipsLua 30+ Programming Skills and 20+ Optimization Tips
Lua 30+ Programming Skills and 20+ Optimization TipsHo Kim
 
人人-56 账号拆分项目总结
人人-56 账号拆分项目总结人人-56 账号拆分项目总结
人人-56 账号拆分项目总结Ho Kim
 
OpenResty/Lua Practical Experience
OpenResty/Lua Practical ExperienceOpenResty/Lua Practical Experience
OpenResty/Lua Practical ExperienceHo Kim
 
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsJavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsHo Kim
 
Character Encoding and Database Transcoding Project
Character Encoding and Database Transcoding ProjectCharacter Encoding and Database Transcoding Project
Character Encoding and Database Transcoding ProjectHo Kim
 
Video Upload Architecture of 56.com
Video Upload Architecture of 56.comVideo Upload Architecture of 56.com
Video Upload Architecture of 56.comHo Kim
 
PHP Optimization for Millions Visits Level
PHP Optimization for Millions Visits LevelPHP Optimization for Millions Visits Level
PHP Optimization for Millions Visits LevelHo Kim
 
Comment System of 56.com
Comment System of 56.comComment System of 56.com
Comment System of 56.comHo Kim
 
Git Essence Tutorial
Git Essence TutorialGit Essence Tutorial
Git Essence TutorialHo Kim
 
MongoDB Basics and Tutorial
MongoDB Basics and TutorialMongoDB Basics and Tutorial
MongoDB Basics and TutorialHo Kim
 

More from Ho Kim (14)

解决Lvs上行丢包的过程和收获
解决Lvs上行丢包的过程和收获解决Lvs上行丢包的过程和收获
解决Lvs上行丢包的过程和收获
 
40 Powerful Shortcuts of Xcode 6.x
40 Powerful Shortcuts of Xcode 6.x40 Powerful Shortcuts of Xcode 6.x
40 Powerful Shortcuts of Xcode 6.x
 
Project Management Using Redmine
Project Management Using RedmineProject Management Using Redmine
Project Management Using Redmine
 
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tipsOpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
 
Lua 30+ Programming Skills and 20+ Optimization Tips
Lua 30+ Programming Skills and 20+ Optimization TipsLua 30+ Programming Skills and 20+ Optimization Tips
Lua 30+ Programming Skills and 20+ Optimization Tips
 
人人-56 账号拆分项目总结
人人-56 账号拆分项目总结人人-56 账号拆分项目总结
人人-56 账号拆分项目总结
 
OpenResty/Lua Practical Experience
OpenResty/Lua Practical ExperienceOpenResty/Lua Practical Experience
OpenResty/Lua Practical Experience
 
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsJavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization Skills
 
Character Encoding and Database Transcoding Project
Character Encoding and Database Transcoding ProjectCharacter Encoding and Database Transcoding Project
Character Encoding and Database Transcoding Project
 
Video Upload Architecture of 56.com
Video Upload Architecture of 56.comVideo Upload Architecture of 56.com
Video Upload Architecture of 56.com
 
PHP Optimization for Millions Visits Level
PHP Optimization for Millions Visits LevelPHP Optimization for Millions Visits Level
PHP Optimization for Millions Visits Level
 
Comment System of 56.com
Comment System of 56.comComment System of 56.com
Comment System of 56.com
 
Git Essence Tutorial
Git Essence TutorialGit Essence Tutorial
Git Essence Tutorial
 
MongoDB Basics and Tutorial
MongoDB Basics and TutorialMongoDB Basics and Tutorial
MongoDB Basics and Tutorial
 

Web Caching Architecture and Design