咨詢個(gè)與框架無(wú)關(guān)的問題,做游戲項(xiàng)目時(shí)需要保存用戶的積分值且在每局結(jié)束時(shí)實(shí)時(shí)返回排名和積分值。這塊用的是redis zset,但有個(gè)問題是游戲中關(guān)數(shù)很多,積分值也會(huì)很大(就是超過16位數(shù)),score中保存整數(shù)值超過16位后精度丟失排序也會(huì)不準(zhǔn)。
Redis的ZSET底層使用雙精度浮點(diǎn)數(shù)來存儲(chǔ)分值(score),而雙精度浮點(diǎn)數(shù)的有效精度為15到17位,所以確實(shí)會(huì)產(chǎn)生精度丟失的問題。
可以使用 bccomp 擴(kuò)展來進(jìn)行排序,把他放到靜態(tài)數(shù)組里面,或者單獨(dú)開啟一個(gè)進(jìn)程處理這個(gè)數(shù)據(jù),寫入數(shù)據(jù)的時(shí)候就做排序。
或者,你用c 重構(gòu)一下redis 簡(jiǎn)易版,讓他支持超過16位的大整數(shù)