Uma das coisas que você aprende rápido ao trabalhar com redis é que você pode projetar sua estrutura de dados em torno de suas necessidades de acesso, especialmente quando se trata de relações (afinal, não é um banco de dados relacional)
Não há como pesquisar por "valor" com complexidade de tempo O(1), como você já notou, mas existem maneiras de abordar o que você descreve usando redis. Aqui está o que eu recomendaria:
- Armazene seus dados de usuário por ID de usuário (por exemplo, um hash) como você já está fazendo.
- Tenha um conjunto adicional para cada ID de professor contendo todos os IDs de usuário que correspondem ao ID de professor em questão.
Isso pode parecer duplicar os dados da relação, já que seus dados de usuário teriam que armazenar o ID da palestra, e seus dados de aula armazenariam os IDs do usuário, mas esse é o preço (pequeno) a pagar se alguém for construir relações em um não - armazenamento de dados relacional como redis. Em termos práticos, isso funciona bem; a memória raramente é um gargalo para conjuntos de dados pequenos (pense em milhares de ids).
Para ter uma ideia melhor de como as pessoas estão usando o redis para modelar aplicativos com relações, recomendo a leitura de Design e implementação de um clone simples do Twitter e o código-fonte do Lamernews, ambos escritos pelo autor do redis Salvatore Sanfilippo.