这段代码主要功能是实现使用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 的用法相关推荐

  1. 谷歌Guava LoadingCache介绍

      在工作中,加Cache是非常常见的一种性能优化手段,操作系统底层.计算机硬件层为了性能优化加了各种各样的Cache,当然大多数都是对应用层透明的.但如果你想在应用层加Cache的话,可能就需要你自 ...

  2. google guava事件总线用法

    Google EventBus 组成部分 事件(什么类型的事件); 事件监听器,即事件处理程序(响应); 注册事件监听器(register); 触发事件(trigger/post); 实例 事件,可以 ...

  3. Guava Cache用法介绍

    背景 缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用.在日长开发有很多场合,有一些数据量不是很大,不会经常改动,并且访问非常频繁.但是由于受限于硬盘IO的性能或者远程网络 ...

  4. caffine guava区别

    Caffeine/Guava性能测试 处于性能优化考虑,项目准备将本地缓存从guava cache 转到caffeine cache,于是着手对caffeine进行了一波调研,首先通过一系列测试,通过 ...

  5. LoadingCache使用

    guava LoadingCache介绍 Guava Cache : LoadingCache是一个本地缓存. 优点 线程安全的缓存,与ConcurrentMap相似,但前者增加了更多的元素失效策略, ...

  6. java-multimap使用

    在开发当中难免list存在嵌套的情况,通常的实现方式是使用两个for循环嵌套,这样使得执行步骤增加,大大降低了系统的性能. 项目背景: 存在te_questionmain表和te_questionsu ...

  7. 可以设置过期时间的Java缓存Map

    前言 最近项目需求需要一个类似于redis可以设置过期时间的K,V存储方式.项目前期暂时不引进redis,暂时用java内存代替. 解决方案 1. ExpiringMap 功能简介 : 1.可设置Ma ...

  8. Google Guava 库用法整理

    http://macrochen.iteye.com/blog/737058 参考: http://codemunchies.com/2009/10/beautiful-code-with-googl ...

  9. java guava map_使用googled的guava常见ImmutableMap、Multimap、Sets、Optional、Objects及Preconditions检查等用法...

    一.前言 关于google的guava-19.0.jar开源包中非空检查Preconditions.checkArgument.Objects.toStringHelper对象转换为字符串toStri ...

最新文章

  1. c++运算符优先级_C语言入门教程-(6)运算符
  2. 这家研究院太年轻,竟跟世界级选手“叫板”
  3. 【Android 异步操作】Handler 机制 ( Handler 常用用法 | HandlerThread 简介 | HandlerThread 源码注释分析 )
  4. [小故事大道理] -- GoodMorning,Sir!
  5. MySql 中的常见问题解决方法
  6. 菜鸟教程python位运算符_NumPy 位运算
  7. vuepress 2.x 集成 element-plus
  8. 30万总奖金·垃圾分类挑战赛进入最后冲刺(附baseline完整分享)
  9. Android 系统(42)---使用BatteryHistorian分析和优化应用电量
  10. 启动go服务_使用Go构建TCP并发服务器,这种方式原来这么简单
  11. mysql yum 升级_CentOS 7中升级MySQL 5.7.23的坑与解决方法
  12. 西岛住宿软件测试,西岛踩坑记:寄存行李居然还要收费!听说要晋升5A,你觉得呢?...
  13. C# 利用iTextSharp画PDF
  14. 记一次windows下安装部署运维监控系统WGCOUD的步骤
  15. 《社会智能与综合集成系统》—第1章1.6节 智慧涌现
  16. python抢票软件源代码_一百多行python代码实现抢票助手
  17. Facebook开发者创建APP生成KeyHash
  18. Python教程笔录摘抄——基础
  19. 读《富爸爸穷爸爸》有感
  20. layui rate (评分组件)使用的一点经验分享

热门文章

  1. 【python批量插入图片到一个pdf中】
  2. PS技巧一-----镜头光晕
  3. 定积分的性质——积分中值定理
  4. 利用浏览器检查获取网页视频
  5. 西部数码虚拟服务器,西部数码虚拟主机301转向功能介绍
  6. wireshark学习笔记(MAC地址欺骗)
  7. android cta 权限,[Android][Framework]PackageManagerService处理应用权限流程
  8. 小学期云效能训练营-Day04
  9. 谷歌浏览器截图(截取整个网页)
  10. java list逆序_Java使用ListIterator逆序ArrayList