其实xdb解决的就是:一旦出现了数据同时访问的情况,那么锁互斥就有作用了,对这个数据的访问只能有一个线程进来。
而无锁方案,则是:路由到一个固定线程,现在想想,其实也没什么区别了。
以:排行榜结算为例子,那么上榜逻辑,根据榜单类型,始终到这个榜单所在的线程,那就没什么问题。同时,为了尽量让线程的压力均匀一点,直接根据rankType走自己固定的线程即可。
如果是发奖这种,则是:包装下Task,到玩家指定的这个线程中执行即可。
enum ERankType{
TYPE_1(1, "排行榜类型1"),
TYPE_2(2, "排行榜类型2"),
private int rankType;
}
这样子直接搞就行,其实想想,如果是:使用redis来做,redis本身就是单线程的,其实也都差不多,在redis服务器这里,都是挨个执行队列中提交过来的redis命令。