5 回答

TA貢獻(xiàn)1884條經(jīng)驗 獲得超4個贊
如果你不想或者不愿意將redis引入到phpcms中。
我沒有對phpcms進(jìn)行過二次開發(fā),但是你可以在sql中直接進(jìn)行相加,并非使用代碼去實現(xiàn)相加
update student set score=score+1 where id = 1
這樣就避免了投票不準(zhǔn)確
如果有時間可以使用redis或者隊列去實現(xiàn)這個功能。

TA貢獻(xiàn)1847條經(jīng)驗 獲得超11個贊
如果只是保證數(shù)據(jù)正常, 那可以事務(wù)加排它鎖來搞.
按理說會先存到redis里面, 投票結(jié)束了才寫入數(shù)據(jù)庫

TA貢獻(xiàn)1783條經(jīng)驗 獲得超4個贊
簡單點就直接MySQL上鎖,但是這樣性能會低很多。
可以利用redis,讀也從redis讀,更新也是更新redis里(incr操作),
開個任務(wù)等到投票結(jié)束,把緩存中投票數(shù)寫入到MySQL中。

TA貢獻(xiàn)1805條經(jīng)驗 獲得超9個贊
這其實是涉及到隊列控制,鎖的一個應(yīng)用。即,當(dāng)一個用戶寫的時候,將其先鎖起來,不給其它人控制數(shù)據(jù),直到一個修改完成,然后才到下一個人進(jìn)行修改。
可以對 數(shù)據(jù)鎖 或者 數(shù)據(jù)隊列 查找下相關(guān)文章進(jìn)行了解。具體實現(xiàn)可以通過臨時表進(jìn)行隊列排序,逐個處理。當(dāng)然,如果處理高并發(fā)數(shù)據(jù),一般都會用牛刀諸如 redis 等數(shù)據(jù)庫進(jìn)行主從數(shù)據(jù)處理會比較好。

TA貢獻(xiàn)1803條經(jīng)驗 獲得超3個贊
看你的并發(fā)有多高、服務(wù)器性能有多好了。
簡單來講,有幾點可以處理你的問題。
使用
redis
列表記錄每個人的投票,異步去處理數(shù)據(jù)庫。數(shù)據(jù)庫加鎖,不過在高并發(fā)(如只有一臺低檔服務(wù)器+一萬個人
3s
內(nèi)同時訪問)時能不能扛得住要看信仰。優(yōu)化你的表設(shè)計,這張表盡量簡單一些,選擇適當(dāng)?shù)氖聞?wù)隔離級別。
服務(wù)器物理機(jī)換成硬盤讀寫性能更優(yōu)的。
- 5 回答
- 0 關(guān)注
- 815 瀏覽
添加回答
舉報