First context, I'm trying to use Redis as a storage in memory supported with persistence. I need to store a large number of objects (millions) in Redis Hash.
At the same time, I do not want my redis instance consuming too much memory. So I set the maxmemory property in redis.conf to 100 MB. I set the maxmemory policy as allkeys-random. Persistece mode is AOF, and fysnc is every second.
Now the iam problem is encountered, every time I try to store more than two hundred thousand objects in a hash, the hash gets reset (i.e. all existing key values ββin the hash disappear). I confirm this using the hlen command in the hash in redis-cli.
Find below im object trying to save
public class Employee implements Serializable { private static final long serialVersionUID = 1L; int id; String name; String department; String address; public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((address == null) ? 0 : address.hashCode()); result = prime * result + ((department == null) ? 0 : department.hashCode()); result = prime * result + id; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } }
Also, find below the code stored in redis (Im using Jedis to interact with Redis)
JedisPool jedisPool = new JedisPool(new JedisPoolConfig(), "localhost"); Jedis jedis = (Jedis) jedisPool.getResource(); System.out.println("Starting...."); for(int i=0;i<1000000;i++) { Employee employee = new Employee(i, "Arun Jolly", "IT", "SomeCompany"); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(employee); byte[] value = byteArrayOutputStream.toByteArray(); ByteBuffer buffer = ByteBuffer.allocate(128); buffer.putInt(employee.hashCode()); byte[] field = buffer.array(); String tableName = "Employee_Details"; byte[] key = tableName.getBytes(); jedis.hset(key, field, value); System.out.println("Stored Employee "+i); }
Am I missing something?
Does this mean that redis does not switch to disk after reaching maxmemory (does it try to save all the key values ββin memory?) Does this mean that I should gradually increase the maxmemory limit in accordance with the increase in the number of key-value pairs that I should keep?
redis jedis
Arun jolly
source share