web-dev-qa-db-fra.com

Comment configurer la mémoire maximale de Redis?

Je trouve le configure dans this , il vient de dire que la commande pour utiliser le configure spécifier:

./redis-server <path>/redis.conf

Mais, je ne sais pas comment écrire le configure. J'ai donc trouvé la configuration par défaut dans this . Mais, je ne comprends toujours pas comment définir la mémoire maximale. Est-ce qu'il ajoute juste cette ligne dans configure?

maxmemory 2mb

En passant, je veux savoir combien coûte la mémoire par défaut. et je veux définir la mémoire à 2 Go, comment le faire? 

Ensuite, j'ai ajouté cette ligne à la redis configure pour définir maxmemory à 40 Go:

maxmemory 41943040

Et j'utilise la commande dans redis-cli:

config get maxmemory

ça me montre:

127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "41943040"

Mais, mon programme Java lève l'exception comme ceci lorsque le numéro de clé est d'environ 200 000:

Exception in thread "Thread-228" redis.clients.jedis.exceptions.JedisDataException: OOM command not allowed when used memory > 'maxmemory'.
    at redis.clients.jedis.Protocol.processError(Protocol.Java:117)
    at redis.clients.jedis.Protocol.process(Protocol.Java:151)
    at redis.clients.jedis.Protocol.read(Protocol.Java:205)
    at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.Java:297)
    at redis.clients.jedis.Connection.getStatusCodeReply(Connection.Java:196)
    at redis.clients.jedis.Jedis.hmset(Jedis.Java:644)
    at cn.ict.dt2redis.analyser.AbstractAnalyser.pushOne(AbstractAnalyser.Java:21)
    at cn.ict.dt2redis.analyser.BatchAbstractAnalyser.run(BatchAbstractAnalyser.Java:16)
    at Java.lang.Thread.run(Thread.Java:722)

Je n'en ai aucune idée. Est-ce que je réussis à régler la mémoire maximale à 40 Go? Comment faire? donnez-moi s'il vous plaît du code en détail.

16
v11

Oui - pour définir la limite de mémoire, décommentez simplement la ligne maxmemory dans le fichier .conf. La valeur par défaut est 0, ce qui signifie illimité (jusqu'à ce que le système d'exploitation ne dispose plus de RAM et tue le processus - je recommande de toujours définir maxmemory sur une valeur raisonnable).

Mise à jour: comme @Eric Uldall l'a mentionné dans les commentaires, un CONFIG SET maxmemory <sane value>, suivi d'un CONFIG REWRITE devrait également faire l'affaire.

20
Itamar Haber

maxmemory 41943040

option définie en octets, vous définissez donc 40 Mo

2
Max

La documentation dans les commentaires appelle des octets mais j'ai utilisé des extensions telles que mb & gb sans aucun problème.

$ grep ^maxmemory /etc/redis-server.conf
maxmemory 8gb
maxmemory-policy allkeys-lru

Et pour confirmer:

$ redis-cli
...
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "8589934592"
2
slm