redis使用lua记录

    科技2022-07-21  112

    1.直接使用

    127.0.0.1:6379> eval 'return "hello"' 0 "hello" 127.0.0.1:6379> eval 'return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}' 2 k1 k2 v1 v2 1) "k1" 2) "k2" 3) "v1" 4) "v2" 127.0.0.1:6379> eval "redis.call('set',KEYS[1],ARGV[1])" 1 name king (nil) 127.0.0.1:6379> get name "king" 127.0.0.1:6379> eval "return redis.call('set',KEYS[1],ARGV[1])" 1 name king OK 127.0.0.1:6379> eval "return redis.call('get',KEYS[1])" 1 name "king"

    2.通过eval使用

    gdut17@ubuntu:~/redis-6.0.8$ src/redis-cli --eval test.lua name age , zhangsan (nil) gdut17@ubuntu:~/redis-6.0.8$ src/redis-cli --eval demo.lua users

    3.通过script使用

    script load 载入lua,但是不执行 script exists 判断lua是否已经加载 evalsha 执行lua script flush清除已经装载的脚本 script kill 杀死正在允许的脚本

    实例

    hmset users user1 123 user2 234 user3 439 --载入lua,查看sha1值 gdut17@ubuntu:~/redis-6.0.8$ redis-cli script load "$(cat demo.lua)" "ca26d410fb253937a6b1e8f8cda59fa0d9d2ad3c" gdut17@ubuntu:~/redis-6.0.8$ ./src/redis-cli -- 查看这个lua是否已经加载在内存 127.0.0.1:6379> script exists "ca26d410fb253937a6b1e8f8cda59fa0d9d2ad3c" 1) (integer) 1 -- 执行这个lua,加入参数个数,KEYS值,ARGV值 127.0.0.1:6379> evalsha "ca26d410fb253937a6b1e8f8cda59fa0d9d2ad3c" 1 users (nil) 127.0.0.1:6379> script flush OK 127.0.0.1:6379> script exists "ca26d410fb253937a6b1e8f8cda59fa0d9d2ad3c" 1) (integer) 0

    – 测试hmset

    gdut17@ubuntu:~/redis-6.0.8$ cat lua/testhash.lua -- hmset myhash name qwe age 123 -- src/redis-cli --eval lua/testhash.lua myhash name age , qwe 123 redis.call("hmset",KEYS[1],KEYS[2],KEYS[3],ARGV[1],ARGV[2]) gdut17@ubuntu:~/redis-6.0.8$ src/redis-cli --eval lua/testhash.lua myhash name age , qwe 123 (nil) gdut17@ubuntu:~/redis-6.0.8$ gdut17@ubuntu:~/redis-6.0.8$ gdut17@ubuntu:~/redis-6.0.8$ ./src/redis-cli 127.0.0.1:6379> 127.0.0.1:6379> 127.0.0.1:6379> hgetall myhash 1) "name" 2) "age" 3) "qwe" 4) "123" 127.0.0.1:6379> keys * 1) "myhash" 127.0.0.1:6379> gdut17@ubuntu:~/redis-6.0.8$ src/redis-cli script load "$(cat lua/testhash.lua)" "11bd3e999c31eee4d4679e1567b24bcff6df80b2" gdut17@ubuntu:~/redis-6.0.8$ src/redis-cli 127.0.0.1:6379> script exists "11bd3e999c31eee4d4679e1567b24bcff6df80b2" 1) (integer) 1 127.0.0.1:6379> keys * (empty array) 127.0.0.1:6379> evalsha "11bd3e999c31eee4d4679e1567b24bcff6df80b2" 3 myhash name qwe age 123 (nil) 127.0.0.1:6379> keys * 1) "myhash" 127.0.0.1:6379> hgetall myhash 1) "name" 2) "qwe" 3) "age" 4) "123"
    Processed: 0.011, SQL: 8