Okay, you basically have 4 options:
1. sort on the client (HKEYS or HGETALL), or with a Lua script (client scales better)
2. have a SET as well as a HASH, add keys to similarly-named sets, use SORT on the sets, cache them if desired/necessary
3. use a sorted set, requires more work, slower to modify, uses more memory, faster to read, can be paginated, requires storing your "value" as the member (maybe with unique prefix), and your "key" as the score
4. hash + sorted set, slow to write, uses worst memory, as fast as #3 to read, can be paginated
I'd go with #1 almost every time, maybe adjusting the max intset size in the Redis config, or #3 if I was okay using more memory (I usually am).
- Josiah