redis lua脚本实现原子操作

  • 通过lua脚本封装原子操作,对一个key设置比旧数据大的数值,并返回大的数值;如果redis里面不存在该key,直接设置。
  • eval "local a=redis.call('GET',KEYS[1]) if a==false then redis.call('SET',KEYS[1],ARGV[1]) return ARGV[1] elseif tonumber(ARGV[1])>tonumber(a) then redis.call('SET',KEYS[1],ARGV[1]) return ARGV[1] end return a"

  •  

  • redis zset当作时间线使用时,做为定时任务的触发,可能存在多个程序往外取数据执行任务然后删掉该数据,这时可能会多个程序取到同一份数据,可以使用脚本封装原子操作  先zrangebyscore ,然后再zremrangebyscore。这样能够保证相同的数据不被多个进程或线程读到。
  • eval "local a=redis.call('ZRANGEBYSCORE',KEYS[1],ARGV[1],ARGV[2]) if next(a)~=nil then redis.call('ZREMRANGEBYSCORE',KEYS[1],ARGV[1],ARGV[2]) end return a"

 

你可能感兴趣的:(redis,高性能服务器)