- 通过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"
- ===================
- 使用hash存储数据但是限制其长度,超过上限设置失败,通过lua脚本封装并发安全的原子操作。
- eval "local c=redis.call('hlen',KEYS[1]) if c>=tonumber(ARGV[3]) then return 2 end return redis.call('hset',KEYS[1],ARGV[1],ARGV[2])" 1 chen:hash:limit xin 100 2
redis lua脚本实现原子操作
最新推荐文章于 2024-08-07 12:02:47 发布