在RedisTemplate執行lua腳本若是作呢? 查看下面方法代碼,這是引入lua內容腳本到RedisScript
的子類DefaultRedisScript
類中,這是redis提供支持的腳本支持類,更多內容可參考=>redis腳本參考java
protected RedisScript<Long> getRedisLockScript() {
String script = "local key = ARGV[1];local expiration = ARGV[2];local value = 1;";
script += "if redis.call('EXISTS', key) == 1 then return -1 else redis.call('SET', key, value);redis.call('EXPIRE', key, expiration);return 1;end";
return new DefaultRedisScript<>(script, Long.class);
}
複製代碼
這裏能夠經過查看execute方法查看執行的源碼流程: redis
RedisTemplate.java
中的
execute()
方法中
execute()
三個參數的方法execute()
五個參數的方法execute()
五個參數的方法體eval()
方法執行redis腳本命令
eval()
方法的對應實現類DefaultScriptExecute
中: 首先直接傳sha值,若是在Redis中找不到預加載的lua腳本致使報錯,則catch住該錯誤,把整個腳本序列化後傳入Redis進行執行:
咱們查看如下腳本序列化的執行代碼scriptBytes()
,其對應的執行類爲StringRedisSerializer
類 bash
StringRedisSerializer
類,能夠看出該序列化操做其實就是字符串String序列化操做
至此,關於SpringBoot中RedisTemplate的RedisScript源碼分析結束~源碼分析