Go调用lua脚本执行redis命令

使用lua脚本好处

  • 主要优势: 减少网络开销:多个请求通过脚本一次发送,减少网络延迟
  • 原子操作:将脚本作为一个整体执行,中间不会插入其他命令,无需使用事务
  • 复用:客户端发送的脚本永久存在redis中,其他客户端可以复用脚本
  • 可嵌入性:可嵌入JAVA,C#等多种编程语言,支持不同操作系统跨平台交互

redis调用脚本命令

1、EVAL

  • EVAL script numkeys key [key …] arg [arg …]
127.1:8379> EVAL 'return "hello world"' 0
"hello world"
127.1:8379> EVAL 'return redis.call("set", KEYS[1], "bar")' 1 foo
OK
127.1:8379> get foo
"bar"

2、SCRIPT

  • script flush:清除所有的脚本缓存
  • script load:将脚本装入脚本缓存,不立即运行并返回其校验和
  • script exists:根据指定脚本校验和,检查脚本是否存在于缓存
  • script kill:杀死当前正在运行的脚本(防止脚本运行缓存,占用内存)
127.1:8379> script load "return 'hello world'"
"5332031c6b470dc5a0dd9b4bf2030dea6d65de91"
127.1:8379> script exists 5332031c6b470dc5a0dd9b4bf2030dea6d65de91
1) (integer) 1
127.1:8379> evalsha 5332031c6b470dc5a0dd9b4bf2030dea6d65de91 0
"hello world"
127.1:8379> script flush
OK
127.1:8379> script exists 5332031c6b470dc5a0dd9b4bf2030dea6d65de91
1) (integer) 0

redigo客户端调用lua

main.go

package main

import (
	"fmt"
	"github.com/gomodule/redigo/redis"
	"io/ioutil"
	"time"
)

func main() {
   
	// 测试redis连接是否正常
	dial, err := redis.Dial("tcp", "10.157.89.90:8379")
	if err != nil {
   
		panic(err)
		return
	}
	dial.Close()

	pool := &redis.Pool{
   
		Dial: func() (redis.Conn, error) {
   
			c, err := redis.Dial("tcp", "10.157.89.90:8379")
			if err != nil {
   
				fmt.Println(err)
				return nil, err
			}
			return c, nil
		
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值