En utilisant Phpredis , j'ai enregistré des données dans la pagination comme ceci: où mais puis-je supprimer toutes les anciennes clés à l'aide de caractères génériques lorsque quelqu'un a posté une nouvelle critique? Puis-je faire quelque chose comme: p> Cela n'a pas fonctionné cependant. p> p> 1 code> et
2 code> sont des numéros de page. J'ai lu dans le document que vous pouvez utiliser des caractères génériques pour récupérer plusieurs clés. P>
7 Réponses :
Non - Redis ' del code> n'accepte pas les caractères génériques, vous devez nommer les clés explicitement. Voyez ici pour les directions possibles: https://stackoverflow.com/a/23399125/3160475 P>
Merci. J'ai fini par utiliser $ AllKeys = $ Redis-> clés ("itema * '); code> et bouclé sur les résultats pour les supprimer un par un. Je ne sais pas si c'est la meilleure façon de le faire.
Définitivement l'une des pires façons;) clés code> est une commande diabolique que vous devriez, en règle générale, abstenez-vous d'utiliser (sauf que vous soyez courageux, imbécile ou les deux)
$bash = 'redis-cli --scan --pattern "' . $path . '*" | xargs -L 1000 redis-cli DEL'; $res = @shell_exec($bash);
Veuillez vous abstenir de publier des réponses uniquement du code, car ils n'aident pas la communauté à améliorer en apprenant à résoudre un problème. Essayez d'expliquer pourquoi votre solution aiderait à résoudre le problème avec le code.
Il est préférable d'ajouter plus de contexte / d'explication autour du code (par opposition à la réponse à une réponse uniquement au code), car cela rend la réponse plus utile.
Bien que cette extrait de code puisse résoudre le problème, cela n'explique pas pourquoi ni comment il répond à la question. S'il vous plaît Inclure une explication de votre code , car cela aide vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question des lecteurs à l'avenir, et ces personnes pourraient ne pas connaître les raisons de votre suggestion de code. Flagriers / critiques: B> Pour les réponses de codes, telles que celle-ci, Downvote, ne supprimez pas! a>
J'utilise simplement Ça fonctionne bien pour moi. p> p>
Cela ne signifie-t-il que tout car vous correspondez à chaque touche?
C'est une réponse dangereuse
Ouais, mais vous pouvez utiliser un masque comme un espace de noms / *
Redis :: Supprimer Code> est obsolète maintenant. Il utilise une utilisation possible
redis :: del code>?
Lorsque vous utilisez PHPREDIS code>, vous pouvez obtenir le préfixe (que PPPREDIS se répète automatiquement partout) et supprimez un motif de touches de la manière suivante:
<?php
...
$prefix = $redisClient->getOption(Redis::OPT_PREFIX);
$redisClient->delete(array_map(
function ($key) use ($prefix) {
return str_replace($prefix, '', $key);
}, $redisClient->keys('*'))
);
Un peu d'amélioration pour assurer la suppression de la chaîne (préfixe) à partir de la gauche: Preg_replace ("/ ^ $ {préfixe} /", '', clé $); code> en faveur de
str_replace < / code>.
prédis ( -> del code>) permet de passer une matrice de clés aussi.
Il fonctionne ici et est plus rapide que le del code> à l'intérieur du
foreach code>.
$prefix = $this->client->getOptions($this->OPT_PREFIX);
$keys = $this->client->keys("$key*");
if ($keys) $this->client->del($keys);
Une bonne réponse a une meilleure explication Comment puis-je écrire une bonne réponse?
Qu'est-ce que $ préfixe = $ ceci-> Client-> getOptions ($ this-> opt_prefix); code> ici dans ce code Snippet?
C'est une bien meilleure solution que d'itération sur chaque clé. Upvoted.
Remarque: strong> @Akash Gangrade commenté, clés () non invitée à utiliser en raison de la performance. Vous pouvez envisager une invalidation de cache basée sur des tags comme HTTPS: // symfony.com/doc/current/components/cache/cache_invalidation.html#tag-aware-adapters p> p>
N'utilisez jamais la commande Touches sur l'environnement de production car elle bloquera l'ensemble de la DB jusqu'à ce que la touche recherchée soit trouvée. Au lieu de cela, vous pouvez utiliser Scan pour rechercher une clé spécifique pour la production env.