需要查看用户是否已经投票,如果已经投票,则不插入数据,如果未投票,则插入数据。在并发的条件下,有可能用户在同一时刻都查询到未投票,然后导致插入多条数据。
针对这样的情况,有什么好的解决方案么?
目前所知,用数据库的事务并不会对select进行加锁,所以事务可能并不能解决这类问题?
难道只有select for update这类型的可以么?有什么什么主流一点的方法
需要查看用户是否已经投票,如果已经投票,则不插入数据,如果未投票,则插入数据。在并发的条件下,有可能用户在同一时刻都查询到未投票,然后导致插入多条数据。
针对这样的情况,有什么好的解决方案么?
目前所知,用数据库的事务并不会对select进行加锁,所以事务可能并不能解决这类问题?
难道只有select for update这类型的可以么?有什么什么主流一点的方法
考虑并发期间锁的问题。投票不应加锁。会导致投票失败。
1、你可以实用队列,将投票信息加入到redis内,随后再同步到mysql内。
2、投票数量为独立的int字段。仅仅计数即可。
3、从redis读,往mysql内存。不过如果没有那么大的并发,建议不必多此一举。
总结下来流程基本如下
php -> 队列 -> redis -> mysql <- redis <- php <- 用户
5 回答3.3k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.4k 阅读
2 回答1.8k 阅读
3 回答2k 阅读
1 回答3.6k 阅读
用户id和投票id做成联合的唯一键即可.