Я работаю в приложении для андроид-чата, используя ejabberd в качестве сервера, а Redis - как базу данных для хранения сообщений чата. Я хочу сохранить сообщение о разговоре, From, To и некоторые поля в Redis, используя erlang client.I изучил redis. Тип списка данных лучше всего хранить в сообщениях чата. Но я не смог найти какой-либо пример для реализации с использованием List.Is, там есть пример для хранения сообщений чата в списке. Или скажите, есть ли другая альтернатива для хранения сообщений чата в Redis?Как хранить сообщения чата в Redis с помощью клиента Erlang?
ответ
Ну, вы можете хранить JSON в списке, но если у вас есть функциональность, когда пользователь может удалить сообщение, вам нужно будет найти точную позицию в списке, а затем удалить его. Если бы я был на вашем месте, я буду хранить его в ZSET, как: -
redis 127.0.0.1:6379> ZADD chat 1 "{from:me, msg: hello}"
(integer) 1
redis 127.0.0.1:6379> ZADD chat 2 "{from:you, msg: hello}"
(integer) 1
redis 127.0.0.1:6379> ZADD chat 3 "{from:me, msg: how are you}"
(integer) 1
redis 127.0.0.1:6379> ZADD chat 4 "{from:you, msg: good, how about you}"
(integer) 1
redis 127.0.0.1:6379> ZADD chat 5 "{from:you, msg: are you there}"
(integer) 1
redis 127.0.0.1:6379> ZADD chat 6 "{from:me, msg: yes i am}"
(integer) 1
redis 127.0.0.1:6379> ZRANGE chat 0 -1
1) "{from:me, msg: hello}"
2) "{from:you, msg: hello}"
3) "{from:me, msg: how are you}"
4) "{from:you, msg: good, how about you}"
5) "{from:you, msg: are you there}"
6) "{from:me, msg: yes i am}"
Вместо 1, 2, 3 (Score), вы можете использовать метку времени, так с помощью ZRANGE вы можете получить разговор легко.
В http://gitweb.tideland.biz вы можете найти ERRC, мой клиент Tideland Erlang/OTP Redis (ERRC). Помимо источников есть также единичные тесты, показывающие использование.
В вашей конкретной задачи я бы идентифицировать каждое сообщение с UUID (вы найдете его в моей библиотеке ERAS, также есть) и использовать хэши для сообщений:
HMSET msg::(UUID) timestamp ... from "foo" to "bar" text "Hello, World" ...
Это своего рода событие источники. И потом, для лучшей навигации, отдельных списков для всех сообщений или отправителем, получатель и т.п .:
LPUSH msgs::all (UUID) LPUSH msgs::from::foo (UUID)
LPUSH msgs::to::bar (UUID)
извлечений могут быть сделаны с LRANGE key start stop
. Здесь вы получите UUID сообщений, которые вы затем можете прочитать с помощью HGETALL (UUID)
.
- 1. Хранить историю чата с socket.io-redis
- 2. Как сохранить изображение в Redis с помощью Erlang
- 3. Частные сообщения чата с использованием Node.js, Socket.io, Redis в PHP
- 4. Сохранять сообщения чата в узле
- 5. Какая база данных NoSQL лучше всего хранить сообщения чата?
- 6. Распространение системы чата Erlang
- 7. Как хранить JSON в redis?
- 8. Эффективно ли хранить журнал чата с помощью массива в mongodb?
- 9. Как хранить данные объекта класса клиента в Redis Cache?
- 10. Redis - как хранить данные?
- 11. Сообщения об удалении Erlang
- 12. Как хранить сложную модель в redis с помощью рельсов?
- 13. Реализация системы чата: где хранить данные чата?
- 14. Хранить соединение с websocket для redis
- 15. Обновить объект словаря в redis кеше с помощью клиента StackExchange.Redis
- 16. Node chatroom, хранить сообщения в массиве или просто redis?
- 17. Хранить секрет клиента клиента
- 18. Сообщения, потерянные в erlang
- 19. интеграция клиента rabbitmq - erlang с модулем ejabberd
- 20. Erlang: Хранить PID в ETS
- 21. Как хранить клиента в редуксе?
- 22. Как хранить историю чата в PHP
- 23. Как списки Redis могут использоваться для реализации системы чата?
- 24. Оправы ошибка клиента чата
- 25. Выход клиента сервера чата
- 26. Обновить сообщения чата firebase
- 27. ошибки отображения сообщения чата
- 28. Как хранить данные с django redis
- 29. Как хранить простые массивы в Redis
- 30. Ищете клиента Erlang SMPP
Я использовал ваш ответ. Но небольшой недостаток: если я использую тот же самый член, что и предыдущий, присутствующий в ZSET, предыдущий будет заменен новым членом. обратитесь: http://redis.io/commands/ZADD –
Я понимаю, что вы имеете в виду, поэтому в этом случае вы можете добавить timestamp с сообщением на каждый msg, будет считаться другим ... –
Спасибо за ваш ответ. Я буду использовать его , –