guava LoadingCache 的用法
这段代码主要功能是实现使用guava的LoadingCache记录一个ip在一段时间类反复登录失败的次数,如果超过10次则在规定时间(expiration=1800)内禁止登录(Blocked);使用方式比较简单,没事学习用的。
引入的pom文件:
<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>22.0</version> </dependency>
Java实现代码:
package com.merce.woven.service;import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import org.springframework.stereotype.Service;import javax.annotation.PostConstruct; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit;@Service public class LoginAttemptService {//缓存有效期1800秒private int expiration = 1800;private final int MAX_ATTEMPT = 10;private LoadingCache<String, Integer> attemptsCache;//服务启动的时候初始化value值为0;这样如果给的的key不存在,则能取到初始化值0@PostConstructprivate void init(){attemptsCache = CacheBuilder.newBuilder().expireAfterWrite(expiration, TimeUnit.SECONDS).build(new CacheLoader<String, Integer>() {public Integer load(String key) {return 0;}});}//删除对应key的内容信息public void loginSucceeded(String key) {attemptsCache.invalidate(key);}//每个key loginFailed一次,则对应value+1public void loginFailed(String key) {int attempts = 0;try {attempts = attemptsCache.get(key);} catch (ExecutionException e) {attempts = 0;}attempts++;attemptsCache.put(key, attempts);}//如果给的key的value值大于了MAX_ATTEMPT 则表示blockedpublic boolean isBlocked(String key) {try {return attemptsCache.get(key) >= MAX_ATTEMPT;} catch (ExecutionException e) {return false;}} }
guava LoadingCache 的用法相关推荐
- 谷歌Guava LoadingCache介绍
在工作中,加Cache是非常常见的一种性能优化手段,操作系统底层.计算机硬件层为了性能优化加了各种各样的Cache,当然大多数都是对应用层透明的.但如果你想在应用层加Cache的话,可能就需要你自 ...
- google guava事件总线用法
Google EventBus 组成部分 事件(什么类型的事件); 事件监听器,即事件处理程序(响应); 注册事件监听器(register); 触发事件(trigger/post); 实例 事件,可以 ...
- Guava Cache用法介绍
背景 缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用.在日长开发有很多场合,有一些数据量不是很大,不会经常改动,并且访问非常频繁.但是由于受限于硬盘IO的性能或者远程网络 ...
- caffine guava区别
Caffeine/Guava性能测试 处于性能优化考虑,项目准备将本地缓存从guava cache 转到caffeine cache,于是着手对caffeine进行了一波调研,首先通过一系列测试,通过 ...
- LoadingCache使用
guava LoadingCache介绍 Guava Cache : LoadingCache是一个本地缓存. 优点 线程安全的缓存,与ConcurrentMap相似,但前者增加了更多的元素失效策略, ...
- java-multimap使用
在开发当中难免list存在嵌套的情况,通常的实现方式是使用两个for循环嵌套,这样使得执行步骤增加,大大降低了系统的性能. 项目背景: 存在te_questionmain表和te_questionsu ...
- 可以设置过期时间的Java缓存Map
前言 最近项目需求需要一个类似于redis可以设置过期时间的K,V存储方式.项目前期暂时不引进redis,暂时用java内存代替. 解决方案 1. ExpiringMap 功能简介 : 1.可设置Ma ...
- Google Guava 库用法整理
http://macrochen.iteye.com/blog/737058 参考: http://codemunchies.com/2009/10/beautiful-code-with-googl ...
- java guava map_使用googled的guava常见ImmutableMap、Multimap、Sets、Optional、Objects及Preconditions检查等用法...
一.前言 关于google的guava-19.0.jar开源包中非空检查Preconditions.checkArgument.Objects.toStringHelper对象转换为字符串toStri ...
最新文章
- c++运算符优先级_C语言入门教程-(6)运算符
- 这家研究院太年轻,竟跟世界级选手“叫板”
- 【Android 异步操作】Handler 机制 ( Handler 常用用法 | HandlerThread 简介 | HandlerThread 源码注释分析 )
- [小故事大道理] -- GoodMorning,Sir!
- MySql 中的常见问题解决方法
- 菜鸟教程python位运算符_NumPy 位运算
- vuepress 2.x 集成 element-plus
- 30万总奖金·垃圾分类挑战赛进入最后冲刺(附baseline完整分享)
- Android 系统(42)---使用BatteryHistorian分析和优化应用电量
- 启动go服务_使用Go构建TCP并发服务器,这种方式原来这么简单
- mysql yum 升级_CentOS 7中升级MySQL 5.7.23的坑与解决方法
- 西岛住宿软件测试,西岛踩坑记:寄存行李居然还要收费!听说要晋升5A,你觉得呢?...
- C# 利用iTextSharp画PDF
- 记一次windows下安装部署运维监控系统WGCOUD的步骤
- 《社会智能与综合集成系统》—第1章1.6节 智慧涌现
- python抢票软件源代码_一百多行python代码实现抢票助手
- Facebook开发者创建APP生成KeyHash
- Python教程笔录摘抄——基础
- 读《富爸爸穷爸爸》有感
- layui rate (评分组件)使用的一点经验分享