Да, это возможно, но это увеличит сложность как прикладного уровня, так и хранилища данных до sh этого. Поскольку Redis
- это хранилище ключей / значений, запросы по нескольким условиям (страна, уровень игры, пол, ежедневные / еженедельные / ежемесячные популярные пользователи) являются признаком того, что вам может потребоваться другое решение этой проблемы. Когда вам нужно запросить несколько полей, вы продолжаете денормализовать свои данные, чтобы удовлетворить требования бизнеса. Redis - не одно из лучших решений для такого рода проблем.
Cassandra
(широкое хранилище столбцов, No SQL база данных) или PostgreSQL
(RDBM) будут решением, которое следует рассмотреть на этом этапе. . Вы можете продолжать писать / обновлять до Postgres и кэшировать свои результаты в Redis на определенное время.
Если вы хотите реализовать это в Redis; Вам необходимо использовать региональные стандарты как часть ключа.
У вас будет ключ users
для глобального отслеживания пользователей, и у вас будут такие ключи, как users:it
, users:es
et c. чтобы отслеживать их в соответствии с их страной. Всякий раз, когда вы устанавливаете / обновляете пользователя, вам необходимо установить / обновить его в наборе страны пользователя.
127.0.0.1:6379> zadd users 15 a
(integer) 1
127.0.0.1:6379> zadd users:it 15 a
(integer) 1
127.0.0.1:6379> zadd users 23 b 34 c
(integer) 2
127.0.0.1:6379> zadd users:es 23 b 34 c
(integer) 2
127.0.0.1:6379> zrevrange users 0 -1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> zrevrange users 0 -1 withscores
1) "c"
2) "34"
3) "b"
4) "23"
5) "a"
6) "15"
127.0.0.1:6379> zrevrange users:it 0 -1 withscores
1) "a"
2) "15"
127.0.0.1:6379> zrevrange users:es 0 -1 withscores
1) "c"
2) "34"
3) "b"
4) "23"
127.0.0.1:6379> zadd users 45 b
(integer) 0
127.0.0.1:6379> zadd users:es 45 b
(integer) 0
127.0.0.1:6379> zrevrange users:es 0 -1 withscores
1) "b"
2) "45"
3) "c"
4) "34"
127.0.0.1:6379> zrevrange users 0 -1 withscores
1) "b"
2) "45"
3) "c"
4) "34"
5) "a"
6) "15"
127.0.0.1:6379>
Одна из проблем с таким решением заключается в том, что когда вам нужен другой критерий для перечисления пользователей, вам необходимо перенести всех существующих пользователей в новую систему, размер ваших данных значительно увеличится.