总结
其他的内容都可以按照路线图里面整理出来的知识点逐一去熟悉,学习,消化,不建议你去看书学习,最好是多看一些视频,把不懂地方反复看,学习了一节视频内容第二天一定要去复习,并总结成思维导图,形成树状知识网络结构,方便日后复习。
这里还有一份很不错的《Java基础核心总结笔记》,特意跟大家分享出来
目录:
部分内容截图:
eval "redis.call('set', KEYS[1], ARGV[1])" 1 key:name value
EVAL命令行后面跟着的是Lua脚本:"redis.call('set', KEYS[1], ARGV[1])"
,放到编程语言里面就是一段字符串,跟在Lua脚本字符串后面的三个参数依次是:
-
redis Lua脚本所需要的KEYS的数量 ,只有一个KEYS[1],所以紧跟脚本之后的参数值是1
-
Lua 脚本需要的参数KEYS[1]的参数值,在我们的例子中值为key:name
-
Lua 脚本需要的参数ARGV[1]的参数值,在我们的例子中值为value
Lua脚本中包括两组参数:KEYS[]和ARGV[],两个数组下标从1开始。一个值得去遵守的最佳实践是:把redis操作所需的key通过KEYS进行参数传递,其他的Lua脚本所需的参数通过ARGV进行传递。
上面的脚本执行完成之后,我们使用下面的Lua脚本来进行验证,如果该脚本的返回值是”value”,与我们之前设置的key:name的值相同,则表示我们的Lua脚本被正确执行了。
eval "return redis.call('get', KEYS[1])" 1 key:name
3.2.仔细看下Lua脚本里的内容
我们的第一个Lua脚本只包含一条语句,调用redis.call
redis.call('set', KEYS[1], ARGV[1])
所以在Lua脚本里面可以通过redis.call
执行redis命令,call方法的第一个参数就是redis命令的名称,因为我们调用的是redis 的set命令,所以需要传递key和value两个参数。
我们第二个脚本不只是执行了一个脚本,因为执行get命令还返回了执行结果。注意脚本中有一个return 关键字。
eval "return redis.call('get', KEYS[1])" 1 key:name
当然如果只是上面的这么简单的Lua脚本,还不如直接使用命令行更方便。我们实际使用到的Lua脚本会比上面的复杂,上面的Lua脚本只是一个Hello World。
3.3. 复杂点的例子
我曾使用Lua脚本从一个hash map里面按照一定的顺序获取若干key对应的值。对应的顺序在一个zset排序集合中进行保存,数据设置及排序可以通过下面的完成。
# 设置hkeys为键Hash值
hmset hkeys key:1 value:1 key:2 value:2 key:3 value:3 key:4 value:4 key:5 value:5 key:6 value:6
# 建一个order为键的集合,并给出顺序
zadd order 1 key:3 2 key:1 3 key:2
执行下面的Lua脚本
eval "local order = redis.call('zrange', KEYS[1], 0, -1); return redis.call('hmget',KEYS[2],unpack(order));" 2 order hkeys
你将看到如下的输出结果
“value:3”
“value:1”
“value:2”
-
通过zrange取出order集合里面的数据,即:[ key:3 , key:1 , key:2]
-
然后通过unpack函数将[ key:3 , key:1 ,key:2] 转成 key:3 key:1 key:2
-
最后执行 hmget hkeys key:3 key:1 key:2,所以得到上面的输出结果
Redis可以对Lua脚本进行预加载,可以通过script load命令把Lua脚本预加载到redis里面。
script load "return redis.call('get', KEYS[1])"
预加载完成之后,你会看到下面的一段输出
“4e6d8fc8bb01276962cce5371fa795a7763657ae”
这是一个具有唯一性的hash字符串,这个hash就代表着我们刚刚预加载的Lua脚本,我们可以通过EVALSHA命令执行该脚本。如:
evalsha 4e6d8fc8bb01276962cce5371fa795a7763657ae 1 key:name
执行的结果与下面的是一致的。
eval "return redis.call('get', KEYS[1])" 1 key:name
最后
针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。
最新整理面试题
上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题
最新整理电子书
最新整理大厂面试文档
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。