I'm looking for an in-memory database used to simply record metrics of read and writes done on parts of a database so that I know which queries are executed most often. I also want this in-memory database to be distributed over nodes, as is the main database.
Any advice? Are there better alternatives to redis, memcached and hazelcast?
Among those you've mentioned, hazelcast might be good to look at even if you're just planning to do memcached, since hazelcast supports the memcached protocol, and thus provides an elastically scalable memcached, in essence.
http://hazelcast.org/docs/latest/manual/html-single/hazelcast-documentation.html#memcache-client
You might enjoy Redis if you need lots of client language bindings. If you are Java focused, hazelcast may be the best option.
But you should try them all and see what fits your needs best.