lyragosa
2014-12-19 10:12:02 +08:00
渔来啦!
我来介绍一下我的网站的处理逻辑。
首先介绍背景,我的网站是我大二的时候第一次学php的时候写的,那个时候我啥都不懂所以写了很多历史遗留代码,各种for100循环里面读100次数据库啥的。五年过去了依然正常运行,不过内核改了八次期间换了3个自制框架就不详谈了。相信这个逻辑比大多数v2er的网站糟糕,因为大家通常都会把小时候写的代码完全不要,长大了重写,而我是把一个小时候写的代码放到生产环境一直用,所以即使工作几年了也不能重写,只能在其上扩展。
解决方案是这样:
- 首先将所有mysql读取写入的操作迁移到mysql类上(没错,我当年连这个都不知道,全部用原生语法读写的)
- 制作两个方法:get和getCache,get是直接读,getCache是读redis
- 根据需求设定redis过期时间,比如用户信息缓存10分钟,用户名缓存4小时,用户列表缓存12小时,几乎固定的数据7天,这个作为一个参数附加到getCache方法
- getCache的操作:首先将SQL文的hash作为key,查询redis,如果有值则读取,如果没有就读数据库,并把这个值写入到redis(key为sql文的hash,val为结果的json)。
- 将原来的程序里面的一部分get改成getCache。
- 每过一段时间看心情清空redis数据库。
演示效果请看我个人资料中的网站,右下方的 xxx queries (xxx cached) 中的cached即为通过redis查询的数据。
请不要吐槽为什么某些页有几百条查询,这是历史遗留问题。