Open yeyeye0525 opened 3 years ago
计数器来限制5w数据量会不会没办法防止某个key的size超大的情况。感觉这个库也能适用这种场景:https://www.npmjs.com/package/lru-cache
计数器来限制5w数据量会不会没办法防止某个key的size超大的情况。感觉这个库也能适用这种场景:https://www.npmjs.com/package/lru-cache
平均一条数据1kb,5w条数据不会超过50M,当然如果size很大,就要考虑是否适用缓存,一般业务场景不会存在这种情况。
本文首发于:https://github.com/bigo-frontend/blog/ 欢迎关注、转载。
【node实战系列】自行实现应用缓存
背景
bigo前端开始推广bff,hello农场作为首个bff落地项目,历经2个月,完成了从0-1的落地实践。
【node实战系列】按照小模块拆分,从开发者的角度讲叙,如何进行bff高可用编码。
本系列文章,基于eggjs框架编码,使用ts语法,为了提升阅读体验,建议大家先了解一下eggjs。
系列文章
欢迎大家关注我们的github blog,持续更新。 https://github.com/bigo-frontend/blog/issues
缓存基本原理
缓存主要用来存放那些读写比很高、很少变化的数据,如字典信息,用户信息,组织机构信息等。应用程序读取数据时,先到缓存中读取,如果读取不到或数据已失效,再访问数据库,并将数据写入缓存。
其实我们经常接触缓存,譬如浏览器的localStorage、vue的computer、keep-alive等等。
在服务端也常用redis作为分布式缓存。
应用缓存
常用的分布式缓存包括Redis、Memcached,因为Redis提供的数据结构比较丰富且简单易用,所以Redis的使用广泛。
但是使用分布式缓存还是有一层外链调用,如果是使用应用缓存,存储在内存里,速度是最快的,我们可以把与用户信息无关的冷数据存储在应用缓存。
合理使用缓存,可以更好的改善系统性能,提高数据读取速度。
自定义应用缓存
nodejs没有提供缓存api,查阅资料发现一个缓存npm包node-cache,但是很久没人维护 了,并且缺少ts定义。
nodejs作为动态语言,对key-value天然支持,不考虑数据淘汰策略,可以考虑自己手撸一个简单应用缓存。
开撸
eggjs支持对application进行扩展,我们可以在
app/extend/application.ts
定义缓存1.setCache
2.getCache
3.cleanCache
业务使用示例
小结
综上,一个简单又实用的缓存功能就实现了。
数据访问通常遵循二八定律,即80%的访问落在20%的数据上,因此利用应用缓存的内存髙速访问特性,将这20%的数据缓存起来,可很好地改善系统性能,提高数据读取速度,降低存储访问压力。希望大家做好高可用实践,给用户带来顺滑体验。
欢迎大家留言讨论,祝工作顺利、生活愉快!
我是bigo前端,下期见。