我正在laravel中的一个网站上工作,其中正在从数据库中加载当前计数器值。然后用户单击按钮以增加分数。
但是,由于该网站在任何给定时间都有大约4000个并发用户,因此数据库连接在服务器上造成了巨大损失,并导致超时。
如果我从txt文件中加载当前乐谱,然后将其写回到同一文件中,会更好吗?
还是应该使用Application变量存储分数?
我尝试使用缓存,但是它没有提取最新值。由于用户数量的原因,数据库优化也不起作用。
我正在寻找一种无需数据库使用即可显示和递增计数器的最佳方法。
答案 0 :(得分:0)
数据库会做得更好。 NoSQL数据库非常适合您的用例。您可以使用Redis,它将数据存储在内存(RAM)中,这意味着读写操作将比在辅助磁盘(硬盘)中运行的其他数据库快得多。
Redis本身支持使用INCR
命令的数据结构来增加值。 INCR
将键处存储的数字加1。如果该键不存在,则在执行操作之前将其设置为0。
例如,拥有该值的密钥为my_counter
。您可以像这样redis-cli
一起玩耍。
redis> SET my_counter "10"
"OK"
redis> INCR my_counter
(integer) 11
redis> GET my_counter
"11"
幸运的是,有一个Laravel的Redis客户端。您可以在这里阅读:
https://laravel.com/docs/5.8/redis
祝你好运:)
编辑1:
如果大量用户导致服务器速度下降,则可以在新数据库旁边设置其他服务器和体系结构选项。例如水平和垂直缩放。
参考文献: