Skip to content

[Optimization suggestions] Script.Run func #3186

Closed
@ppanphper

Description

@ppanphper
func (s *Script) Run(ctx context.Context, c Scripter, keys []string, args ...interface{}) *Cmd {
	r := s.EvalSha(ctx, c, keys, args...)
	if HasErrorPrefix(r.Err(), "NOSCRIPT") {
		return s.Eval(ctx, c, keys, args...)
	}
	return r
}

like this:

func (s *Script) Run(ctx context.Context, c Scripter, keys []string, args ...interface{}) *Cmd {
        retryTimes := 1
Retry: 
	r := s.EvalSha(ctx, c, keys, args...)
	if HasErrorPrefix(r.Err(), "NOSCRIPT") {
	        retryTimes--
		if retryTimes >= 0 {
			if sc := s.Load(ctx, c); sc.Err() != nil {
				return r
			}
			goto Retry
		}
	}
	return r
}
image

However, since each command uses a different connection, this function cannot be implemented. Is there any way to optimize it?
This optimization can improve some performance in high-concurrency scenarios, or when the Lua script is larger.

The usage environment is in a cloud vendor, with multiple agents and multiple nodes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions