今天就来讲讲go 里面的如何使用 Redis。安装
import "github.com/go-redis/redis"
创建Redis连接客户端
func GetRedisClient() *Client { redisdb := NewClient(&Options{ Addr: "127.0.0.1:6379", Password: "", // no password set DB: 0, // use default DB }) pong, err := redisdb.Ping().Result() if err != nil { fmt.Println(pong, err) } return redisdb }
通过 cient.Ping() 来检查是否成功连接到了 redis 服务器
String 操作
func StringDemo() { fmt.Println("-----------------------welcome to StringDemo-----------------------") redisClient:=GetRedisClient() if redisClient ==nil{ fmt.Errorf("StringDemo redisClient is nil") return } name := "张三" key :="name:zhangsan" redisClient.Set(key , name,1 * time.Second) val := redisClient.Get(key) if val == nil { fmt.Errorf("StringDemo get error") } fmt.Println("name", val) }
List 操作
func ListDemo(){ fmt.Println("-----------------------welcome to ListDemo-----------------------") redisClient:=GetRedisClient() if redisClient == nil { fmt.Errorf("ListDemo redisClient is nil") return } articleKey := "article" result,err:=redisClient.RPush(articleKey, "a","b","c").Result() // if err!=nil { fmt.Println(err) return } fmt.Println("result:",result) result,err = redisClient.LPush(articleKey, "d").Result() // if err!=nil { fmt.Println(err) return } fmt.Println("result:",result) length, err := redisClient.LLen(articleKey).Result() if err != nil { fmt.Println("ListDemo LLen is nil") } fmt.Println("length: ", length) // 长度 mapOut,err1:=redisClient.LRange(articleKey,0,100).Result() if err1!=nil { fmt.Println(err1) return } for inx, item := range mapOut { fmt.Printf("\n %s:%s", inx, item) } }
Hash 操作
func HashDemo() { fmt.Println("-----------------------welcome to HashDemo-----------------------") redisClient := GetRedisClient() if redisClient == nil { fmt.Errorf("HashDemo redisClient is nil") return } article := Article{18, "测试文章内容22222", "测试文章内容22222测试文章内容22222测试文章内容22222", 10, 0} articleKey := "article:18" redisClient.HMSet(articleKey, ToStringDictionary(&article)) mapOut := redisClient.HGetAll(articleKey).Val() for inx, item := range mapOut { fmt.Printf("\n %s:%s", inx, item) } fmt.Print("\n") redisClient.HSet(articleKey, "Content", "测试文章内容") mapOut = redisClient.HGetAll(articleKey).Val() for inx, item := range mapOut { fmt.Printf("\n %s:%s", inx, item) } fmt.Print("\n") view, err := redisClient.HIncrBy(articleKey, "Views", 1).Result() if err != nil { fmt.Printf("\n HIncrBy error=%s ", err) } else { fmt.Printf("\n HIncrBy Views=%d ", view) } fmt.Print("\n") mapOut = redisClient.HGetAll(articleKey).Val() for inx, item := range mapOut { fmt.Printf("\n %s:%s", inx, item) } fmt.Print("\n") }
func GetRedisClientPool() *Client{ redisdb := NewClient(&Options{ Addr: "127.0.0.1:6379", Password: "", DB: 0, PoolSize: 5,}) pong, err := redisdb.Ping().Result() if err != nil { fmt.Println(pong, err) } return redisdb }
// 连接池测试 func connectPoolTest() { fmt.Println("-----------------------welcome to connect Pool Test-----------------------") client :=GetRedisClientPool() wg := sync.WaitGroup{} wg.Add(10) for i := 0; i < 10; i++ { go func() { defer wg.Done() for j := 0; j < 1000; 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, IdleConns: %d\n", client.PoolStats().TotalConns, client.PoolStats().IdleConns); }() } wg.Wait() }
package main import ( "fmt" . "github.com/go-redis/redis" . "redisDemo/models" "time" "sync" ) func main() { fmt.Println("-----------------------welcome to redisdemo-----------------------") //StringDemo() //ListDemo() //HashDemo() connectPoolTest() } func StringDemo() { fmt.Println("-----------------------welcome to StringDemo-----------------------") redisClient:=GetRedisClient() if redisClient ==nil{ fmt.Errorf("StringDemo redisClient is nil") return } name := "张三" key :="name:zhangsan" redisClient.Set(key , name,1 * time.Second) val := redisClient.Get(key) if val == nil { fmt.Errorf("StringDemo get error") } fmt.Println("name", val) } func ListDemo(){ fmt.Println("-----------------------welcome to ListDemo-----------------------") redisClient:=GetRedisClient() if redisClient == nil { fmt.Errorf("ListDemo redisClient is nil") return } articleKey := "article" result,err:=redisClient.RPush(articleKey, "a","b","c").Result() //在名称为 key 的list尾添加一个值为value的元素 if err!=nil { fmt.Println(err) return } fmt.Println("result:",result) result,err = redisClient.LPush(articleKey, "d").Result() //在名称为 key 的list头添加一个值为value的元素 if err!=nil { fmt.Println(err) return } fmt.Println("result:",result) length, err := redisClient.LLen(articleKey).Result() if err != nil { fmt.Println("ListDemo LLen is nil") } fmt.Println("length: ", length) // 长度 mapOut,err1:=redisClient.LRange(articleKey,0,100).Result() if err1!=nil { fmt.Println(err1) return } for inx, item := range mapOut { fmt.Printf("\n %s:%s", inx, item) } } func HashDemo() { fmt.Println("-----------------------welcome to HashDemo-----------------------") redisClient := GetRedisClient() if redisClient == nil { fmt.Errorf("HashDemo redisClient is nil") return } article := Article{18, "测试文章内容22222", "测试文章内容22222测试文章内容22222测试文章内容22222", 10, 0} articleKey := "article:18" redisClient.HMSet(articleKey, ToStringDictionary(&article)) mapOut := redisClient.HGetAll(articleKey).Val() for inx, item := range mapOut { fmt.Printf("\n %s:%s", inx, item) } fmt.Print("\n") redisClient.HSet(articleKey, "Content", "测试文章内容") mapOut = redisClient.HGetAll(articleKey).Val() for inx, item := range mapOut { fmt.Printf("\n %s:%s", inx, item) } fmt.Print("\n") view, err := redisClient.HIncrBy(articleKey, "Views", 1).Result() if err != nil { fmt.Printf("\n HIncrBy error=%s ", err) } else { fmt.Printf("\n HIncrBy Views=%d ", view) } fmt.Print("\n") mapOut = redisClient.HGetAll(articleKey).Val() for inx, item := range mapOut { fmt.Printf("\n %s:%s", inx, item) } fmt.Print("\n") } func GetRedisClient() *Client { redisdb := NewClient(&Options{ Addr: "127.0.0.1:6379", Password: "", // no password set DB: 0, // use default DB }) pong, err := redisdb.Ping().Result() if err != nil { fmt.Println(pong, err) } return redisdb } func GetRedisClientPool() *Client{ redisdb := NewClient(&Options{ Addr: "127.0.0.1:6379", Password: "", DB: 0, PoolSize: 5,}) pong, err := redisdb.Ping().Result() if err != nil { fmt.Println(pong, err) } return redisdb } // 连接池测试 func connectPoolTest() { fmt.Println("-----------------------welcome to connect Pool Test-----------------------") client :=GetRedisClientPool() wg := sync.WaitGroup{} wg.Add(10) for i := 0; i < 10; i++ { go func() { defer wg.Done() for j := 0; j < 1000; 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, IdleConns: %d\n", client.PoolStats().TotalConns, client.PoolStats().IdleConns); }() } wg.Wait() }
1. go语言使用Redis 还是非常简单的,以上已经把Redis 的基本的用法讲完了。大家可以自己动手写代码试试。
2. 完整代码:点击下载
作者:章为忠
关注我的微信公众号,获取相关的 源代码及视频资料。