- 每个账号可以邀请新用户获得金币,现在存在用户通过修改手机手机设备号注册新用户来刷金币,server 这边有什么抵制措施
- 目前用 redis 存的 score 和 id ,通过排序获得排名, 然后通过id去数据库拿详细信息,我想再想把详细信息(5个字段)存在redis里, 但是不确定redis 能抗多少个用户,有这方面的数据参考吗
2: 这个看你服务器内存多大吧,以及用户数量。另外如果是排行榜的话没必要存储全部用户,前100名就行了吧。 另外用户更新信息的话就要更新数据库和resis
来自酷炫的 CNodeMD
@lovegnep 我有很多排行榜,都需要关联用户的基础信息(id, uid,username, level, headimgurl),并且榜单实时变化,任何一个用户都有上榜的可能, 如果只存部分用户,需要考虑的问题就复杂了,新用户的注册,每日排行榜的刷新……都有可能会漏掉
一般排行榜都是显示前100名呀。用户分数变化插入到redis的有序集合中,判断集合元素数量,如果超100则删除有序集合第一个元素(分数最低); 这也不复杂呀。
不管你有多少排行榜都可以采用这样来做呀。
@lovegnep 是把用户基础信息也塞进set里吗
@chenzeZzz 是呀。但是有序集合只能存储成员名字(字符串)以及分数,用户基础信息只能序列化后做为成员名字存进去了。
@chenzeZzz 感觉还是用用户ID做为成员名字吧,有序集合只存储用户ID及对应的分数。不过这样就需要到数据库取用户ID对应的用户信息了。
问题一:手机限制账号的问题
1. 可以考虑增加一些验证模块(比如滑块验证、验证码验证、短信验证等),提高注册成本;
2. 可以设置一个用户在同一个 ip 下一段时间内的的邀请数量;
问题二:redis 排行榜存储策略
数据量如果不大,随意搞;如果你的数据量比较大的情况:
1. 如果你的排名不用实时显示,可以跑个定时任务去定时更新 redis 里面的排行榜 id 数据集就行;
2. 如果你的排名需要实时显示,那就利用 redis 的的有序集合排序,不过排序的规则最好不要单一的以分数为条件,可以使用 分数 + (maxtime - 时间戳) 的方式来应对吧。
@lzwai 手机限制账号这边,想了一下,注册成本提高不太友好, 目前选择增加填写邀请码的门槛,比如完成新手任务。 redis 排名,用户体验而言,肯定是想实时的,本想把用户信息拼接乘key存储,不过用户的信息会变更,不能保证唯一性,关于 分数 + (maxtime - 时间戳) 的方式,maxtime 是什么意思,我用score做排序条件,score再加上附加条件吗
加短信验证成本很高吗
@wang-weifeng 目前是短信验证的,我理解的注册成本是绑定邮箱,填写昵称,生辰八字
@chenzeZzz 排行靠前的那肯定是 分数+x 的值要大,x 如果使用时间戳,那必然是要求相同分数,越早做的,排行越靠前,所以需要有一个 maxtime 来处理。
@lzwai 给分数一个小数会不会好一点,90.032 》 90.002,