缓存技术
明教第三十四代觉主
资深工程师,擅长领域包括后端开发、微服务架构、性能调优及云原生SaaS平台建设等。
展开
-
redis错误使用一:存储单key过大的值
前段时间优化线上业务代码时,发现前端一处页面的请求很缓慢,平均时延也在几百ms左右,平且这个接口的数据是缓存在redis中的。结果利用redis客户端工具,连接redis实例,查看这个数据,发现点击后,客户端直接崩溃、卡死了。后来通过命令行查询,发现这个单key返回的数据结果超级大(一般建议小于10kb),有接近700kb!终于定位到原因了。 我们知道,redis早期版本(6.0以前)内部线程模型是基于单线程的,往往业务系统的访问量都很高,为了提升查询速度,才将数据存储在r...原创 2020-07-31 16:47:52 · 62605 阅读 · 3 评论 -
Cache2j:进阶之Stats讲解
Stats用来统计缓存命中情况,包括命中数量hitCount,未命中数量missCount及重新加载的次数reloadCount./** * 缓存统计信息,含命中次数,未命中次数及命中率。 * @author zxm * @since 2018.02.01 */ public final class Stats { private AtomicLong hitCount = new...原创 2018-02-09 10:23:05 · 62240 阅读 · 1 评论 -
Cache2j:进阶之Monitor讲解
Monitor在框架内部由一个后台的守护线程实现,基于用户的配置定时执行缓存淘汰任务,定义如下:/** * 缓存淘汰监控器 */ public interface Monitor { void processMonitor(); void start(); void stop(); void startIfStop(); boolean isRunnin...原创 2018-02-09 10:20:09 · 62089 阅读 · 1 评论 -
Cache2j:一款轻量级的进程内缓存框架的实现
背景最近比较闲,阅读了一些开源项目,受到一些启发,于是萌生了自己开发一款轻量级的缓存框架的想法。目前业界成熟的缓存系统很多,如分布式缓存系统redis、memcache,本地缓存系统如guava cache、oscache、ehcache等,都有自己的适用场景及优缺点,多的不做评论(都是开源产品,自然是十分成熟和优秀的了)!cache2j这个名字是项目开发完成后,作者本人取的,本意是“cache ...原创 2018-02-08 17:10:33 · 62214 阅读 · 1 评论 -
Cache2j:进阶之CacheListener讲解
CacheListener:缓存对象移除的通知器,由用户自己根据业务需求实现,当缓存对象被移除时,会回调其内部的callback方法,将对象的相关信息返回给业务。 /** * 对象缓存的监听器,当缓存被淘汰时,内部会回调监听器的callback方法,返回缓存对象的相关信息 * The listener of the object cache, when the cache is elimin...原创 2018-02-09 10:15:21 · 62351 阅读 · 1 评论 -
Cache2j:进阶之CacheBuilder讲解
CacheBuilder是缓存Cache实例的构造器,通过它可以设置相关属性,并利用build方法生成对象。内部属性:public final class CacheBuilder<K,V>{ private CacheListener listener; private MonitorType type; private Stats stats; l...原创 2018-02-09 10:11:02 · 64542 阅读 · 2 评论 -
cache2j:持久化机制实现
作为内存缓存框架,持久化能力并非其关键特性,目前cache2j支持的持久化机制是“定时全量快照备份”的形式,类似redis的rdb持久化机制,优点是如果有数据备份的需求,则机器重启后数据恢复的速度较快,且性能较好(相比于AOF形式);缺点是最后一次快照备份可能会发生数据丢失的风险。 cache2j持久化机制的实现主要依赖的桥梁就是内部的MessageQueue,其底层实现是基于jdk自带的无界非...原创 2018-07-31 14:49:28 · 62100 阅读 · 1 评论