最近用incr和incrBy在接口里做了下埋点统计每天请求总数,这两个命令还是挺好用的,先说下这俩命令吧

注:redis后台服务是串行的单线程执行,不存在并发,即多线程调用Incr/incrby方法,在redis服务器上仍然是串行的单线程执行,不存在并发,所以这俩命令都是原子自增、线程安全的。

1、Incr 命令 (菜鸟教程)

Redis Incr 命令将 key 中储存的数字值增一。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

本操作的值限制在 64 位(bit)有符号数字表示之内。

2、Redis Incrby 命令

Redis Incrby 命令将 key 中储存的数字加上指定的增量值。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

本操作的值限制在 64 位(bit)有符号数字表示之内。

3、实现按天统计的思路

以你自定义的字符串+当前年月日 作为key ;例:

public static final String BATCH_COMMIT_DAY_COUNT="test:wugui:";
public static String getCurrentDate() {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");return simpleDateFormat.format(new Date());}
redisClient.incr(BATCH_COMMIT_DAY_COUNT + DateUtil.getCurrentDate());//redis的key

当然我并没有为这个key用expire设置超时时间,因为我需要保留每天的统计;

incrBy 可以在现有值的基础上累加你的增量值,比如你要在一个批量审核接口里统计每天批量审核的所有人数,例:

 redisClient.incrBy(BATCH_COMMIT_DAY_COUNT + DateUtil.getCurrentDate(), 63l);

注意redis的  incrBy 第二个参数是long类型,不是参数名的integer.....

public Long incrBy(final String key, final long integer) {checkIsInMultiOrPipeline();client.incrBy(key, integer);return client.getIntegerReply();}

4、总结

除了简单计数,还可以实现控制用户单位时间内请求等,可根据业务需求灵活运用;

有兴趣可以参考下这位朋友的博客,简单实用 https://blog.csdn.net/Roy_70/article/details/78260826

redis incr和incrBy的使用相关推荐

  1. Redis:字符串INCR、INCRBY、INCRBYFLOAT、DECR、DECRBY命令介绍

    INCR INCR key 可用版本: >= 1.0.0 时间复杂度: O(1) 为键key对应的数字字符串(整数)加上一. 演示 如果键key不存在, 那么它的值会先被初始化为 0 , 然后再 ...

  2. redis的incr和incrby命令

    Redis Incr 命令将 key 中储存的数字值增一,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作. Redis Incrby 命令将 key 中储存的 ...

  3. redis中的incr和incrBy

    今天遇到这样几个例子,(1)闸机上传一条交易数据时,接收流水号(不是主键)就在原来基础上自增,并且每天更换.(2)每次上传出站交易数据,闸机都要累计交易金额. 这两个例子都可以用incrBy,或是例( ...

  4. redis incr incrby decr decrby命令

    incr.incrby.decr.decrby命令的作用和用法 redis中incr.incrby.decr.decrby属于string数据结构,它们是原子性递增或递减操作. incr递增1并返回递 ...

  5. php redis获取incr的值,Redis Incr命令

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

  6. redis incr mysql_redis命令_INCR

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

  7. redis incr命令最大值问题

    redis incr 最大值是 Long.MAX_VALUE的值 大于long.MAX_VALUE后就会抛出异常 @Testpublic void test3() throws Interrupted ...

  8. incr、incrby、decr、decrby命令的作用和用法

    redis中incr.incrby.decr.decrby属于string数据结构,它们是原子性递增或递减操作. incr递增1并返回递增后的结果: incrby根据指定值做递增或递减操作并返回递增或 ...

  9. python中redis incr的使用

    在一些项目中,有时候需要记录一些数字,比如需要知道每天微信推送了多少条模板消息或者其他的一些需求,或者一个功能:用户扫码当天达到20次即不再让用户扫码,或者秒杀活动中,这件商品只规定卖200件,如果我 ...

最新文章

  1. unity android模糊ios清晰,Unity NGUI UI 在iOS端的锯齿、模糊、颗粒感问题
  2. 设置远程访问mysql服务端的日志
  3. 进口网友讨论:是什么让你继续支持并持有BCH?
  4. AceTeamwork 软件成就继续蝉联国内最优秀的项目工时(timesheet)及费用报销(expense)软件...
  5. java校验入参的有效性的工具类
  6. apache2配置优化以及性能测试小结
  7. 《数据库系统概论》第一章笔记
  8. 怎么检查计算机和打印机是否连接网络,检查电脑是否正确连接网络打印机
  9. 微信公众号支付开发流程
  10. 硬盘pe安装红旗linux系统,WinPE 安装操作系统详细图解(图文教程)
  11. 在线数字转大写金额工具
  12. Python实现太极图案
  13. 绝对值c语言不用函数,C语言 STM32 求绝对值函数
  14. CES2018,三星为何将MicroLED应用于电视而非手机?
  15. 《Python数学之美》第一节、一切还是要从函数说起
  16. 呼叫中心电话客服系统搭建的种类有哪些
  17. 前端面试知识梳理(高级前端开发工程师)
  18. train_test_split(),随机划分训练集和测试集的函数
  19. cad 打开硬件加速卡_谁说没有核显就不能开启硬件加速?手把手教你开启加速
  20. 手撕LongAdder-add()源码

热门文章

  1. 搭建网站的步骤有哪些?
  2. C#代码审计实战+前置知识
  3. PC端查看WiFi密码
  4. VueUse 中文文档:Components 组件
  5. java计算机毕业设计医院远程诊断系统源代码+系统+数据库+lw文档
  6. python爬取武汉二手房房价
  7. 聊一聊我们应该如何有效学习
  8. esim卡与ms卡的区别_什么是eSIM,它与SIM卡有何不同?
  9. 从红队视角看AWD攻击
  10. kinectfusion的详细介绍