キャッシュ
キャッシュ処理はアクセス速度を向上する一方、最新情報がすぐに反映できない等。
キャッシュ分類:
インメモリデータキャッシュ memcache(セッション状態)
ローカルアセットキャッシュ Stingray、Varnish、Squid(静的ファイル)
グローバルアセットキャッシュ Akamai、EdgeCast(CDN)
HTTP Cache
キャッシュ禁止
JavaEE
※フィルターにキャッシュ処理を実装するのは便利だ。
方法1(クライアント側:<head>タブの中)
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="0">
方法2(サーバ側)
response.setHeader("Pragma","no-cache"); // HTTP/1.0
response.setHeader("Cache-Control","no-cache"); // HTTP/1.1
response.setDateHeader("Expires", 0);
方法3(制限時間を設定)
int minutes = 10;
Date d = new Date();
String modDate = d.toGMTString();
String expDate = (new Date(d.getTime() + minutes * 60000)).toGMTString();
response.setHeader("Last-Modified", modDate);
response.setHeader("Expires", expDate);
response.setHeader("Cache-Control", "public"); // HTTP/1.1
response.setHeader("Pragma", "Pragma"); // HTTP/1.0
方法4(URL随時変更)
JavaScript
var timestamp = (new Date()).valueOf();
URL += "×tamp=" + timestamp;
Java
long timestamp = new Date().getTime();
URL += "×tamp=" + timestamp;
ちなみに
Struts(一括設定) struts-config.xml <controller nocache="true" />
PHP
★動的コンテンツ
分別設定
<?php
header("Pragma: no-cache"); // HTTP1.0
header("Cache-Control: no-cache"); // HTTP1.1
header("Expires: 0"); // 有効期限
?>
一括設定
php.ini session.cache_limiter=nocache
★静的コンテンツ
Apacheのhttpd.confや.htaccess
<FilesMatch "\.(html|doc|xls)$">
Header set Pragma no-cache
Header set Cache-Control no-cache
Header set Expires 0
</FilesMatch>
キャッシュ利用
Servlet
Integer total = (Integer) request.getSession().getAttribute("total");
int temp = total == null ? 1 : total.intValue() + 1;
request.getSession().setAttribute("total", temp);