您的位置:首页 > 数据库 > Redis

Redis使用lua脚本实现increase + expire 的原子操作

2018-11-02 09:58 1056 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z69183787/article/details/79033670

lua脚本:


  1. local current = redis.call('incrBy',KEYS[1],ARGV[1]);" +
  2. " if current == tonumber(ARGV[1]) then" +
  3. " local t = redis.call('ttl',KEYS[1]);" +
  4. " if t == -1 then " +
  5. " redis.call('expire',KEYS[1],ARGV[2])" +
  6. " end;" +
  7. " end;" +
  8. " return current";

JedisCluter
  1. public Long incrBy(final String key, final long step, final int defaultExpire) {
  2. return new JedisClusterCommand<Long>(connectionHandler, maxRedirections, Protocol.Command.INCR) {
  3. @Override
  4. public Long execute(Jedis connection) {
  5. if (defaultExpire > 0) {
  6. Object val = connection.eval(ScriptConstant.INCRBY_1_EXPIRE, 1, new String[]{key, String.valueOf(step), String.valueOf(defaultExpire)});
  7. return Long.valueOf(val.toString());
  8. } else {
  9. return connection.incrBy(key, step);
  10. }
  11. }
  12. }.run(key);
  13. }


阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: