Search code examples
arraysrubyredishash

Using Redis to store array of hashes


I have just started to look at Redis and would like to be able to store an Array of hashes, where I can pop a random key/value out and then put it back in when I need to.

So in Ruby I would have something like this

users = [{ username: "user1", password: "password"}, { username: "user2", password: 'password'}]

So if I wanted to get a random key/value object from the Array I would do something like this

@user = users.shuffle!.pop

And then to put it back into the array

users.push(@user)

The idea for using Redis is that I have two processes (Ruby based app) that need to share a pool of users at the same time. Once a process has finished with a user I want it to put it back into the pool.

What can I try next?


Solution

  • You could Redis Hash to store a user info and Redis Set to store all these hashes together.

    Steps:

    1. Make a redis Hash with HSET command:HMSET userId_653 username "Tom" password "gd36e3hd38d3jdj3yd3hd38"
    2. Add this hash in the set called users: SADD users userId_653. This set contains all the users.
    3. Get a random user key from the set: SRANDMEMBER users. It will return userId_653
    4. Get the corresponding values from hash using HGET userId_653 username
    5. If you need to pop the key simply do SPOP users after step 3. and SADD again after processing in step 4.

    A similar question for better understanding: Redis how to store associative array

    References:

    PS: I have no experience in Ruby. Look for suitable Redis Ruby API which would support all these operations!