PHP+MYSQL 用什么方式缓存要频繁写入的数据好,还是直接写入数据库? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yeyeye
V2EX    PHP

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

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

    我有一些数据需要频繁写入,比如想记录每个 IP 访问次数,用来限制访问频率,但是这样修改文件的频率会很高很高,也没有更好的方式存储数据呢
    div class="cell">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 禁用就能杜绝很大部分的机器人了
        13
    iyaozhen  
       2016-01-23 00:01:31 +08:00   1
    楼主你这想多了吧。扫描就让它扫呗。一天几 w 而已,才多少呀。装个 super cache 插件,打开速度飞快。

    而且你这标题和你需求对不上。
    iyaozhen
    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  
    PRO
       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     Solana     5194 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 05:45 PVG 13:45 LAX 21:45 JFK 00:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86