Last active
March 22, 2022 15:59
-
-
Save pohzipohzi/a202f8fb7cc30e33176dd97a9def5aac to your computer and use it in GitHub Desktop.
Examples from redigo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// this is a file that puts together all redigo examples for convenience | |
// (see https://godoc.org/github.com/gomodule/redigo/redis#pkg-examples) | |
// | |
// start by ensuring that redis is running on port 6379 (`redis-server`) | |
// uncomment the main method as needed, and run the script (`go run main.go`) | |
package main | |
import ( | |
"fmt" | |
"github.com/gomodule/redigo/redis" | |
"log" | |
) | |
var ( | |
c redis.Conn | |
err error | |
reply interface{} | |
) | |
func init() { | |
c, err = redis.Dial("tcp", ":6379") | |
if err != nil { | |
log.Fatal(err) | |
} | |
} | |
func main() { | |
defer c.Close() | |
c.Do("FLUSHALL") | |
//argsExample() | |
//boolExample() | |
//intExample() | |
//intsExample() | |
//scanExample() | |
//scanSliceExample() | |
//stringExample() | |
} | |
func argsExample() { | |
var p1, p2 struct { | |
Title string `redis:"title"` | |
Author string `redis:"author"` | |
Body string `redis:"body"` | |
} | |
p1.Title = "Example" | |
p1.Author = "Gary" | |
p1.Body = "Hello" | |
if _, err := c.Do("HMSET", redis.Args{}.Add("id1").AddFlat(&p1)...); err != nil { | |
fmt.Println(err) | |
return | |
} | |
m := map[string]string{ | |
"title": "Example2", | |
"author": "Steve", | |
"body": "Map", | |
} | |
if _, err := c.Do("HMSET", redis.Args{}.Add("id2").AddFlat(m)...); err != nil { | |
fmt.Println(err) | |
return | |
} | |
for _, id := range []string{"id1", "id2"} { | |
v, err := redis.Values(c.Do("HGETALL", id)) | |
if err != nil { | |
fmt.Println(err) | |
return | |
} | |
if err := redis.ScanStruct(v, &p2); err != nil { | |
fmt.Println(err) | |
return | |
} | |
fmt.Printf("%+v\n", p2) | |
} | |
} | |
func boolExample() { | |
c.Do("SET", "foo", 1) | |
exists, _ := redis.Bool(c.Do("EXISTS", "foo")) | |
fmt.Printf("%#v\n", exists) | |
} | |
func intExample() { | |
c.Do("SET", "k1", 1) | |
n, _ := redis.Int(c.Do("GET", "k1")) | |
fmt.Printf("%#v\n", n) | |
n, _ = redis.Int(c.Do("INCR", "k1")) | |
fmt.Printf("%#v\n", n) | |
} | |
func intsExample() { | |
c.Do("SADD", "set_with_integers", 4, 5, 6) | |
ints, _ := redis.Ints(c.Do("SMEMBERS", "set_with_integers")) | |
fmt.Printf("%#v\n", ints) | |
} | |
func scanExample() { | |
c.Send("HMSET", "album:1", "title", "Red", "rating", 5) | |
c.Send("HMSET", "album:2", "title", "Earthbound", "rating", 1) | |
c.Send("HMSET", "album:3", "title", "Beat") | |
c.Send("LPUSH", "albums", "1") | |
c.Send("LPUSH", "albums", "2") | |
c.Send("LPUSH", "albums", "3") | |
values, err := redis.Values(c.Do("SORT", "albums", | |
"BY", "album:*->rating", | |
"GET", "album:*->title", | |
"GET", "album:*->rating")) | |
if err != nil { | |
fmt.Println(err) | |
return | |
} | |
for len(values) > 0 { | |
var title string | |
rating := -1 // initialize to illegal value to detect nil. | |
values, err = redis.Scan(values, &title, &rating) | |
if err != nil { | |
fmt.Println(err) | |
return | |
} | |
if rating == -1 { | |
fmt.Println(title, "not-rated") | |
} else { | |
fmt.Println(title, rating) | |
} | |
} | |
} | |
func scanSliceExample() { | |
c.Send("HMSET", "album:1", "title", "Red", "rating", 5) | |
c.Send("HMSET", "album:2", "title", "Earthbound", "rating", 1) | |
c.Send("HMSET", "album:3", "title", "Beat", "rating", 4) | |
c.Send("LPUSH", "albums", "1") | |
c.Send("LPUSH", "albums", "2") | |
c.Send("LPUSH", "albums", "3") | |
values, err := redis.Values(c.Do("SORT", "albums", | |
"BY", "album:*->rating", | |
"GET", "album:*->title", | |
"GET", "album:*->rating")) | |
if err != nil { | |
fmt.Println(err) | |
return | |
} | |
var albums []struct { | |
Title string | |
Rating int | |
} | |
if err := redis.ScanSlice(values, &albums); err != nil { | |
fmt.Println(err) | |
return | |
} | |
fmt.Printf("%v\n", albums) | |
} | |
func stringExample() { | |
c.Do("SET", "hello", "world") | |
s, err := redis.String(c.Do("GET", "hello")) | |
fmt.Printf("%#v %v\n", s, err) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment