好友系统设计

8 篇文章 0 订阅
7 篇文章 0 订阅

内容

好友关系

双向关系(我们使用的)
uid1uid2status
玩家id1玩家id1好友状态(0:是好友; 1:不是好友)

这种设计需要考虑数据被多个地方同时修改的问题、单做黑名单功能

单向关系 (更好的方案)
uidfriend_uidstatus
玩家id好友id状态(0:是好友; 1:不是好友;2:黑名单;3:申请中...)

这种设置可以只修改自己的数据,黑名单可以直接在表里体现,申请状态也可以直接在表里体现,可结合业务情况设计“好友申请”、“黑名单”功能

好友申请

这里可能是一个队列,存在多人修改,被加的人从队列取数据,可能后面删除数据(同意或拒绝);申请的人往队列添加数据,如果考虑这个问题,就要想好,怎样处理 申请好友(好友在线)?申请好友(好友离线)?

我们的尝试 

申请添加好友的人,动态的修改好友的数据,当然好友在线的话,可以给好友发一条消息,好友在线修改添加,如果离线,我们采取的方案是直接给这个好友添加数据(注意理论上这里会出现,玩家A修改玩家B的数据,玩家B此时刚好上线获取,发现拿的是老数据,导致数据错误),不过这个问题没有被提出来,是后面我自己分析出来了,后面跟做的人说,他感觉这个问题先这样,我相信大家都碰到过这种情况 ^ ^。

合理的方案

1.在缓存中给每个玩家设置一个请求队列,不管玩家时候在线

2.玩家上线获取队列消息(如果有新消息主动推送给玩家),可以结合业务,存入数据库,或则处理掉

3.设置队列中每个消息的过期时间

4.设置双向获取接口,每个玩家都可以获取自己的申请列表 和 别人对自己的申请列表

黑名单

先明确,是单向还是双向,如果是单向,考虑在很多业务中添加黑名单过滤操作;如果是双向,基本上两人不会有对方的信息,考虑的会少一些;具体可能需要结合上面 好友关系 那张表,如果黑名单在那张表上可以体现,这里就不用考虑了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好友管理系统是一个可以添加、删除、备注和展示好友系统。根据提供的代码,可以使用一个列表来保存好友的信息。每个好友可以用一个字符串表示,而分组可以用字典来表示,字典的键是分组名称,值是一个列表,列表中保存了该分组的好友姓名。 你可以使用以下代码作为python好友管理系统设计: ``` friends = [] def add_friend(): name = input("请输入要添加的好友姓名:") friends.append(name) print("好友添加成功") def delete_friend(): name = input("请输入删除好友姓名:") if name in friends: friends.remove(name) print("删除成功") else: print("好友不存在") def modify_friend(): old_name = input("请输入要修改的好友姓名:") new_name = input("请输入修改后的好友姓名:") if old_name in friends: index = friends.index(old_name) friends[index] = new_name print("备注成功") else: print("好友不存在") def show_friends(): if len(friends) == 0: print("好友列表为空") else: for friend in friends: print(friend) def main(): print("好友管理系统") print("1.添加好友") print("2.删除好友") print("3.备注好友") print("4.展示好友") print("5.退出") while True: option = int(input("请输入您的选项:")) if option == 1: add_friend() elif option == 2: delete_friend() elif option == 3: modify_friend() elif option == 4: show_friends() elif option == 5: print("关闭好友系统") break else: print("无效选项") main() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值