Jedną z rzeczy, których szybko się uczysz podczas pracy z redis, jest to, że możesz zaprojektować strukturę danych zgodnie z potrzebami dostępu, szczególnie jeśli chodzi o relacje (w końcu nie jest to relacyjna baza danych)
Nie ma sposobu na wyszukiwanie według „wartości” przy złożoności czasowej O(1), jak już zauważyłeś, ale istnieją sposoby na podejście do tego, co opisujesz, za pomocą redis. Oto, co polecam:
- Przechowuj dane użytkownika według identyfikatora użytkownika (np. w hashu), tak jak już to robisz.
- Miej dodatkowy zestaw dla każdego identyfikatora wykładowcy zawierający wszystkie identyfikatory użytkowników, które odpowiadają danemu identyfikatorowi wykładowcy.
Może się to wydawać duplikowaniem danych relacji, ponieważ dane użytkownika musiałyby przechowywać identyfikator wykładu, a dane wykładu przechowywałyby identyfikatory użytkowników, ale to (niewielka) cena, jaką trzeba zapłacić, jeśli ktoś ma budować relacje w -relacyjny magazyn danych, taki jak redis. W praktyce działa to dobrze; pamięć rzadko jest wąskim gardłem dla małych zestawów danych (pomyśl o tysiącach identyfikatorów).
Aby uzyskać lepszy obraz tego, jak ludzie używają redis do modelowania aplikacji z relacjami, polecam przeczytanie Projekt i implementacja prostego klonu Twittera i kodu źródłowego Lamernews, które zostały napisane przez autora redis Salvatore Sanfilippo.