这里有新鲜出炉的 Redis 官方指南, 程序狗速度看过来!
Redis Key-Value 数据库
Redis 是一个开源的使用 ANSI C 语言编写支持网络可基于内存亦可持久化的日志型 Key-Value 数据库, 并提供多种语言的 API
下面小编就为大家分享一篇基于 Redis 的限流器的实现(示例讲解), 具有很好的参考价值, 希望对大家有所帮助一起跟随小编过来看看吧
1 概述
系统中的接口通常都有限流, 比如 70 次 / 秒 , 如何保证我们的接口的调用次数在超过第三方接口限流的时候快速失败呢? 这时候就需要限流器了下面是笔者用 redis 实现限流器的流程图
2 代码
- /**
- * 获取限流权限
- * @param key
- * @param millisecond 毫秒数
- * @param limitCount 限流次数
- * @return
- */
- public static boolean getCurrentLimiting(String key, Long millisecond, Integer limitCount){
- try {
- boolean currentLimitingLock = RedisDistributeLockUtil.lock(key);
- if(currentLimitingLock){
- Long llen = RedisClient.llen(getCurrentLimitingRedisKey(key));
- if(llen < limitCount){
- RedisClient.lpush(getCurrentLimitingRedisKey(key), DateUtil.current(false) + "");
- return true;
- }else{
- Long lastTime = Long.parseLong(RedisClient.lindex(getCurrentLimitingRedisKey(key), -1));
- if((DateUtil.current(false) - lastTime) >= millisecond){
- RedisClient.lpush(getCurrentLimitingRedisKey(key), DateUtil.current(false) + "");
- RedisClient.ltrim(getCurrentLimitingRedisKey(key), 0, limitCount);
- return true;
- }
- }
- }
- }finally {
- RedisDistributeLockUtil.unlock(key);
- }
- return false;
- }
来源: http://www.phperz.com/article/18/0310/362637.html