Question

Pouvez-vous stocker un tableau dans Memcache?

je voudrais stocker;

  1. Un numéro d'utilisateur
  2. URL de la photo d'un utilisateur
  3. 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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top