Redis Lua篇
相信大部分redis使用者,至少听过Lua脚本,使用的话,更好了,今天我以个人学习经验交流把我对lua的使用写出来。
首先看一下网上对lua脚本的介绍和使用:
以上是在菜鸟教程上找到的内容并截图。
教程里并没有具体的写出使用,至少很简单的描述了一个实例。
比如:
怎么设置key?
怎么设置分布式锁?
怎么删除key?
…
等等
这些,在菜鸟教程里面都没具体描述。所以我写该篇文章,主要是描述在实际的生产中的使用。
lua的简单介绍还是要写一下:
EVAL script numkeys key [key …] arg [arg …]
首先大家一定要知道eval的语法格式,其中:
<1> script: 你的lua脚本
<2> numkeys: key的个数
<3> key: redis中各种数据结构的替代符号
<4> arg: 你的自定义参数
例子:
eval “return {KEYS[1],KEYS[2],KEYS[3],KEYS[4]}” 4 username age jack 20
类似于C#的占位符{0}
通常情况下,不会在redis-cli直接写lua脚本,一般都是放在lua文件中,方便编辑
redis提供了以下几个script命令,用于对于脚本子系统进行控制:
script flush:清除所有的脚本缓存
script load:将脚本装入脚本缓存,不立即运行并返回其校验和
script exists:根据指定脚本校验和,检查脚本是否存在于缓存
script kill:杀死当前正在运行的脚本(防止脚本运行缓存,占用内存)
话不多说,直接上代码(golang版本的代码)
func demo_01() {
redis_client := GetRedisConnect()
/*result:=redis_client.ScriptLoad("return 'Hello GrassInWind'")
fmt.Println(result.Val())*/
// c66be1d9b54b3182f8d8e12f8b01a4e5c7c4af5b
result:=redis_client.EvalSha("c66be1d9b54b3182f8d8e12f8b01a4e5c7c4af5b",nil)
fmt.Println(result.Val())
}
func demo_02() {
redis_client := GetRedisConnect()
/*result:=redis_client.ScriptLoad("return {KEYS[1],KEYS[2],KEYS[3],KEYS[4]}")
fmt.Println(result.Val())*/
//00bd8c0c171fada34c1c511fadf893e57bdb429e
//4 username age jack 20
result:=redis_client.EvalSha("00bd8c0c171fada34c1c511fadf893e57bdb429e",[]string{"username","jack","age","20"})
fmt.Println(result.Val())
}
func demo_03() {
redis_client := GetRedisConnect()
//设置分布式锁
/* result:=redis_client.ScriptLoad("return red