作者 邓超

x

@@ -178,7 +178,16 @@ class RedisPool { @@ -178,7 +178,16 @@ class RedisPool {
178 public function incr($key, $ttl = null){ 178 public function incr($key, $ttl = null){
179 if($ttl){ 179 if($ttl){
180 return $this->getClient()->eval( 180 return $this->getClient()->eval(
181 - "local x = redis.call('incr',KEYS[1]);redis.call('expire',KEYS[1],ARGV[1]);return x", 181 + "
  182 +if redis.call('exists',KEYS[1]) == 0 then
  183 + local x = redis.call('incr',KEYS[1])
  184 + if x then
  185 + redis.call('expire',KEYS[1],ARGV[1])
  186 + end
  187 + return x
  188 +else
  189 + return redis.call('incr',KEYS[1])
  190 +end",
182 [$key, $ttl], 191 [$key, $ttl],
183 1 192 1
184 ); 193 );
@@ -197,7 +206,16 @@ class RedisPool { @@ -197,7 +206,16 @@ class RedisPool {
197 public function decr($key,$ttl = null){ 206 public function decr($key,$ttl = null){
198 if($ttl){ 207 if($ttl){
199 return $this->getClient()->eval( 208 return $this->getClient()->eval(
200 - "local x = redis.call('decr',KEYS[1]);redis.call('expire',KEYS[1],ARGV[1]);return x", 209 + "
  210 +if redis.call('exists',KEYS[1]) == 0 then
  211 + local x = redis.call('decr',KEYS[1])
  212 + if x then
  213 + redis.call('expire',KEYS[1],ARGV[1])
  214 + end
  215 + return x
  216 +else
  217 + return redis.call('decr',KEYS[1])
  218 +end",
201 [$key, $ttl], 219 [$key, $ttl],
202 1 220 1
203 ); 221 );