Использование redis для отправки статуса друга

Group 'groupvar' как фактор.

data <- structure(list(groupvar = as.factor(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 
                                    2L, 1L)), 
                       v1 = c(27L, 52L, 92L, 86L, NA, 19L, 94L, NA, 26L, 94L, 
                              NA, 58L, 96L, 74L, 8L, 66L, 65L, 41L, 70L, 21L, 64L, 40L, 17L, 
                              7L, NA, 14L, 63L), 
                       v2 = c(59L, 91L, 45L, 40L, 56L, 17L, 72L, 
                              78L, 19L, 62L, 87L, NA, 79L, 62L, 40L, 67L, 93L, 1L, 64L, 22L, 
                              NA, 98L, 44L, 85L, 67L, 88L, 92L), 
                       v3 = c(97L, 15L, 27L, 55L, 
                              86L, 66L, NA, 61L, 27L, 47L, 93L, 68L, 72L, 4L, 35L, 69L, 65L, 
                              NA, 83L, 60L, 42L, NA, 90L, 81L, NA, 27L, 60L)),
                  .Names = c("groupvar", 
                             "v1", "v2", "v3"), class = "data.frame", row.names = c(NA, -27L
                             ))

Затем используйте пакет мышей, предполагая, что пакет мышей правильно установлен.

library(mice)
imp <- mice(data)
complete(imp)

   groupvar v1 v2 v3
1         1 27 59 97
2         1 52 91 15
3         1 92 45 27
4         1 86 40 55
5         1 21 56 86
6         1 19 17 66
7         1 94 72  4
8         1 66 78 61
9         1 26 19 27
10        2 94 62 47
11        2  8 87 93
12        2 58 72 68
13        2 96 79 72
14        2 74 62  4
15        2  8 40 35
16        2 66 67 69
17        2 65 93 65
18        2 41  1 47
19        2 70 64 83
20        2 21 22 60
21        2 64 62 42
22        1 40 98 27
23        1 17 44 90
24        2  7 85 81
25        1 63 67 55
26        2 14 88 27
27        1 63 92 60
0
задан Supertiger 19 January 2019 в 13:11
поделиться

1 ответ

Вы используете тип хеша для хранения отдельной информации, и вы используете hgetall для ее получения, поэтому я предполагаю, что вы еще не знакомы с типами данных redis. Итак, сначала позвольте мне кратко объяснить три типа данных, о которых я буду говорить (все типы можно найти в документации здесь https://redis.io/topics/data-types-intro ):

  • Строка: простой тип ключ / значение, доступ к нему осуществляется с помощью set(key, value) и get(key, value)
  • Хэш: это набор ключей / значений, хранящихся под одним ключом redis. Полезно для хранения атрибутов объекта, например, вы можете иметь ключ userdata: userID и имя магазина, аватар, статус ... вместе с ним. Доступ к нему с помощью hset(key, field, value), hget(key, field), hgetall(key)
  • Набор: представляет собой набор уникальных строк, доступ к нему с помощью sadd(key, member), sismember(key, member), smembers(key)
[ 1121] Если вы собираетесь сохранить только онлайн-статус, было бы лучше использовать строковый тип с set, get и del (так как обычно большинство пользователей в автономном режиме большую часть времени, удалите их и сэкономьте место). Для этого простого ключа / значения redis на самом деле даже лучше, чем старый добрый memcache.

Если вы намереваетесь хранить больше пользовательских атрибутов (настроение, девиз, аватар ...), вам следует переименовать его в «userdata: userID», проверить с помощью hget("userdata:userID", "status") и использовать hgetall только для получения всех атрибуты.

Другим подходом может быть сохранение всех пользователей в наборе: sadd('users:online', userID) и проверка с помощью sismember('users:online', userID) или получение всех онлайн-пользователей с помощью smembers('users:online'). Предположим, вы храните всех друзей в другом наборе friends:userID, вы можете захватить всех онлайн-друзей пользователя с помощью одной команды пересечения sinter('friends:userID', 'users:online') - довольно мило и элегантно, IMHO, но это сложно с более различными состояниями и не работает с Redis-кластер.

1124 Я бы предпочел подход SET. Несколько хетгов тоже подойдут, пока не возникнут проблемы из-за одного парня (он всегда один), который имеет тысячи контактов и постоянно обновляется. В этот момент вы все еще можете ввести некоторые ограничения дружбы или кеширования.

0
ответ дан sui 19 January 2019 в 13:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: