V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yeyeye
V2EX  ›  PHP

PHP+MYSQL 用什么方式缓存要频繁写入的数据好,还是直接写入数据库?

  •  
  •   yeyeye · 2016-01-22 17:39:07 +08:00 · 7056 次点击
    这是一个创建于 3260 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一查搜索引擎,清一色的用文件做缓存,或者内存缓存类(但是需要其他插件来辅助),普通的 php+mysql 虚拟主机是没有的。

    我有一些数据需要频繁写入,比如想记录每个 IP 访问次数,用来限制访问频率,但是这样修改文件的频率会很高很高,也没有更好的方式存储数据呢
    24 条回复    2016-01-23 22:13:58 +08:00
    Zzzzzzzzz
        1
    Zzzzzzzzz  
       2016-01-22 17:47:00 +08:00   ❤️ 1
    没中间件的话最多插入 memory 表或者 crontab 跑命令分析日志了, 虚拟主机真的无所谓追求性能了.
    keinx
        2
    keinx  
       2016-01-22 18:42:45 +08:00   ❤️ 1
    存到 session or cookie 里,判断 IP 访问次数。不知道你是想做什么。
    其实站库分离,存到数据库还是不错的,频繁写入文件可能硬盘 IO 会很高。
    quericy
        3
    quericy  
       2016-01-22 21:10:26 +08:00   ❤️ 1
    用 redis 或者 memcached.只存储 ip 和访问次数,过期销毁,内存占用应该不会太大.
    ab
        4
    ab  
       2016-01-22 21:53:35 +08:00   ❤️ 1
    memcached
    yeyeye
        5
    yeyeye  
    OP
       2016-01-22 22:02:57 +08:00
    @keinx
    @Zzzzzzzzz 主要是我的 wordpress 博客,内容不多,但是 wordpress 很慢,最近查日志发现垃圾流量真多,常常还有扫漏洞的,还有坚持几天几夜扫后台密码的(虽然被插件拦住了,但是也消耗 0.x 秒的时间去处理,因为 WP 的结构的关系,根本没办法快速处理,缓存插件不缓存 404 页面,也全是交给 index.php 处理的,看着非常蛋疼!)

    蛋疼是有的扫描软件会控制频率, 1 秒一次,有的 1 秒 10 次(一天就数万动态页面啊),想想如果我是 IDC ,我也不能忍服务器被这样搞死(如果一个服务器上架了很多 WP 站点,那得浪费多少性能啊……),难怪以前被强烈要求删除后台登陆文件……甚至越疱代俎去限制访客!

    无奈之下在 wp-config 里做了一个防火墙,防住了大部分垃圾请求,恶意请求,自动黑名单机制(行为不同期限也不同,我是 php 菜鸟,每个指令都翻手册的),但是在日志里有些请求看不出毛病,还好这类虽然不知道为什么,但是也不干坏事,可以说基本上完善了。



    但是在心里还是有点不舒服,第一个是防不住日志里看起来正常的请求(我的规则是参照日志写的,所以不影响正常使用,但是干坏事的一下就抓出来了),有的看不出毛病但是频率非常之快,跟攻击差不多了,我就想消灭这类, session 可以里写的话可以防住正常用户按住 F5 的情况,防不住那些不带 cookie 的请求(不带 cookie 那么 session 也废了),所以想把每个 IP 的频率记录下来,这样就能做分析然后丢入黑名单了。(由于前台没有登陆功能,所以 session 也没开启,所以比较想通过 IP 访问频率来掌控)

    最终就出现了这个主题……似乎最终还是只能频繁写入数据库或者文件了……这时候我就会怀念一下 ASP 的 application 变量了(站点级别的变量,如果不删除掉,重启 IIS 之前一直会存在,任何访问该站点的请求都可以调用)
    yeyeye
        6
    yeyeye  
    OP
       2016-01-22 22:08:49 +08:00
    @ab
    @quericy 似乎最终还是只能频繁写入数据库或者文件或者无视了(虚拟主机没有 redis 或者 memcached)……这时候我就会怀念一下 ASP 的 application 变量了(站点级别的变量,如果不删除掉,重启 IIS 之前一直会存在,任何访问该站点的请求都可以调用,真正的全局变量!)
    xuhaoyangx
        7
    xuhaoyangx  
       2016-01-22 22:09:53 +08:00   ❤️ 1
    不要强迫症,其实我觉得 wp 卡和这些没多大关系
    yeyeye
        8
    yeyeye  
    OP
       2016-01-22 22:27:51 +08:00
    @xuhaoyangx 本身服务器也有关系,但是 wp 有些地方是需要我们自己去改善,比如说 404 页面,那些自动扫描后台的,扫描上传漏洞的,这些请求全是 index.php 在处理,然后整体运行起来后检查下模板里的 404 页面主题,而一般的 404 页面主题其实和普通页面没什么区别的(只是没有文章列表或者文章内容,页眉,侧栏还有页脚都是有的,也就是说这就是个普通页面,还是缓存插件不缓存的那种),暴力破解后台密码的,要是完全不防范,每天我的一个小站就有几万次的后台登陆,也是没办法缓存的,你想想如果我有几万的 PV ……那我可高兴死了,结果每天有几万的 PV 是属于被攻击的,想想都觉得 IDC 随时都可能因为心情不好把我的站给封了。。。

    还有该死的 xmlrpc ,一个请求竟然可以尝试 500 次密码组合!!!

    所以一方面是强迫症 一方面是真的很不爽。
    keinx
        9
    keinx  
       2016-01-22 23:00:12 +08:00   ❤️ 1
    那你可以试一下使用 360 的那个 网站安全防火墙功能,或者在.htaccess 里面加入 IP 规则。
    xuhaoyangx
        10
    xuhaoyangx  
       2016-01-22 23:31:44 +08:00   ❤️ 1
    xmlrpc 的确是一个比较恶心的地方,我好像是把这东西关掉了?反正现在没这些痛点,我更多的是再防火墙层面,加了一些脚本和一些黑名单,现在访问也是不太好,但是基本确定是系统有问题导致 IO 延迟大,你可以尝试对 log 做些脚本动态加入防火墙进行防护
    xuhaoyangx
        11
    xuhaoyangx  
       2016-01-22 23:33:04 +08:00   ❤️ 1
    @yeyeye 其实想了下-。-你用应用层层面拒绝访问,那还是有‘很大’的消耗额...
    yangqi
        12
    yangqi  
       2016-01-22 23:36:18 +08:00
    都是机器人, fail2ban 装上, xmlrpc 禁用就能杜绝很大部分的机器人了
    iyaozhen
        13
    iyaozhen  
       2016-01-23 00:01:31 +08:00   ❤️ 1
    楼主你这想多了吧。扫描就让它扫呗。一天几 w 而已,才多少呀。装个 super cache 插件,打开速度飞快。

    而且你这标题和你需求对不上。
    phperstar
        14
    phperstar  
       2016-01-23 00:06:24 +08:00   ❤️ 1
    感觉这个测试结果,可以作为参考: http://www.metsky.com/archives/313.html
    phperstar
        15
    phperstar  
       2016-01-23 00:09:54 +08:00   ❤️ 1
    @yeyeye 为什么不给后台程序入口文件,加上可以访问 iP 限制。非你自己 ip 直接 exit,这样就打消了你的顾虑吧
    yeyeye
        16
    yeyeye  
    OP
       2016-01-23 01:02:05 +08:00
    @keinx 没备案啊,国内的物价太高了,云减速伤不起(哈哈,最近 v2 都说国内的免费 cdn 是云减速),以后备案了试试看


    @xuhaoyangx 主要是一般人又不知道这些,我用 WP 都 7 年多了,因为 php 实在是太菜了不爱折腾,最近查东西才发现的(原谅我吧),没办法,一般的 php 空间除了 php 就是 mysql ,能不能访问日志文件夹还是个问题(回头试试看有没有权限)

    应用层层面处理这个也是没办法 上面也说了,普通 php 空间啥都没,单纯我的脚本还是不消耗很多资源的, wp 首页 0.8 秒处理时间, wp 文章页面 0.4 秒处理时间,(取自不缓存的运行时间,文章总数不到 800 篇),这样的配置之下,我的防火墙脚本整体运行时间是 0.0002-0.0004 秒之间(这样的垃圾空间竟然防火墙脚本每秒可以处理 2000 个页面), wp-config 文件在 WP 是比较前面了,执行也是在最前面的,这时候数据库都没连接呢,非常适合拦截,所以还是非常快的,虽然不知道其他部分花费了多少内存 cpu 和时间,但是想必不多,我用 chrome 看了下,如果当前是第一次访问,拉黑掉,整个连接过程是 50ms , TTFB 是 24ms ,拉黑后访问整个请求从开始到结束是 29-35ms (服务器在香港,我在东莞),如果全天都是拉黑的 IP 访问我,仅仅从 php 方面可以顶住几百万个 PV , TTFB 是 24ms (简直吓人,),至于 http 服务器能顶住多少,因为网速慢影响多少,我就不知道了,这么说来其实是消耗很高的,如果直接从 http 服务器去拦截,效果完全不同了(我的拦截是直接改了 http 代码成 404 ,直接 exit ,所以其实还是走完了整个过程,但是没想到这么快……)。所以我直接考虑过把黑 IP 通过 http 登陆控制面板提交上去,但是看了下大部分坏人扫描几分钟或者十几分钟就不玩了,我这样说不定浪费更多资源,少的情况下,只请求 3-10 次,这样感觉有点得不偿失,而且控制面板不是每家都一样的,以后也不通用,我觉得太浪费时间处理和我写出来了(原谅我是个菜逼,之前要犹豫很久,想通了所有逻辑再拖一拖才开始写,修修改改好不容易逻辑写好了,自以为不会报错的,提交上去一看瞎了,一个个改错哈哈, php 还是写的太少了)

    讲了这么多,目前就是在犹豫怎么处理频率这一块,实在没什么好办法就搁置算了,反正是个小站,也没人专门去攻击我的。能做到现在的地步我很满足啦~(之前每天都有人扫啊扫 暴力破啊暴力破,经过这个防火墙,暴力破解的一个都没了,后台有个插件专门负责抓坏人的,现在一个都抓不到了,以前每天都有几个,其中会有个把个会尝试几千次或者连续几天几夜的来)


    @yangqi 恶意请求目前大部分被我的墙干掉了,所以这块不担心了,基于前面说的原因,如果不太好解决,就不解决了。 fail2ban 也是要服务器支持,专门脚本去检测,目前没办法做到,不管怎么说这也是个好东西,谢谢你,谢谢各位

    @iyaozhen 我试过了, 404 页面和后台暴力破解的页面,都是要几百毫秒的 php 处理时间(其实我只测试了 404 页面,每次都会重新生成页面,不会被缓存插件缓存的,登陆页就更没可能缓存了),几万个几百毫秒的处理时间,我实在是觉得太浪费了,如果这个代价用在正常访客上,有这么大流量我真是会超级开心。

    @phperstar 目前对登陆页面也有做特殊处理,所以扫描软件会认为它不存在(所以就不进行下一步操作进行破解了,正好 wp 升级不会升级 wp-config 文件,它又必须被包含,逻辑都写在这里了),因为是特殊处理,所以我自己使用方式是没有任何改变的……真不担心被扫出密码,毕竟它猜不到我的用户名(相关获取用户名的地方也干掉了)

    你的测试我看了下,确实很不错,说明读写文件是非常快速的(其实写这个防火墙的时候,我也注意到读写小文件时间其实非常快,合理使用的话根本没理由会造成高负载啊,以前可能是受一些别人定的规则误导了,心理上没有自信)
    yeyeye
        17
    yeyeye  
    OP
       2016-01-23 01:07:12 +08:00
    @iyaozhen 重申一下,我就想把 IP 和每次请求的频率用数据库或者文件存起来,然后再用 php 去判断,这样每一个 PV 都会对文件 /数据库进行编辑,所以有所顾虑
    yangqi
        18
    yangqi  
       2016-01-23 01:08:13 +08:00
    @yeyeye wordpress 有插件, fail2ban 规则都帮你写好了,直接复制过去就行了。
    aivier
        19
    aivier  
       2016-01-23 01:10:15 +08:00
    管它干嘛?设置个强密码,然后安心写博客就好了

    主机商不开心的话他们自己屏蔽恶意 IP 就好了
    yeyeye
        20
    yeyeye  
    OP
       2016-01-23 01:13:15 +08:00
    @yangqi 我觉得它非常适合干这个 但是暂时是虚拟主机 没有这个东西可以用 所以想自己用 php 来弄
    xuhaoyangx
        21
    xuhaoyangx  
       2016-01-23 01:18:33 +08:00
    @yeyeye 好吧忘记你是空间了
    v1p
        22
    v1p  
       2016-01-23 13:36:28 +08:00 via Android
    WP 的登陆文件是可以改名的,别人找不到登录入口也就不存在测试密码的问题了
    realpg
        23
    realpg  
       2016-01-23 18:25:54 +08:00
    @yeyeye
    如果不搞啥违法乱纪的东西,备案现在 easy 到爆好不好
    阿里云,如果你有个拍照效果稍微差不多一点的手机,家里还有个打印机,根本门都不用出。
    yeyeye
        24
    yeyeye  
    OP
       2016-01-23 22:13:58 +08:00
    @realpg

    是不是扯远了……我很了解备案现在很容易,我也没说我坚持不备案,我也有备案过的,只不过空间一直用的是国外的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1000 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 21:02 · PVG 05:02 · LAX 13:02 · JFK 16:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.