How to set Redis max memory?

Redis

Redis 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:

  1. In a terminal, start your redis instance redis-server
  2. In a new terminal window run redis-cli
  3. In the new terminal window (step 2) run config set maxmemory 2mb
  4. Verify maxmemory by running config 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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionv11View Question on Stackoverflow
Solution 1 - RedisItamar HaberView Answer on Stackoverflow
Solution 2 - RedisslmView Answer on Stackoverflow
Solution 3 - RedisKshitij SharmaView Answer on Stackoverflow
Solution 4 - RedisMaxView Answer on Stackoverflow
Solution 5 - RedismwilsonView Answer on Stackoverflow
Solution 6 - RedisFurqan SiddiquiView Answer on Stackoverflow