Redis中lua脚本的配合使用
2022/4/22 19:12:44
本文主要是介绍Redis中lua脚本的配合使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.说明
KEYS[1] 用来表示在redis 中用作键值的参数占位,主要用來传递在redis 中用作keyz值的参数。
ARGV[1] 用来表示在redis 中用作参数的占位,主要用来传递在redis中用做 value值的参数。
2.代码范例
2.1 释放redis锁
public boolean releaseDistributedLock(String lockKey, String requestId) { try(Jedis resource = jedisPool.getResource()) { String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end"; Object result = resource.eval(script, Collections.singletonList(lockKey), Collections.singletonList(requestId)); return RELEASE_SUCCESS.equals(result); } }
其中KEYS[1]指的是Collections.singletonList(lockKey)这个列表里面的第一个数据
其中ARGV[1]指的是Collections.singletonList(requestId)这个列表里面的第一个数据
2.2 redisson调用lua脚本实现封装的数据结构RSetMultimapCache<String, String>的putAll方法
@Override public RFuture<Boolean> putAllAsync(K key, Iterable<? extends V> values) { List<Object> params = new ArrayList<Object>(); ByteBuf keyState = encodeMapKey(key); params.add(keyState); String keyHash = hash(keyState); params.add(keyHash); for (Object value : values) { ByteBuf valueState = encodeMapValue(value); params.add(valueState); } String setName = getValuesName(keyHash); return commandExecutor.evalWriteAsync(getRawName(), codec, RedisCommands.EVAL_BOOLEAN_AMOUNT, "redis.call('hset', KEYS[1], ARGV[1], ARGV[2]); " + "return redis.call('sadd', KEYS[2], unpack(ARGV, 3, #ARGV)); ", Arrays.<Object>asList(getRawName(), setName), params.toArray()); }
这篇关于Redis中lua脚本的配合使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24Redis资料:新手入门快速指南
- 2024-12-24Redis资料:新手入门教程与实践指南
- 2024-12-24Redis资料:新手入门教程与实践指南
- 2024-12-07Redis高并发入门详解
- 2024-12-07Redis缓存入门:新手必读指南
- 2024-12-07Redis缓存入门:新手必读教程
- 2024-12-07Redis入门:新手必备的简单教程
- 2024-12-07Redis入门:新手必读的简单教程
- 2024-12-06Redis入门教程:从安装到基本操作
- 2024-12-06Redis缓存入门教程:轻松掌握缓存技巧