大致代码如下:
func(id, ip){
int countId = jedis.hget("count", id);
int countIP = jedis.get("count", ip);
if(countId >= 5 || countIP>=5){
return;
}
... //一些其他操作
//再次判断,怕并发时被其他线程修改过
int countId = jedis.hget("count", id);
int countIP = jedis.get("count", ip);
if(countId >= 5 || countIP>=5){
doSomething();
jedis.hincrBy("count", id, 1);
jedis.hincrBy("count", ip, 1);
}
}
上述代码只是表达大致意思,因为显然在并发情况下会有问题
我的设想是,譬如做一个类似CAS的,casIncrBy("count", id, 1, 5), 这个原子操作对key值增1,如果>5则失败。然后判断是否失败,失败就不doSomething(),成功就doSomething().
如何达成?
添加回答
举报
0/150
提交
取消