mirror of
https://github.com/redis/go-redis.git
synced 2025-07-26 19:21:03 +03:00
Init
This commit is contained in:
8
example/lua-scripting/README.md
Normal file
8
example/lua-scripting/README.md
Normal file
@ -0,0 +1,8 @@
|
||||
# Redis Lua scripting example
|
||||
|
||||
This is an example for [Redis Lua scripting](https://redis.uptrace.dev/guide/lua-scripting.html)
|
||||
article. To run it:
|
||||
|
||||
```shell
|
||||
go run .
|
||||
```
|
12
example/lua-scripting/go.mod
Normal file
12
example/lua-scripting/go.mod
Normal file
@ -0,0 +1,12 @@
|
||||
module github.com/redis/go-redis/example/lua-scripting
|
||||
|
||||
go 1.18
|
||||
|
||||
replace github.com/redis/go-redis/v9 => ../..
|
||||
|
||||
require github.com/redis/go-redis/v9 v9.5.3
|
||||
|
||||
require (
|
||||
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
|
||||
)
|
6
example/lua-scripting/go.sum
Normal file
6
example/lua-scripting/go.sum
Normal file
@ -0,0 +1,6 @@
|
||||
github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
|
||||
github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
|
||||
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
|
||||
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
|
66
example/lua-scripting/main.go
Normal file
66
example/lua-scripting/main.go
Normal file
@ -0,0 +1,66 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/redis/go-redis/v9"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
rdb := redis.NewClient(&redis.Options{
|
||||
Addr: ":6379",
|
||||
})
|
||||
_ = rdb.FlushDB(ctx).Err()
|
||||
|
||||
fmt.Printf("# INCR BY\n")
|
||||
for _, change := range []int{+1, +5, 0} {
|
||||
num, err := incrBy.Run(ctx, rdb, []string{"my_counter"}, change).Int()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Printf("incr by %d: %d\n", change, num)
|
||||
}
|
||||
|
||||
fmt.Printf("\n# SUM\n")
|
||||
sum, err := sum.Run(ctx, rdb, []string{"my_sum"}, 1, 2, 3).Int()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Printf("sum is: %d\n", sum)
|
||||
}
|
||||
|
||||
var incrBy = redis.NewScript(`
|
||||
local key = KEYS[1]
|
||||
local change = ARGV[1]
|
||||
|
||||
local value = redis.call("GET", key)
|
||||
if not value then
|
||||
value = 0
|
||||
end
|
||||
|
||||
value = value + change
|
||||
redis.call("SET", key, value)
|
||||
|
||||
return value
|
||||
`)
|
||||
|
||||
var sum = redis.NewScript(`
|
||||
local key = KEYS[1]
|
||||
|
||||
local sum = redis.call("GET", key)
|
||||
if not sum then
|
||||
sum = 0
|
||||
end
|
||||
|
||||
local num_arg = #ARGV
|
||||
for i = 1, num_arg do
|
||||
sum = sum + ARGV[i]
|
||||
end
|
||||
|
||||
redis.call("SET", key, sum)
|
||||
|
||||
return sum
|
||||
`)
|
Reference in New Issue
Block a user