package main
import (
"fmt"
"gopkg.in/redis.v4"
"time"
"sync"
)
func main() {
client := createClient()
defer client.Close()
stringOperation(client)
listOperation(client)
setOperation(client)
hashOperation(client)
connectPool(client)
}
func createClient() *redis.Client {
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "",
DB: 0,
PoolSize: 5,
})
pong, err := client.Ping().Result()
fmt.Println(pong, err)
return client
}
func stringOperation(client *redis.Client) {
err := client.Set("name", "xys", 0).Err()
if err != nil {
panic(err)
}
val, err := client.Get("name").Result()
if err != nil {
panic(err)
}
fmt.Println("name", val)
err = client.Set("age", "20", 1 * time.Second).Err()
if err != nil {
panic(err)
}
client.Incr("age")
client.Incr("age")
client.Decr("age")
val, err = client.Get("age").Result()
if err != nil {
panic(err)
}
fmt.Println("age", val)
time.Sleep(1 * time.Second)
val, err = client.Get("age").Result()
if err != nil {
fmt.Printf("error: %v\n", err)
}
fmt.Println("age", val)
}
func listOperation(client *redis.Client) {
client.RPush("fruit", "apple")
client.LPush("fruit", "banana")
length, err := client.LLen("fruit").Result()
if err != nil {
panic(err)
}
fmt.Println("length: ", length)
value, err := client.LPop("fruit").Result()
if err != nil {
panic(err)
}
fmt.Println("fruit: ", value)
value, err = client.RPop("fruit").Result()
if err != nil {
panic(err)
}
fmt.Println("fruit: ", value)
}
func setOperation(client *redis.Client) {
client.SAdd("blacklist", "Obama")
client.SAdd("blacklist", "Hillary")
client.SAdd("blacklist", "the Elder")
client.SAdd("whitelist", "the Elder")
isMember, err := client.SIsMember("blacklist", "Bush").Result()
if err != nil {
panic(err)
}
fmt.Println("Is Bush in blacklist: ", isMember)
names, err := client.SInter("blacklist", "whitelist").Result()
if err != nil {
panic(err)
}
fmt.Println("Inter result: ", names)
all, err := client.SMembers("blacklist").Result()
if err != nil {
panic(err)
}
fmt.Println("All member: ", all)
}
func hashOperation(client *redis.Client) {
client.HSet("user_xys", "name", "xys");
client.HSet("user_xys", "age", "18");
client.HMSet("user_test", map[string]string{"name": "test", "age":"20"})
fields, err := client.HMGet("user_test", "name", "age").Result()
if err != nil {
panic(err)
}
fmt.Println("fields in user_test: ", fields)
length, err := client.HLen("user_xys").Result()
if err != nil {
panic(err)
}
fmt.Println("field count in user_xys: ", length)
client.HDel("user_test", "age")
age, err := client.HGet("user_test", "age").Result()
if err != nil {
fmt.Printf("Get user_test age error: %v\n", err)
} else {
fmt.Println("user_test age is: ", age)
}
}
func connectPool(client *redis.Client) {
wg := sync.WaitGroup{}
wg.Add(10)
for i := 0; i < 10; i++ {
go func() {
defer wg.Done()
for j := 0; j < 100; j++ {
client.Set(fmt.Sprintf("name%d", j), fmt.Sprintf("xys%d", j), 0).Err()
client.Get(fmt.Sprintf("name%d", j)).Result()
}
fmt.Printf("PoolStats, TotalConns: %d, FreeConns: %d\n", client.PoolStats().TotalConns, client.PoolStats().FreeConns);
}()
}
wg.Wait()
}