我在其他地方看到这种看看合适不,主要是采用了 redis的集合 + string 数据格式:
redis消息存储,选择合适的类型进行存储
用户定义的消息类型:
可以把这几个消息定义为频道 , 然后用户进行定义此频道利用此频道进行订阅消息
假设某个用户的uid 是 1
假设消息类型有
1:注册新用户 (channel_register)
2:用户抽奖中奖了(channel_lottery)
3:用户申请体现了(channel_deposit)
4:一个公共的消息所有用户都可以看的到(channel_common)
第一步:
我用集合存储所有的频道消息
127.0.0.1:6379> SADD member_channel channel_register channel_lottery channel_deposit channel_common
(integer) 4
127.0.0.1:6379> SMEMBERS member_channel
1) "channel_register"
2) "channel_common"
3) "channel_deposit"
4) "channel_lottery"
如何获取用户定义的消息呢?
我先设置一个用户定义的消息:
127.0.0.1:6379> set channel_register_1 "you register"
OK
127.0.0.1:6379> set channel_lottery_1 "lottery user_id is 1 "
OK
127.0.0.1:6379> set channel_deposit_1 "deposit user_id is 1"
OK
那么在获取用户定义的频道根据uid进行组合,然后使用
127.0.0.1:6379> get channel_register_1
"you register"
另外还有一种情况是:
我可能批量给用户发送消息 ,所以要把用户设置到一个频道里面 ,那么在新建一个集合,在和上面的集合 member_channel
取并集
//先定几个私有的频道
127.0.0.1:6379> SADD member_private_channel publish_money publish_score
(integer) 2
然后用户可以进行订阅这几个频道