加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何在缓存过期时阻止应用程序对数据库进行DDOS操作?

发布时间:2020-12-13 17:26:13 所属栏目:PHP教程 来源:网络整理
导读:我们有一个高流量的网站,就像StackOverflow一样,在memcache中有对象缓存.该站点使用 PHP(CodeIgniter)和MySQL构建. 每当TTL(生存时间)在作为每个页面加载的一部分的缓存对象上到期时,此时的所有页面加载都会导致对数据库的查询,从而有效地在数据库上执行DDOS
我们有一个高流量的网站,就像StackOverflow一样,在memcache中有对象缓存.该站点使用 PHP(CodeIgniter)和MySQL构建.

每当TTL(生存时间)在作为每个页面加载的一部分的缓存对象上到期时,此时的所有页面加载都会导致对数据库的查询,从而有效地在数据库上执行DDOS.

是否有某种方法只有一个页面加载重新获取数据并让其他页面加载等待缓存由第一个更新?

我的第一个想法是让一个随机函数工作,让一些页面加载获取数据,并让其他人等待一秒钟再重新检查缓存.但肯定有一个更好的方法.

解决方法

您可以使用此代码中的算法: https://github.com/jamm/Memory/blob/master/lib/Jamm/Memory/MemcacheObject.php#L230

>读取密钥和TTL
>如果TTL很小(少于5秒,对于
例如),尝试锁定特殊键(不是你正在阅读),就像
‘_Update.{name_of_key}’
>如果锁定成功 – 计算(或
read)新值和刷新缓存
>发布更新密钥.

因此,只有一个进程将从DB中读取新值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读