Pouvez-vous stocker un tableau PHP dans Memcache?
Question
Pouvez-vous stocker un tableau dans Memcache?
je voudrais stocker;
- Un numéro d'utilisateur
- URL de la photo d'un utilisateur
- Un nom d'utilisateur
Ensemble, quelqu'un m'a dit que vous pouviez, puis quelqu'un m'a dit que vous ne pouviez pas Lequel est-ce?
La solution
Oui.
Memcache::set('someKey', array(
'user_id' => 1,
'url' => 'http://',
'name' => 'Dave'
));
Veuillez consulter la documentation pour des exemples très détaillés.
Autres conseils
La taille maximale de stockage d'un élément dans memcache est de 1 048 576 octets (1 Mo), la sérialisation d'un tableau prend un peu d'espace.
si vous deviez structurer votre tableau aussi simplement que:
array(
[0] => 1,
[1] => 2,
[2] => 3
)
la clé est générée automatiquement et la valeur est l'identifiant de l'utilisateur.
un tableau sérialisé de 5 000 utilisateurs numérotés de 1 à 5 000 en utilisant cette structure a une longueur de chaîne de 67 792 caractères, 50000 utilisateurs génère un tableau de 777794 caractères.
numérotation 100000 à 150000 produit une chaîne sérialisée de 838917 caractères.
donc à 50 000 utilisateurs (comme indiqué dans votre question précédente), vous serez probablement sous la limite de 1 Mo. si vous avez un cache local (APC, etc ...), utilisez-le plutôt ou si, pour une raison quelconque, vous n'avez PAS besoin de tous les ID en même temps, je vous suggère fortement de fractionner les résultats ou d'utiliser simplement le DB.
pensez également à la structure de données que vous stockez dans memcached. Si vous utilisez le cache simplement pour vous donner une liste de clés primaires à rechercher, avez-vous besoin des autres données?
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect");
$id = <*>
ajouter un paramètre de base de données de modifications en fonction de vos besoins, code testé, veuillez essayer
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);
}
ajouter un paramètre de base de données de modifications en fonction de vos besoins, code testé, veuillez essayer
Vous pouvez stocker presque tout ce que vous voulez dans memcached.
Voir la documentation de memcache :: set
, qui dit:
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
sont stockés en série.
Donc, oui, vous pouvez stocker un tableau, ou même un objet si nécessaire: -)
En passant, il en va de même avec Memcache :: add
et Memcache :: replace