乐趣区

关于redis:使用redis-stream实现im

https://github.com/lloydzhou/…

应用 redis stream 实现 im

利用 redis stream 存储最近音讯
同时监听 stream 实现音讯实时推送
应用 redis-module 实现,以达到更好性能
能够间接从 stream 拿到音讯构建出最近聊天列表以及好友名单
前端应用 indexedDB 长久化音讯,能够增量同步音讯

redis key

  1. u:<uid> hash, 寄存用户信息,例如 name/avatar 等
  2. s:<uid> stream, 这个队列用于接管 / 发送用户音讯
  3. c:<uid> sorted set, 用于寄存用户联系人(包含群组)
  4. gm:<gid> set, 用于寄存群用户 id
  5. gs:<gid> stream, 用于接管 / 发送群音讯
  6. gi:<gid> hash, 寄存群信息,例如 name,还有一些配置信息(例如加群是否须要验证?)

redis module

redis module 实现 IM

IM.RECIVE

IM.RECIVE [uid] BLOCK [ms] COUNT [count] START [start]
获取历史音讯,以及监听新的音讯

IM.MESSAGE

IM.RECIVE [GROUP | USER] [uid | gid] [mid]
获取单条音讯

IM.SEND

IM.SEND [uid] [tuid] [field value] [field value …]
发送单聊音讯

IM.GSEND

IM.GSEND [uid] [gid] [field value] [field value …]
发送群聊音讯

IM.USER

IM.USER [uid]
(get user info) 获取用户信息
IM.USER [uid] [field value] [field value …]
(create user or update user info)

IM.GROUP

IM.GROUP [gid]
(get group info)
IM.GROUP [gid] [uid] [field value] [field value …]
(create group or update group info)

IM.LINK

IM.LINK [uid] [tuid]
(add to user contact list)

IM.UNLINK

IM.UNLINK [uid] [tuid]
(remove from user contact list)

IM.JOIN

IM.LINK [uid] [gid]
(add to user group)

IM.QUIT

IM.QUIT [uid] [gid]
(remove from user group)

GUI

  1. using tornado WebSocketHandler to create websocket.
  2. using svelte create simple ui to send message (using localStorage to save message)

docker

docker run --rm --name=redisim -p 8888:8888 lloydzhou/redisim
退出移动版