Redis中如何实现分布式计数器?

Redis 可以通过以下方式实现分布式计数器:

  1. 使用 INCR 命令:
    该命令将键的值增加1,如果键不存在则创建该键并设置默认值为1。通过在多个Redis节点上执行INCR命令,可以实现分布式计数。
    例如:
Jedis jedis1 = new Jedis("node1");
Jedis jedis2 = new Jedis("node2");

jedis1.incr("counter");  // counter = 1
jedis2.incr("counter");  // counter = 2
  1. 使用 INCRBY 命令:
    该命令将键的值增加指定数字,可以实现更高效的分布式计数。
    例如:
jedis1.incrby("counter", 5);   // counter = 5 
jedis2.incrby("counter", 10);  // counter = 15
  1. 对分布式计数器设置过期时间:
    这可以防止分布式计数器的值无限增加,我们可以设置一个较长的过期时间,然后定期使用 GET 命令获取当前计数并重置过期时间。
    例如:
jedis.setex("counter", 3600, 0);   // 设置1小时过期时间

// 每30秒获取当前计数并重置过期时间
while (true) {
  int count = jedis.get("counter");
  jedis.setex("counter", 3600, count);  
  Thread.sleep(30 * 1000);
}