配列をMemcacheに保存できますか?
保存したいのですが。
アレイとして一緒に、誰かがあなたができると私に言った、そして誰かがあなたができないと私に言ったそれはどれですか?
はい。
Memcache::set('someKey', array(
'user_id' => 1,
'url' => 'http://',
'name' => 'Dave'
));
非常に詳細な例については、 ドキュメント を参照してください。
memcache内のアイテムの最大ストレージサイズは1,048,576バイト(1MB)であり、配列のシリアル化には少しスペースが必要です。
配列を次のように単純に構造化する場合:
array(
[0] => 1,
[1] => 2,
[2] => 3
)
キーは自動生成され、値はユーザーIDです。
この構造を使用して1〜5000の番号が付けられた5000ユーザーのシリアル化された配列の文字列長は67792文字で、50000ユーザーは777794文字の配列を生成します。
100000〜150000の番号を付けると、838917文字のシリアル化された文字列が生成されます。
したがって、5万人のユーザー(前の質問で参照)では、1MBの制限を下回る可能性があります。ただし、ローカルキャッシュ(APCなど)がある場合は、代わりにそれを使用します。または、何らかの理由で一度にすべてのIDが必要ない場合は、結果を分割するか、単にDBを使用することを強くお勧めします。
memcachedに保存しているデータ構造についても考えてください。ルックアップする主キーのリストを提供するためだけにキャッシュを使用している場合、他のデータが必要ですか?
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect");
$id = $_REQUEST['name'];
$key = md5("SELECT * FROM memc where FirstName='{$id}'");
$get_result = array();
$get_result = $memcache->get($key);
if ($get_result) {
echo "<pre>\n";
echo "FirstName: " . $get_result['FirstName'] . "\n";
echo "Age: " . $get_result['Age'] . "\n";
echo "</pre>\n";
} else {
$query="SELECT * FROM memc where FirstName='{$id}'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
echo "<pre>\n";
echo "FirstName: " . $row[1] . "\n";
echo "Age: " . $row[3] . "\n";
echo "Retrieved from the Database\n";
echo "</pre>\n";
$memcache->set($key, $row, MEMCACHE_COMPRESSED, 60);
mysql_free_result($result);
}
要件に応じてデータベース設定を変更し、テスト済みのコードを試してください
Memcachedにはほとんど何でも保存できます。
memcache::set
のドキュメントを参照してください。
bool Memcache::set(string $key, mixed $var [, int $flag [, int $expire ]] )
var
The variable to store. Strings and integers are stored as is, other types
シリアル化されて保存されます。
したがって、はい、配列、または必要に応じてオブジェクトを格納できます:-)
BTW、 Memcache::add
および Memcache::replace
と同じです