How to set Redis max memory?
RedisRedis Problem Overview
I find the configure in [this][1], it just said the command to use the specify configure:
./redis-server <path>/redis.conf
But,I have no idea about how to write the configure. So I have find the default configure in [this][2]. But, I still don't understand how to set max memory. Does it just add this line in configure?
maxmemory 2mb
By the way, I want to know how much the default memory is. and I want to set the memory to 2GB, how to do it?
Then, I have added this line to the redis configure to set maxmemory to 40GB:
maxmemory 41943040
And I use the command in redis-cli:
config get maxmemory
it show me:
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "41943040"
But, my java program throw the exception like this when key number is about 200000:
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)
I have no idea about it, do I success in setting max memory to 40 GB? How to do it? please give me some code in detail. [1]: http://redis.io/topics/config [2]: http://download.redis.io/redis-stable/redis.conf
Redis Solutions
Solution 1 - Redis
Yes - to set the memory limit just uncomment the maxmemory
line in the .conf file. The default is 0, which means unlimited (until the operating system runs out of RAM and kills the process - I recommend to always set maxmemory to a sane value).
Updated: as @Eric Uldall mentioned in the comments, a CONFIG SET maxmemory <sane value>
, followed by a CONFIG REWRITE
should also do the trick. This will modify your redis.conf to preserve changes in case of restart
Solution 2 - Redis
The documentation in the comments call out bytes but I've used extensions such as mb & gb without any issues.
$ grep ^maxmemory /etc/redis-server.conf
maxmemory 8gb
maxmemory-policy allkeys-lru
And to confirm:
$ redis-cli
...
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "8589934592"
Solution 3 - Redis
> No need of changing any thing in the .conf file just follow the following steps
Step 1: Once check whether redis-server is working or not
$ redis-cli
127.0.0.1:6379> ping
PONG
if the reply is PONG
then you server is working absolutely fine.
Step 2: To get the current max memory run the following commands-
$ redis-cli
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "0"
> Initially it is set to 0 by default.
Step 3: After running the above step run the following commands to set the maxmemory
127.0.0.1:6379> config set maxmemory 128M
OK
To check whether the maxmemory is set to 128M run the step 2
again.
Step 4: After changing the maxmemory restart the redis-server
$ sudo systemctl restart redis
OR
$ sudo systemctl restart redis-server
Solution 4 - Redis
> maxmemory 41943040
option set in bytes, so you set 40MB
Solution 5 - Redis
If anyone is still having trouble setting the maxmemory
config setting in a local environment, the actual steps are as follows:
- In a terminal, start your redis instance
redis-server
- In a new terminal window run
redis-cli
- In the new terminal window (step 2) run
config set maxmemory 2mb
- Verify
maxmemory
by runningconfig get maxmemory
in same terminal window as steps 2/3
Somewhat documented here under the Changing Redis configuration while the server is running section
Solution 6 - Redis
Since this is an old question, users who are reading in 2019 and using Ubuntu 18.04, the configuration file is located in /etc/redis/redis.conf
and if you have installed using (default/recommended method) apt install redis-server
the default memory limit is set to "0" which practically means there is "no limit" which can be troublesome if user has limited/small amount of RAM/memory. To set your custom memory limit you may simply edit configuration file and type "maxmemory 1gb" as the very first line. Restart redis service for changes to take effect. To verify changes use redis-cli config get maxmemory
Ubuntu 18.04 users may read more here: How to install and configure REDIS on Ubuntu 18.04