Допустим, я проверяю информацию о некоторых моих пользователях каждую секунду. Мне нужно предпринять действия для некоторых из тех пользователей, которые могут занять больше секунды. Примерно так:
#pseudocode
users = DB.query("SELECT * FROM users WHERE state=5");
users.forEach(user => {
if (user.needToDoThing()) {
user.doThatThing();
}
});
Я хочу убедиться, что не буду случайно запускать doThatThing
для пользователя, у которого он уже запущен. Я подумываю решить эту проблему путем установки ключей кэша на основе идентификатора пользователя при обработке вещей
#pseudocode
runningUsers = redis.getMeThoseUsers();
users = DB.query("SELECT * FROM users WHERE state=5 AND id NOT IN (runningUsers)");
redis.setThoseUsers(users);
users.forEach(user => {
if (user.needToDoThing()) {
user.doThatThing();
}
redis.unsetThatUser(user);
});
Я не уверен, стоит ли мне ...
- Использовать один хеш споле для пользователя
- Использование нескольких ключей с mset и hget
Есть ли причина в производительности или бизнесе, которые я бы хотел, чтобы одна из них была другой? Я предполагаю, что мне следует использовать хеш, чтобы я мог использовать hgetall
, чтобы узнать, кто работает на этом хеше, а не scan
для чего-то вроде runningusers:*
. Это кажется правильным?