Redis 可以通过以下方式实现分布式计数器:
- 使用 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
- 使用 INCRBY 命令:
该命令将键的值增加指定数字,可以实现更高效的分布式计数。
例如:
jedis1.incrby("counter", 5); // counter = 5
jedis2.incrby("counter", 10); // counter = 15
- 对分布式计数器设置过期时间:
这可以防止分布式计数器的值无限增加,我们可以设置一个较长的过期时间,然后定期使用 GET 命令获取当前计数并重置过期时间。
例如:
jedis.setex("counter", 3600, 0); // 设置1小时过期时间
// 每30秒获取当前计数并重置过期时间
while (true) {
int count = jedis.get("counter");
jedis.setex("counter", 3600, count);
Thread.sleep(30 * 1000);
}