上午无意间打开了下自己的微信小程序,发现首页报错“接口数据异常”,用电脑打开对应 API 之后发现是 Redis 出现问题报错 OOM command not allowed when used memory > 'maxmemory'
,导致 PHP 打印出错误信息的字符串了(敲重点)。
那么这个时候就有两个问题需要解决了,首先是如何修复 Redis 的这个错误,其次是如何在代码中捕获错误,让 PHP 不再以字符串的形式打印错误。
第一个问题大概就是内存满了,默认只有 122M,我看了下其实存的大多数都是「网易云 API」的数据,网上查了一波资料给的建议就是切换数据淘汰算法,删除一些不常使用的数据,这里我选用的是 LFU,删除最不常用的,扩展就不考虑了,毕竟服务器本身内存就小...
vim /usr/local/redis/etc/redis.conf
:/maxmemory
maxmemory-policy allkeys-lfu
:wq
redis-cli shutdown
第二个问题我是使用了 PHP 的 set_exception_handler
函数解决的,函数本身接受一个参数为 Exception
对象的函数,只要 echo
包含错误信息的 JSON,在接口的相关位置调用一下就可以了,就是这代码写的有点烂吧,在这里不做详细讨论了。
解决完问题之后打算给前端做一些细节功能,想到之前 @Innei 给当前播放的歌曲做了一个进度条的效果,遂考虑加入一个展示“正在播放该歌曲”的效果。由于此前的播放按钮使用了 SVG + 伪元素的形式插入(因为那个编号也是 CSS 伪元素做的),于是想着能不能做一个动态的 SVG 并且插入进去。
最后就整了一个这样的 Demo,但是发现经过 SVGO 压缩后 rect
标签被压缩成 path
标签,导致该动画失效,发了个 推 吐槽,目前还没找到 Nuxt 打包层面可以解决的办法... 不经过打包器的话就只能放在 public
目录下,感觉怪怪的。