I don't have all the info about your use case but, if you need a clustered message bus, why not use hornetq or something similar?
Instead of having a separate hash function per cache, use the grouping API https://docs.jboss.org/author/display/ISPN/The+Grouping+API
The iterators will only work on the local data, so you need to take that into account. In theory, if all data of a cache is in the single node, you'll be able to retrieve all info related to a client. But if it's split for whatever reason, it'll be partial.