redis脚本执行,让原子操作更简单

redis支持脚本lua执行,由于redis单线程特性,所有脚本中的所有操作能做到原子操作。

相对于事务,脚本支持条件判断执行操作。比如 if  else。在分布式的环境了可以省掉很多加分布式锁的麻烦。

以下是在reidsTemplate通过脚本实现zaddNX方法的一个简单例子。 jedis实现方法类似主要在于lua脚本编写,具体语法可以百度

/**
     * 如果currentMemeber不存在才添加targetMember,反之忽略
     * @param key
     * @param currentMember
     * @param targetMember
     * @param score
     * @return
     */
    public int zaddNX(String key,String currentMember,String targetMember,double score){
        String str = "local times = redis.call('zscore',KEYS[1],KEYS[2]) if times then return '0' else redis.call('zadd',KEYS[1], ARGV[3], KEYS[3]) return '1' end";
        DefaultRedisScript script = new DefaultRedisScript(str);
        script.setResultType(String.class);
        List<String> keys = new ArrayList();
        keys.add(key);
        keys.add(currentMember);
        keys.add(targetMember);
        String rs = redisTemplate.execute(script,new StringRedisSerializer(),new StringRedisSerializer(),keys,"0","",String.valueOf(score));
        return Integer.valueOf(rs);
    }

 

 

转载于:https://my.oschina.net/u/3783256/blog/3057264

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值