2013-09-04 10 views
1

node.js + javascript 프런트 엔드에서 하나의 웹 사이트에 대한 채팅을 구현했습니다. Perisisting 대화에 Redis를 사용하기로 결정 했으므로 사용자가 페이지를 새로 고침 할 때 모든 대화를 가져올 수 있습니다. 대화는 서버 세션을 기반으로 저장해야합니다.redis에서 node.js 채팅 메시지 저장. 방법?

목록이있는 목록에 해시를 값으로 저장하는 방법이 있는지 알고 싶습니까? 같은 예를 들어 , 뭔가 : 나는 키 [SENDER_ID] # [receiver_id]와 해시의 형식으로 대화를 저장하고 싶었

client.rpush("conversations:"+conversation_id, message); 

. 그런 식으로 누군가가 로그인 할 때 모든 대화를 끝내고 그 사용자가 참여자가되는 모든 대화를 얻습니다. 이렇게하면 모든 대화를 끝내고 사용자에게만 대화 할 시간이 필요합니다. 이것이 성능에 어떤 영향을 미칩니 까?

또는 두 번째 방법은, 어쩌면 더 좋은 방법은 형식으로 사용자에 대한 메시지를 저장하는 것입니다 :

rpush(user_id, {sender: sen, receiver: rec, content: con, timestamo: tmstp}) 

이 방법은 내가 쉽게 사용자의 모든 대화를 recostruct와 사용자가 로그인 할 때 그들에게 보여줄 수의 장점. 이 방법은 모든 사용자 대화를 가져 오는 데 시간이 덜 필요하다는 것입니다 (목록에서 직접 가져옴).하지만 동일한 메시지가 보낸 사람 및받는 사람의 메시지 목록에 두 번 저장되므로 더 많은 공간이 필요합니다.

더 나은 접근 방법은 무엇입니까?

+0

왜 정규 데이터베이스를 사용하지 않습니까? 그들은 쿼리에 능숙합니다. –

답변

0

이 문제에 대한 아이디어가 있습니다. 모든 메시지 (사용 가능한 형식 포함)를 redis로 채널에 게시하고 원하는 언어로 구독자를 만들어 배치 메시지로 DB에 저장하십시오.