Terry-Mao/gopush-cluster

有选择的存储消息,避免占用过多内存

Closed this issue · 3 comments

如果所有消息都存储到redis,占用的内存可能比较大。

我们的场景:

  1. gopush的消息存储,不适合做永久消息历史之用,我们自己会做消息历史的存储。
  2. 发送个人消息的时候,如果commet发现有订阅,就不用告知message去存储了
  3. 离线消息一旦被请求,也不必再次存储。这样每次获取离线消息,也无需传递消息id。

我不知道,上述场景是否通用,能否实现?比如通过配置文件设置,或者增加请求参数来实现?

谢谢

我们现在在做MySQL的存储实现了,估计这周就会发个版本,之后会考虑上HBase。

  1. 因为考虑到很多用户不活跃,所以利用存储引擎来实现这个LRU。
  2. 这个不能这样做的,因为有订阅,但是客户端的网络已经断网,心跳之后才能检测出来,所以必须要缓存。
  3. 也不能删除的,假设用户请求之后,但是客户端断网,消息也会丢失,而且我们的场景中存在,一个人开10个浏览器tab,那么推送的时候,10个人先后顺序都要到达的情况。
    另外的场景就是:比如QQ有多个设备,iPhone,Android,PC,WEB,订阅的都是QQ号,绝对不能因为一个人获取了,其他设备全部收不到的情况。

如果不想message 存储消息,可以传递expire=0,那么就不会持久化了。

好的,谢谢。场景的确是比较复杂,如果能够用Mysql,应该就OK了。