forked from docker-archive/go-redis-server
/
main.go
51 lines (44 loc) · 1.2 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package main
import (
"fmt"
redis "github.com/figoxu/go-redis-server"
)
type MyHandler struct {
redis.DefaultHandler
}
// Test implement a new command. Non-redis standard, but it is possible.
func (h *MyHandler) Test() ([]byte, error) {
return []byte("Awesome custom redis command!"), nil
}
// Get override the DefaultHandler's method.
func (h *MyHandler) Get(key string) ([]byte, error) {
// However, we still can call the DefaultHandler GET method and use it.
ret, err := h.DefaultHandler.Get(key)
if ret == nil {
return nil, err
}
return []byte("BEAM/" + string(ret)), err
}
// Test2 implement a new command. Non-redis standard, but it is possible.
// This function needs to be registered.
func Test2() ([]byte, error) {
return []byte("Awesome custom redis command via function!"), nil
}
func main() {
defer func() {
if msg := recover(); msg != nil {
fmt.Printf("Panic: %v\n", msg)
}
}()
myhandler := &MyHandler{}
srv, err := redis.NewServer(redis.DefaultConfig().Proto("unix").Host("/tmp/redis.sock").Handler(myhandler))
if err != nil {
panic(err)
}
if err := srv.RegisterFct("test2", Test2); err != nil {
panic(err)
}
if err := srv.ListenAndServe(); err != nil {
panic(err)
}
}