前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redisexpire过期原理java从零手写实现redis(三)内存数据如何重启不丢失?本节,让我们来一起学习一下如何实现类似guava-cache中的removeListener删除监听器,和类似redis中的慢日志监控的slowListener。删除监听器说明我们在两种场景下删除数据是对用户透
分类:
其他好文 时间:
2020-10-05 21:39:19
阅读次数:
22
Multiset集合 Multiset是什么?顾名思义,Multiset和Set的区别就是可以保存多个相同的对象。在JDK中,List和Set有一个基本的区别,就是List可以包含多个相同对象,且是有顺序的,而Set不能有重复,且不保证顺序(有些实现有顺序,例如LinkedHashSet和Sorte ...
分类:
其他好文 时间:
2020-09-17 23:25:32
阅读次数:
24
提到本地缓存,大家都能想到GuavaCache,他的优点是封装了get,put操作;提供线程安全的缓存操作;提供过期策略;提供回收策略;缓存监控。当缓存的数据超过最大值时,使用LRU算法替换。这一篇我们将要谈到一个新的本地缓存框架:CaffeineCache。它也是站在巨人的肩膀上-GuavaCache,借着他的思想优化了算法发展而来。本篇文章主要介绍CaffineCache的使用方式,以及Caf
分类:
编程语言 时间:
2020-09-17 21:31:11
阅读次数:
34
guava提供了Bytes/Shorts/Ints/Iongs/Floats/Doubles/Chars/Booleans这些基本数据类型的扩展支持,只有你想不到的,没有它没有的!对JDK集合的有效补充 对于程序员来说直接上代码比讲解来的更实际一些,这里注重聊一下 Ints 的使用,其他类型的都类似 ...
分类:
其他好文 时间:
2020-09-17 20:29:39
阅读次数:
29
1.写在前面 在guava的collect包下,存在着许多的以Forwarding开头的类,这些类都用到了一个设计模式——装饰器模式。 为什么是装饰器模式? 装饰器模式是为已有功能动态的添加更多功能的一种方式。它允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式, ...
分类:
其他好文 时间:
2020-08-11 17:30:26
阅读次数:
91
1.写在前面 在开始之前,说明一下该篇中重点在union、intersection、difference、filter的实现,对于Sets类中的其他方法如newHashSet、newConcurrentHashSet、newLinkedHashSet等方法等见名知意,不做介绍。 2.阅读内容 col ...
分类:
其他好文 时间:
2020-08-06 13:14:27
阅读次数:
75
异常传播 有时候,你会想把捕获到的异常再次抛出。这种情况通常发生在Error或RuntimeException被捕获的时候,你没想捕获它们,但是声明捕获Throwable和Exception的时候,也包括了了Error或RuntimeException。Guava提供了若干方法,来判断异常类型并且重 ...
分类:
其他好文 时间:
2020-08-02 12:42:35
阅读次数:
73
上篇文章(限流算法与Guava RateLimiter解析)对常用的限流算法及Google Guava基于令牌桶算法的实现RateLimiter进行了介绍。RateLimiter通过线程锁控制同步,只适用于单机应用,在分布式环境下,虽然有像阿里Sentinel的限流开源框架,但对于一些小型应用来说未 ...
分类:
其他好文 时间:
2020-07-31 12:31:48
阅读次数:
74
在分布式系统中,应对高并发访问时,缓存、限流、降级是保护系统正常运行的常用方法。当请求量突发暴涨时,如果不加以限制访问,则可能导致整个系统崩溃,服务不可用。同时有一些业务场景,比如短信验证码,或者其它第三方API调用,也需要提供必要的访问限制支持。还有一些资源消耗过大的请求,比如数据导出等(参考 记 ...
分类:
编程语言 时间:
2020-07-22 16:15:43
阅读次数:
70