title: Redis : Is there a limit to the number of keys that i can store?
body: <p>First the context, im trying to use Redis as an in-memory store backed with persistence. I need to store large number of objects (millions) in a Redis Hash. </p>
  
  <p>At the same time, i don't want my redis instance to consume too much memory. So i've set the <em>maxmemory</em> property in redis.conf to 100mb. I've set <em>maxmemory-policy</em> as <em>allkeys-random</em> The persistece mode is AOF and fysnc is every second.</p>
  
  <p>Now the issue iam facing is, every time i try to store more than two hundred thousand ojects in the hash, the hash gets reset (ie all the existing key values in the hash vanishes ). I confirm this by using the hlen command on the hash in the redis-cli.</p>
  
  <p>Find below the object im trying to store</p>
  
  <pre><code>public class Employee implements Serializable {
  
  private static final long serialVersionUID = 1L;
  int id;
  String name;
  String department;
  String address;
  
      /* Getters and Setters */
  
      /* Hashcode - Generates hashcode (key) for each object */
  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;
  }
  }
  </code></pre>
  
  <p>Also, Find below the code that stores into redis (Im using Jedis to interact with Redis )</p>
  
  <pre><code>    JedisPool jedisPool = new JedisPool(new JedisPoolConfig(), "localhost");
      Jedis jedis = (Jedis) jedisPool.getResource();
  
      System.out.println("Starting....");
      for(int i=0;i&lt;1000000;i++) {
  
               /* Converting object to byte array */
          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();
  
          /* Creating key in byte array format using hashCode() */
          ByteBuffer buffer = ByteBuffer.allocate(128);
          buffer.putInt(employee.hashCode());
          byte[] field = buffer.array();
  
              /* Specyfying the Redis Hash in byte array format */ 
          String tableName = "Employee_Details";
          byte[] key = tableName.getBytes();
  
          jedis.hset(key, field, value);
          System.out.println("Stored Employee "+i);
      }
  </code></pre>
  
  <p>Am i missing something ?</p>
  
  <p>Does this mean that redis does not swap out to the disk once the maxmemory is reached ( Is it trying to hold all the key values in memory ? ) Does it mean that i have to incrementally increase the maxmemory limit according to the increase in the number of key-value pairs that i might have to store ?</p>