我的使用场景,是通过第一个接口,查询到一个数值(剩余的量),第二个接口,减去这个接口传上来的订单数值,返回剩余的数值。
所以,打算采用计数器解决。
1,为计数器设值
* @param key
* @param count要设置的值
* @param version 不关心并发传入0
* @param expireTime 不关心过期传入0
setCount(namespace, key, count, version, expireTime);
这个方法,如果version控制不好的话,容易有并发问题。
所以,我采用了 下面提到的 方法4,decr(namespace, key,value, defaultValue, expireTime);传入value0,传入默认值即可,来解决。
这样做的确一部分情况下解决了不关心version的问题,但不知道会不会出现其它问题。目前还未发现异常。
2,获得计数器的值
* @param namespace
* @param key
get(namespace, key);
这个方法也可以获取到存在服务器的key的值。
3,增加计数器的值
* @param namespace
* @param key
* @param value本次增加的数量
* @param defaultValue当计数器不存在时的初始化值
* @param expireTime
incr(namespace, key,value,defaultValue, expireTime);
4,减去计数器的值
* @param namespace
* @param key
* @param value本次减少的数量
* @param defaultValue当计数器不存在时的初始化值
* @param expireTime
decr(namespace, key,value, defaultValue, expireTime);
5,失效某个key
* 通过invalid server删除,对应集群中的key都会被删除
* 参数:
* namespace - area
* key -这个key从两边机房里都删除
invalid(namespace, key);
以上,就是我需要用到的计数器方法。
解决思路,如下,
第一个接口,查询数值,是否有值,有值则直接返回,无值,则初始化值。
第二个接口,减去订单的值会返回剩余的值,判断剩余的值,如果小于0则是减完了(并发情况下是会出现小于0的情况),返回0。