следующий fifo в Redis

Я пытаюсь внедрить следующую систему в Redis, но я не знаю, как это сделать, так как мне также нужна какая-то система очередей. Вот о чем я думал:

пользователи A, B и C подписаны на пользователя X, поэтому, чтобы пользователь X мог проверять своих подписчиков, я подумал использовать такие списки:

X [A, B, C]

Как вы думаете, это было бы жизнеспособным решением?

Если бы это было так, у меня все еще есть проблема с «очередью», скажем, один человек может подписаться только на одного, если пользователь A решит подписаться на пользователя Y, элемент «A» должен быть удален из списка X.

Это может показаться запутанным: я не могу хорошо объяснить, так как я не местный житель. Также важно отметить, что множество этих операций будет выполняться в секунду, поэтому может ли Redis быть лучшим выбором для этого?

Заранее спасибо.


person john smith    schedule 15.09.2012    source источник


Ответы (1)


Я не понимаю, для чего вам нужны очереди? Вы можете использовать следующую структуру:

X:followers — набор, содержащий идентификаторы подписчиков.

X:follows — это строка, содержащая идентификатор пользователя, на которого подписан этот пользователь.

Когда X следует за Y, вы просто делаете:

srem $(X:follows) X
sadd Y:followers X
set X:follows Y
person atomAltera    schedule 15.09.2012
comment
Мне нужна очередь, чтобы определенный пользователь не мог подписаться более, скажем, на 5 человек. когда пользователь следует за кем-то другим, первый человек, который подписался, перестает быть подписанным. - person john smith; 15.09.2012
comment
Хорошо, тогда, конечно, вы можете использовать список с rpush для добавления элемента в хвост и lpop для удаления одного элемента из головы, llen для получения длины списка или jusr ltrim, чтобы обрезать список до необходимой длины. - person atomAltera; 15.09.2012
comment
да, проблема, о которой я думал, касается производительности. потому что таким образом каждый раз, когда я подписываюсь на кого-то другого, мне нужно перейти в другой список и удалить себя оттуда, может ли это привести к замедлению? - person john smith; 16.09.2012
comment
Нет, потому что Redis очень умен - person atomAltera; 16.09.2012