业务需求中经常有需要用到计数器的场景:譬如一个手机号一天限制发送5条短信、一个接口一分钟限制多少请求、一个接口一天限制调用多少次等等。使用Redis的Incr自增命令可以轻松实现以上需求。以一个接口一天限制调用次数为例:/**

* 是否拒绝服务

* @return

*/

private boolean denialOfService(String userId){

long count=JedisUtil.setIncr(DateUtil.getDate()+"&"+userId+"&"+"queryCarViolation", 86400);

if(count<=10){

return false;

}

return true;

}/**

* 查询违章

* @param plateNumber车牌

* @param vin 车架号

* @param engineNo发动机

* @param request

* @param response

* @throws Exception

*/

@RequestMapping("/queryCarViolationList.json")

@AuthorizationApi

public void queryCarViolationList(@CurrentToken Token token,String plateNumber,String vin,

String engineNo,HttpServletRequest request,HttpServletResponse response) throws Exception {

String userId=token.getUserId();

//超过限制,拦截请求

if(denialOfService(userId)){

apiData(request, response, ReqJson.error(CarError.ONLY_5_TIMES_A_DAY_CAN_BE_FOUND));

return;

}

//没超过限制,业务逻辑……

}

每次调用接口之前,先获得下计数器自增后的值,如果小于限制,放行,执行后面的代码。如果大于限制,则拦截掉。

JedisUtil工具类:public class JedisUtil {

protected final static Logger logger = Logger.getLogger(JedisUtil.class);

private static JedisPool jedisPool;

@Autowired(required = true)

public void setJedisPool(JedisPool jedisPool) {

JedisUtil.jedisPool = jedisPool;

}

/**

* 对某个键的值自增

* @author liboyi

* @param key 键

* @param cacheSeconds 超时时间,0为不超时

* @return

*/

public static long setIncr(String key, int cacheSeconds) {

long result = 0;

Jedis jedis = null;

try {

jedis = jedisPool.getResource();

result =jedis.incr(key);

if (cacheSeconds != 0) {

jedis.expire(key, cacheSeconds);

}

logger.debug("set "+ key + " = " + result);

} catch (Exception e) {

logger.warn("set "+ key + " = " + result);

} finally {

jedisPool.returnResource(jedis);

}

return result;

}

}

更多redis知识请关注redis入门教程栏目。

php redis 自增计数器,redis实现高并发计数相关推荐

  1. php redis 自增计数器,redis自增计数

    INCR key 将 key 中储存的数字值增一. 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作. 如果值包含错误的类型,或字符串类型的值不能表示为数字,那 ...

  2. Spring Redis中使用Lua脚本实现高并发原子操作

    1. 前言 在上一文中我对 Lua 语言的一些简单的语法及其在 Redis 中的操作进行了介绍,但是在 Java 开发中我们还需要进一步的学习才能使这种技术落地.今天就结合Spring Data Re ...

  3. 高并发架构系列:Redis为什么是单线程、及高并发快的3大原因详解

    Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了很多上下文切换线程的时间: 3.redis使用多路复用技术,可以处理并发的连接.非阻塞 ...

  4. Redis系列教程(四):Redis为什么是单线程、及高并发快的3大原因详解

    Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了很多上下文切换线程的时间: 3.redis使用多路复用技术,可以处理并发的连接.非阻塞 ...

  5. Redis为什么是单线程、及高并发快的大原因详解

    Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了很多上下文切换线程的时间: 3.redis使用多路复用技术,可以处理并发的连接.非阻塞 ...

  6. Mysql更新计数器_MySQL实现计数器如何在高并发场景下更新并保持数据正确性

    一张表 两个字段 一个id 一个useCount 表里存了100个id 每个id对应自己的useCount 业务场景是:当id每使用一次 useCount要加1. 当useCount大于1000时 这 ...

  7. Java全能手册火了!Redis/Nginx/Dubbo/Spring全家桶/高并发

    前言 本文是为了帮大家快速回顾了Java中知识点,这套面试手册涵盖了诸多Java技术栈的面试题和答案,相信可以帮助大家在最短的时间内用作面试复习,能达到事半功倍效果. 本来想将文件上传到github上 ...

  8. redis实战教程(二)- 高并发、大流量限速

    关键代码如下: @Override public void rateLimit(String key, int unitTime, long rate) { Jedis jedis = getJedi ...

  9. Redis 的高并发实战:抢购系统 --浅奕

    简介: 主要内容: 一.IO 模型和问题 二.资源竞争与分布式锁 三.Redis 抢购系统实例 主要内容: 一.IO 模型和问题 二.资源竞争与分布式锁 三.Redis 抢购系统实例 一.IO 模型和 ...

最新文章

  1. 国外17个非常热门的在线备份服务
  2. insight-vmi 编译中的问题
  3. 川大优秀毕业生在GitHub上建了一个项目《深度学习500问》,还未完结就获赞无数
  4. 异步加载SAP UI5 OData metadata
  5. C#LeetCode刷题之#141-环形链表(Linked List Cycle)
  6. 微信小程序 服务器触发事件,微信小程序组件间通讯与事件
  7. 某些error page不加载_细说So动态库的加载流程
  8. [Java] 蓝桥杯ALGO-12 算法训练 幂方分解
  9. mysql 分区表 知乎_mysql 分区表
  10. psvimg格式PSV存档文件解包工具psvimgtools在macOS环境下的使用教程
  11. C#如何获取指定周的日期范围
  12. 应广PFS122单片机比较器测供电电源VDD电压带临界点消抖处理
  13. 特征选择方法-统计方法
  14. Linux提高CPU使用率并设置固定占比
  15. 【邻接表】77 邻接表:顶点u的下一个邻接点
  16. 【Vue 组件化开发 三】父组件给子组件传递数据、组件通信(父传子、子传父)、父访问子(children、ref)、动态组件(is、component)
  17. 软件测试丨工具在接口测试中发挥什么样的作用?
  18. SpringCloud Gateway 重试路由器的过滤器
  19. 基础连接已关闭解决办法_手机wifi连不上怎么办 手机wifi连不上解决办法【详解】...
  20. 中国车用尿素市场规模调研与发展趋势分析报告2022-2028年

热门文章

  1. Servlet入门 学习
  2. java处理图片的所有类_JAVA处理图片常用公共类
  3. MGR中gtid_executed不连续的问题分析
  4. 复杂网络作业1——随机生成三种网络(小世界、无标度、ER随机)
  5. iOS线上APP崩溃(Crash)分析
  6. mysql赋予权限routine_关于mysql create routine权限的代码实例详解
  7. 软件和office和word
  8. 教你如何构建一个简单的遗传算法模型实现对密码的预测
  9. 【人工智能】蚁群算法(密恐勿入)
  10. OS——文件管理系统磁盘的结构之搞清盘面和柱面