zhangzhen.life


详情缓存

Feb 12, 2021 11:19:18 PM


觉得这个网站每次请求都去请求mysql,还是在另一台外网机器的mysql,实在是没必要,于是想加个缓存。最先想的是用个类似guavacache工具类,或者直接WeakHashMap算了,但是万一修改了某个文章,过期又不好处理。想用redis,又觉得就为了只有几十篇文章,可能只存几十个string的值而运行专门一个redis实例有点小题大做。

正好又想到前些日子照着redis的功能按想象而写的一个应用,用netty实现了客户端和服务的通信,用了固定4字节表示数据长度+protocolbuff序列化后的数据内容作为通信协议,模仿了redisstringsetzsethash类型,其他功能还是没实现。还顺便加了个Object类型,用来存储java中的对象,用object.get(KEY,类型.class)来获取这个类型的对象,用object.set(KEY,类型的对象)来存储这个类型的对象。还加了个分布式锁的实现。

写了很多测试用例,基本覆盖率90%的功能,还没发现多大的问题,就是很多需要同步等待返回结果的操作如getlength之类的没找到什么好办法解决。

尽管这也不好解决缓存需要立即过期的情况,remove(KEY)的方法也照着redis抄了,但是这个网站实在太简单,连个后台管理界面都没有,就更没有在某个地方调用remove的理由,数据改动唯一的入口可能就是直接改数据库所以实在不好处理。现在能立即生效的就是先重启这个缓存应用然后重启网站应用。

但是还照着redis desktop manager想写个网页版的管理工具,可是三分钟热度已过。

到此刻,此网站的文章详情接口已加入了缓存。还有首页没加入缓存,原因如上所述。

还给详情页改了个淡紫色背景,还有get不存在的文章时加了个 404页面。

 


鲁ICP备2021000867号
鲁公网安备37132402371544号

抵制网络谣言,你我共同参与