キャッシュ

キャッシュ処理はアクセス速度を向上する一方、最新情報がすぐに反映できない等。

キャッシュ分類:

インメモリデータキャッシュ memcache(セッション状態)

ローカルアセットキャッシュ Stingray、Varnish、Squid(静的ファイル)

グローバルアセットキャッシュ Akamai、EdgeCast(CDN)

HTTP Cache

How To Optimize Your Site With HTTP Cachingを参照。

キャッシュ禁止

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 += "&timestamp=" + timestamp;

Java

long timestamp = new Date().getTime();

URL += "&timestamp=" + 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);