中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

阿里云做電腦網(wǎng)站佛山網(wǎng)站設計實力樂云seo

阿里云做電腦網(wǎng)站,佛山網(wǎng)站設計實力樂云seo,oss掛載到wordpress,成人專業(yè)技能培訓機構概述 如果您沒有Golang的基礎,應該學習如下前置課程。 Golang零基礎入門Golang面向?qū)ο缶幊蘂o Web 基礎Go語言開發(fā)REST API接口_20240728Go語言操作MySQL開發(fā)用戶管理系統(tǒng)API教程_20240729Redis零基礎快速入門_20231227 基礎不好的同學每節(jié)課的代碼最好配合視頻進…

概述

如果您沒有Golang的基礎,應該學習如下前置課程。

  • Golang零基礎入門
  • Golang面向?qū)ο缶幊?/li>
  • Go Web 基礎
  • Go語言開發(fā)REST API接口_20240728
  • Go語言操作MySQL開發(fā)用戶管理系統(tǒng)API教程_20240729
  • Redis零基礎快速入門_20231227

基礎不好的同學每節(jié)課的代碼最好配合視頻進行閱讀和學習,如果基礎比較扎實,則閱讀本教程鞏固一下相關知識點即可,遇到不會的知識點再看視頻。

視頻課程

最近發(fā)現(xiàn)越來越多的公司在用Golang了,所以精心整理了一套視頻教程給大家,這個是其中的第6部,后續(xù)還會有很多。

視頻已經(jīng)錄制完成,完整目錄截圖如下:
在這里插入圖片描述

本套課程的特色是每節(jié)課都是一個核心知識點,每個視頻控制在十分鐘左右,精簡不廢話,拒絕浪費大家的時間。

課程目錄

  • 01 概述
  • 02 建立Redis連接對象
  • 03 edis的打開和關閉方法
  • 04 通過Do執(zhí)行get和set命令
  • 05 通過String自動轉(zhuǎn)換字符串
  • 06 通過Do實現(xiàn)mset和mget的操作
  • 07 通過Do實現(xiàn)hset和hget的操作
  • 08 通過Do實現(xiàn)lpush和lpop以及l(fā)len的操作
  • 09 Redis的連接池介紹
  • 10 Redis連接池的創(chuàng)建和使用
  • 11 Redis的管道操作
  • 12 Redis的事務操作
  • 13 實現(xiàn)redigo的本地化
  • 14 對zdpgo_redis的包結構進行調(diào)整
  • 15 發(fā)布zdpgo_redisv1.1.0版本
  • 16 新增用戶
  • 17 修改用戶
  • 18 刪除用戶
  • 19 查詢所有用戶
  • 20 實現(xiàn)查詢所有用戶的接口并進行測試
  • 21 實現(xiàn)新增用戶的接口并進行測試
  • 22 解決ID唯一性的問題
  • 23 實現(xiàn)修改用戶的接口并進行測試
  • 24 實現(xiàn)刪除用戶的接口并進行測試
  • 25 實現(xiàn)根據(jù)ID查詢用戶的接口并進行測試
  • 26 總結

完整代碼

01 概述

02 建立Redis連接對象

package mainimport ("fmt""github.com/gomodule/redigo/redis"
)func main() {r, err := redis.Dial("tcp", "127.0.0.1:6379")if err != nil {fmt.Println(err)return}defer r.Close()
}

03 edis的打開和關閉方法

package mainimport ("fmt""github.com/gomodule/redigo/redis"
)var (r   redis.Connerr error
)func InitRedis() {r, err = redis.Dial("tcp", "127.0.0.1:6379")if err != nil {fmt.Println(err)return}
}func CloseRedis() {r.Close()
}func main() {InitRedis()defer CloseRedis()fmt.Println("主程序的操作。。。")
}

04 通過Do執(zhí)行get和set命令

package mainimport ("fmt""github.com/gomodule/redigo/redis"
)var (r   redis.Connerr error
)func InitRedis() {r, err = redis.Dial("tcp", "127.0.0.1:6379")if err != nil {fmt.Println(err)return}
}func CloseRedis() {r.Close()
}func main() {InitRedis()defer CloseRedis()// set 操作_, err = r.Do("SET", "name", "張三")if err != nil {fmt.Println(err)return}// get 操作var reply interface{}reply, err = r.Do("GET", "name")if err != nil {fmt.Println(err)return}fmt.Println(string(reply.([]byte)))
}

05 通過String自動轉(zhuǎn)換字符串

package mainimport ("fmt""github.com/gomodule/redigo/redis"
)var (r   redis.Connerr error
)func InitRedis() {r, err = redis.Dial("tcp", "127.0.0.1:6379")if err != nil {fmt.Println(err)return}
}func CloseRedis() {r.Close()
}func main() {InitRedis()defer CloseRedis()// set 操作_, err = r.Do("SET", "name", "張三")if err != nil {fmt.Println(err)return}// get 操作var reply stringreply, err = redis.String(r.Do("GET", "name"))if err != nil {fmt.Println(err)return}fmt.Println(reply)
}

06 通過Do實現(xiàn)mset和mget的操作

package mainimport ("fmt""github.com/gomodule/redigo/redis"
)var (r   redis.Connerr error
)func InitRedis() {r, err = redis.Dial("tcp", "127.0.0.1:6379")if err != nil {fmt.Println(err)return}
}func CloseRedis() {r.Close()
}func main() {InitRedis()defer CloseRedis()// set 操作// 也一定要注意,是:key1,value1,key2,value2... 的格式_, err = r.Do("MSET", "name", "張三", "age", 22, "gender", "男")if err != nil {fmt.Println(err)return}// get 操作// 這個傳遞的是想要哪些keyvar reply []stringreply, err = redis.Strings(r.Do("MGET", "name", "age", "gender"))if err != nil {fmt.Println(err)return}fmt.Println(reply)
}

07 通過Do實現(xiàn)hset和hget的操作

package mainimport ("fmt""github.com/gomodule/redigo/redis"
)var (r   redis.Connerr error
)func InitRedis() {r, err = redis.Dial("tcp", "127.0.0.1:6379")if err != nil {fmt.Println(err)return}
}func CloseRedis() {r.Close()
}func main() {InitRedis()defer CloseRedis()_, err = r.Do("HSET", "user", "name", "張三")if err != nil {fmt.Println(err)return}var reply stringreply, err = redis.String(r.Do("HGET", "user", "name"))if err != nil {fmt.Println(err)return}fmt.Println(reply)
}

08 通過Do實現(xiàn)lpush和lpop以及l(fā)len的操作

package mainimport ("fmt""github.com/gomodule/redigo/redis"
)var (r   redis.Connerr error
)func InitRedis() {r, err = redis.Dial("tcp", "127.0.0.1:6379")if err != nil {fmt.Println(err)return}
}func CloseRedis() {r.Close()
}func main() {InitRedis()defer CloseRedis()_, err = r.Do("LPUSH", "arr", "張三", "李四", "王五")if err != nil {fmt.Println(err)return}var reply stringreply, err = redis.String(r.Do("LPOP", "arr"))if err != nil {fmt.Println(err)return}fmt.Println(reply)var length intlength, err = redis.Int(r.Do("LLEN", "arr"))if err != nil {fmt.Println(err)return}fmt.Println(length)}

09 Redis的連接池介紹

10 Redis連接池的創(chuàng)建和使用

package mainimport ("fmt""github.com/gomodule/redigo/redis"
)var (pool *redis.Poolerr  error
)func InitRedis() {pool = &redis.Pool{MaxIdle:     16,MaxActive:   1024,IdleTimeout: 300,Dial: func() (redis.Conn, error) {return redis.Dial("tcp", "127.0.0.1:6379")},}
}func main() {InitRedis()r := pool.Get()defer r.Close()_, err = r.Do("LPUSH", "arr", "張三", "李四", "王五")if err != nil {fmt.Println(err)return}var reply stringreply, err = redis.String(r.Do("LPOP", "arr"))if err != nil {fmt.Println(err)return}fmt.Println(reply)var length intlength, err = redis.Int(r.Do("LLEN", "arr"))if err != nil {fmt.Println(err)return}fmt.Println(length)}

11 Redis的管道操作

package mainimport ("fmt""github.com/gomodule/redigo/redis"
)var (pool *redis.Poolerr  error
)func InitRedis() {pool = &redis.Pool{MaxIdle:     16,MaxActive:   1024,IdleTimeout: 300,Dial: func() (redis.Conn, error) {return redis.Dial("tcp", "127.0.0.1:6379")},}
}func main() {InitRedis()r := pool.Get()defer r.Close()// 寫入緩沖r.Send("SET", "name1", "張三")r.Send("SET", "name2", "李四")// 清空緩沖,寫入服務端(Redis)r.Flush()// 讀取:先進先出receive, err := r.Receive()fmt.Printf("receive:%#v, err:%v\n", receive, err)receive, err = r.Receive()fmt.Printf("receive:%#v, err:%v\n", receive, err)// 因為沒有數(shù)據(jù)了,所以會一直處于等待狀態(tài)receive, err = r.Receive()fmt.Printf("receive:%#v, err:%v\n", receive, err)
}

12 Redis的事務操作

package mainimport ("fmt""github.com/gomodule/redigo/redis"
)var (pool *redis.Poolerr  error
)func InitRedis() {pool = &redis.Pool{MaxIdle:     16,MaxActive:   1024,IdleTimeout: 300,Dial: func() (redis.Conn, error) {return redis.Dial("tcp", "127.0.0.1:6379")},}
}func main() {InitRedis()r := pool.Get()defer r.Close()r.Send("MULTI") // 開啟事務// 事務過程中的一些業(yè)務操作r.Send("INCR", "num1")r.Send("INCR", "num2")reply, err := r.Do("EXEC") // 執(zhí)行事務fmt.Printf("%#v err:%v\n", reply, err)
}

13 實現(xiàn)redigo的本地化

14 對zdpgo_redis的包結構進行調(diào)整

15 發(fā)布zdpgo_redisv1.1.0版本

16 新增用戶

package mainimport ("encoding/json""fmt""github.com/zhangdapeng520/zdpgo_redis"
)var (pool *zdpgo_redis.Poolerr  error
)func InitRedis() {pool = &zdpgo_redis.Pool{MaxIdle:     16,MaxActive:   1024,IdleTimeout: 300,Dial: func() (zdpgo_redis.Conn, error) {return zdpgo_redis.Dial("tcp", "127.0.0.1:6379")},}
}type User struct {Id   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}func main() {InitRedis()r := pool.Get()defer r.Close()// string  hash  list// string  hash users:{1:{id:1,xxx},2:xxx}// string 代碼會更簡單zs := User{2, "李四", 23}key := fmt.Sprintf("user/%d", zs.Id)zsBytes, _ := json.Marshal(zs)value := string(zsBytes)r.Do("SET", key, value)value2, _ := zdpgo_redis.String(r.Do("GET", key))fmt.Println(value2)
}

17 修改用戶

package mainimport ("encoding/json""fmt""github.com/zhangdapeng520/zdpgo_redis"
)var (pool *zdpgo_redis.Poolerr  error
)func InitRedis() {pool = &zdpgo_redis.Pool{MaxIdle:     16,MaxActive:   1024,IdleTimeout: 300,Dial: func() (zdpgo_redis.Conn, error) {return zdpgo_redis.Dial("tcp", "127.0.0.1:6379")},}
}type User struct {Id   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}func main() {InitRedis()r := pool.Get()defer r.Close()id := 1name := "李四"// 查詢key := fmt.Sprintf("user/%d", id)value2, _ := zdpgo_redis.String(r.Do("GET", key))fmt.Println(value2)// 解析var user Userjson.Unmarshal([]byte(value2), &user)fmt.Println(user)// 修改user.Name = name// 重新存儲jsonBytes, _ := json.Marshal(user)fmt.Println(string(jsonBytes))r.Do("SET", key, string(jsonBytes))
}

18 刪除用戶

package mainimport ("fmt""github.com/zhangdapeng520/zdpgo_redis"
)var (pool *zdpgo_redis.Poolerr  error
)func InitRedis() {pool = &zdpgo_redis.Pool{MaxIdle:     16,MaxActive:   1024,IdleTimeout: 300,Dial: func() (zdpgo_redis.Conn, error) {return zdpgo_redis.Dial("tcp", "127.0.0.1:6379")},}
}type User struct {Id   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}func main() {InitRedis()r := pool.Get()defer r.Close()id := 1// 查詢key := fmt.Sprintf("user/%d", id)value2, _ := zdpgo_redis.String(r.Do("GET", key))fmt.Println(value2)// 刪除r.Do("DEL", key)// 再查詢value2, _ = zdpgo_redis.String(r.Do("GET", key))fmt.Println(value2)
}

19 查詢所有用戶

package mainimport ("encoding/json""fmt""github.com/zhangdapeng520/zdpgo_redis"
)var (pool *zdpgo_redis.Poolerr  error
)func InitRedis() {pool = &zdpgo_redis.Pool{MaxIdle:     16,MaxActive:   1024,IdleTimeout: 300,Dial: func() (zdpgo_redis.Conn, error) {return zdpgo_redis.Dial("tcp", "127.0.0.1:6379")},}
}type User struct {Id   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}func main() {InitRedis()r := pool.Get()defer r.Close()// 獲取所有的keyuserKeys, _ := zdpgo_redis.Strings(r.Do("KEYS", "user/*"))fmt.Println(userKeys)// 查詢var users []Userfor _, key := range userKeys {var user UseruserStr, _ := zdpgo_redis.String(r.Do("GET", key))json.Unmarshal([]byte(userStr), &user)users = append(users, user)}fmt.Println(users)
}

20 實現(xiàn)查詢所有用戶的接口并進行測試

package mainimport ("encoding/json""github.com/zhangdapeng520/zdpgo_httprouter""github.com/zhangdapeng520/zdpgo_redis""net/http""time"
)type User struct {Id   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}var (pool *zdpgo_redis.Pool
)func InitRedis() {pool = &zdpgo_redis.Pool{MaxIdle:     16,MaxActive:   1024,IdleTimeout: 300,Dial: func() (zdpgo_redis.Conn, error) {return zdpgo_redis.Dial("tcp", "127.0.0.1:6379")},}
}func RouterGetUser(w http.ResponseWriter, r *http.Request, _ zdpgo_httprouter.Params) {rdb := pool.Get()defer rdb.Close()// 獲取所有的keyuserKeys, _ := zdpgo_redis.Strings(rdb.Do("KEYS", "user/*"))// 查詢var users []Userfor _, key := range userKeys {var user UseruserStr, _ := zdpgo_redis.String(rdb.Do("GET", key))json.Unmarshal([]byte(userStr), &user)users = append(users, user)}zdpgo_httprouter.ResponseSuccess(w, users)
}func main() {InitRedis()router := zdpgo_httprouter.New()router.GET("/user", RouterGetUser)server := &http.Server{Addr:         "0.0.0.0:8888",Handler:      router,ReadTimeout:  5 * time.Second,WriteTimeout: 5 * time.Second,}server.ListenAndServe()
}
package mainimport ("fmt""io""net/http"
)func main() {resp, err := http.Get("http://localhost:8888/user")if err != nil {fmt.Println(err)return}body := resp.BodybodyBytes, err := io.ReadAll(body)if err != nil {fmt.Println(err)return}fmt.Println(string(bodyBytes))
}

21 實現(xiàn)新增用戶的接口并進行測試

package mainimport ("encoding/json""fmt""github.com/zhangdapeng520/zdpgo_httprouter""github.com/zhangdapeng520/zdpgo_redis""net/http""time"
)type User struct {Id   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}var (pool *zdpgo_redis.Pool
)func InitRedis() {pool = &zdpgo_redis.Pool{MaxIdle:     16,MaxActive:   1024,IdleTimeout: 300,Dial: func() (zdpgo_redis.Conn, error) {return zdpgo_redis.Dial("tcp", "127.0.0.1:6379")},}
}func RouterGetUser(w http.ResponseWriter, r *http.Request, _ zdpgo_httprouter.Params) {rdb := pool.Get()defer rdb.Close()// 獲取所有的keyuserKeys, _ := zdpgo_redis.Strings(rdb.Do("KEYS", "user/*"))// 查詢var users []Userfor _, key := range userKeys {var user UseruserStr, _ := zdpgo_redis.String(rdb.Do("GET", key))json.Unmarshal([]byte(userStr), &user)users = append(users, user)}zdpgo_httprouter.ResponseSuccess(w, users)
}func RouterAddUser(w http.ResponseWriter, r *http.Request, _ zdpgo_httprouter.Params) {rdb := pool.Get()defer rdb.Close()var user Userzdpgo_httprouter.GetJson(r, &user)id := time.Now().Nanosecond()user.Id = id// 新增key := fmt.Sprintf("user/%d", user.Id)zsBytes, _ := json.Marshal(user)value := string(zsBytes)rdb.Do("SET", key, value)// 返回zdpgo_httprouter.ResponseSuccess(w, user)
}func main() {InitRedis()router := zdpgo_httprouter.New()router.POST("/user", RouterAddUser)router.GET("/user", RouterGetUser)server := &http.Server{Addr:         "0.0.0.0:8888",Handler:      router,ReadTimeout:  5 * time.Second,WriteTimeout: 5 * time.Second,}server.ListenAndServe()
}
package mainimport ("fmt""github.com/zhangdapeng520/zdpgo_httprouter""io"
)func main() {targetUrl := "http://localhost:8888/user"data := map[string]interface{}{"name": "王五","age":  35,}resp, err := zdpgo_httprouter.SendJson("POST", targetUrl, data)if err != nil {fmt.Println(err)return}body := resp.BodybodyBytes, err := io.ReadAll(body)if err != nil {fmt.Println(err)return}fmt.Println(string(bodyBytes))
}

22 解決ID唯一性的問題

package mainimport ("encoding/json""fmt""github.com/zhangdapeng520/zdpgo_httprouter""github.com/zhangdapeng520/zdpgo_redis""net/http""time"
)type User struct {Id   int64  `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}var (pool *zdpgo_redis.Pool
)func InitRedis() {pool = &zdpgo_redis.Pool{MaxIdle:     16,MaxActive:   1024,IdleTimeout: 300,Dial: func() (zdpgo_redis.Conn, error) {return zdpgo_redis.Dial("tcp", "127.0.0.1:6379")},}
}func RouterGetUser(w http.ResponseWriter, r *http.Request, _ zdpgo_httprouter.Params) {rdb := pool.Get()defer rdb.Close()// 獲取所有的keyuserKeys, _ := zdpgo_redis.Strings(rdb.Do("KEYS", "user/*"))// 查詢var users []Userfor _, key := range userKeys {var user UseruserStr, _ := zdpgo_redis.String(rdb.Do("GET", key))json.Unmarshal([]byte(userStr), &user)users = append(users, user)}zdpgo_httprouter.ResponseSuccess(w, users)
}func RouterAddUser(w http.ResponseWriter, r *http.Request, _ zdpgo_httprouter.Params) {rdb := pool.Get()defer rdb.Close()var user Userzdpgo_httprouter.GetJson(r, &user)id := time.Now().UnixNano()user.Id = id// 新增key := fmt.Sprintf("user/%d", user.Id)zsBytes, _ := json.Marshal(user)value := string(zsBytes)rdb.Do("SET", key, value)// 返回zdpgo_httprouter.ResponseSuccess(w, user)
}func main() {InitRedis()router := zdpgo_httprouter.New()router.POST("/user", RouterAddUser)router.GET("/user", RouterGetUser)server := &http.Server{Addr:         "0.0.0.0:8888",Handler:      router,ReadTimeout:  5 * time.Second,WriteTimeout: 5 * time.Second,}server.ListenAndServe()
}
package mainimport ("fmt""github.com/zhangdapeng520/zdpgo_httprouter""io"
)func main() {targetUrl := "http://localhost:8888/user"data := map[string]interface{}{"name": "王五","age":  35,}resp, err := zdpgo_httprouter.SendJson("POST", targetUrl, data)if err != nil {fmt.Println(err)return}body := resp.BodybodyBytes, err := io.ReadAll(body)if err != nil {fmt.Println(err)return}fmt.Println(string(bodyBytes))
}

23 實現(xiàn)修改用戶的接口并進行測試

package mainimport ("encoding/json""fmt""github.com/zhangdapeng520/zdpgo_httprouter""github.com/zhangdapeng520/zdpgo_redis""net/http""time"
)type User struct {Id   int64  `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}var (pool *zdpgo_redis.Pool
)func InitRedis() {pool = &zdpgo_redis.Pool{MaxIdle:     16,MaxActive:   1024,IdleTimeout: 300,Dial: func() (zdpgo_redis.Conn, error) {return zdpgo_redis.Dial("tcp", "127.0.0.1:6379")},}
}func RouterGetUser(w http.ResponseWriter, r *http.Request, _ zdpgo_httprouter.Params) {rdb := pool.Get()defer rdb.Close()// 獲取所有的keyuserKeys, _ := zdpgo_redis.Strings(rdb.Do("KEYS", "user/*"))// 查詢var users []Userfor _, key := range userKeys {var user UseruserStr, _ := zdpgo_redis.String(rdb.Do("GET", key))json.Unmarshal([]byte(userStr), &user)users = append(users, user)}zdpgo_httprouter.ResponseSuccess(w, users)
}func RouterAddUser(w http.ResponseWriter, r *http.Request, _ zdpgo_httprouter.Params) {rdb := pool.Get()defer rdb.Close()var user Userzdpgo_httprouter.GetJson(r, &user)id := time.Now().UnixNano()user.Id = id// 新增key := fmt.Sprintf("user/%d", user.Id)zsBytes, _ := json.Marshal(user)value := string(zsBytes)rdb.Do("SET", key, value)// 返回zdpgo_httprouter.ResponseSuccess(w, user)
}func RouterUpdateUser(w http.ResponseWriter, r *http.Request, ps zdpgo_httprouter.Params) {rdb := pool.Get()defer rdb.Close()var user Uservar idStr = ps.ByName("id")zdpgo_httprouter.GetJson(r, &user)// 查詢key := fmt.Sprintf("user/%s", idStr)userJson, _ := zdpgo_redis.String(rdb.Do("GET", key))// 解析var dbUser Userjson.Unmarshal([]byte(userJson), &dbUser)// 修改dbUser.Name = user.NamedbUser.Age = user.Age// 重新存儲jsonBytes, _ := json.Marshal(dbUser)rdb.Do("SET", key, string(jsonBytes))// 返回zdpgo_httprouter.ResponseSuccess(w, dbUser)
}func main() {InitRedis()router := zdpgo_httprouter.New()router.POST("/user", RouterAddUser)router.GET("/user", RouterGetUser)router.PUT("/user/:id", RouterUpdateUser)server := &http.Server{Addr:         "0.0.0.0:8888",Handler:      router,ReadTimeout:  5 * time.Second,WriteTimeout: 5 * time.Second,}server.ListenAndServe()
}
package mainimport ("fmt""github.com/zhangdapeng520/zdpgo_httprouter""io"
)func main() {targetUrl := "http://localhost:8888/user/108534300"data := map[string]interface{}{"name": "王六","age":  35,}resp, err := zdpgo_httprouter.SendJson("PUT", targetUrl, data)if err != nil {fmt.Println(err)return}body := resp.BodybodyBytes, err := io.ReadAll(body)if err != nil {fmt.Println(err)return}fmt.Println(string(bodyBytes))
}

24 實現(xiàn)刪除用戶的接口并進行測試

package mainimport ("encoding/json""fmt""github.com/zhangdapeng520/zdpgo_httprouter""github.com/zhangdapeng520/zdpgo_redis""net/http""time"
)type User struct {Id   int64  `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}var (pool *zdpgo_redis.Pool
)func InitRedis() {pool = &zdpgo_redis.Pool{MaxIdle:     16,MaxActive:   1024,IdleTimeout: 300,Dial: func() (zdpgo_redis.Conn, error) {return zdpgo_redis.Dial("tcp", "127.0.0.1:6379")},}
}func RouterGetUser(w http.ResponseWriter, r *http.Request, _ zdpgo_httprouter.Params) {rdb := pool.Get()defer rdb.Close()// 獲取所有的keyuserKeys, _ := zdpgo_redis.Strings(rdb.Do("KEYS", "user/*"))// 查詢var users []Userfor _, key := range userKeys {var user UseruserStr, _ := zdpgo_redis.String(rdb.Do("GET", key))json.Unmarshal([]byte(userStr), &user)users = append(users, user)}zdpgo_httprouter.ResponseSuccess(w, users)
}func RouterAddUser(w http.ResponseWriter, r *http.Request, _ zdpgo_httprouter.Params) {rdb := pool.Get()defer rdb.Close()var user Userzdpgo_httprouter.GetJson(r, &user)id := time.Now().UnixNano()user.Id = id// 新增key := fmt.Sprintf("user/%d", user.Id)zsBytes, _ := json.Marshal(user)value := string(zsBytes)rdb.Do("SET", key, value)// 返回zdpgo_httprouter.ResponseSuccess(w, user)
}func RouterUpdateUser(w http.ResponseWriter, r *http.Request, ps zdpgo_httprouter.Params) {rdb := pool.Get()defer rdb.Close()var user Uservar idStr = ps.ByName("id")zdpgo_httprouter.GetJson(r, &user)// 查詢key := fmt.Sprintf("user/%s", idStr)userJson, _ := zdpgo_redis.String(rdb.Do("GET", key))// 解析var dbUser Userjson.Unmarshal([]byte(userJson), &dbUser)// 修改dbUser.Name = user.NamedbUser.Age = user.Age// 重新存儲jsonBytes, _ := json.Marshal(dbUser)rdb.Do("SET", key, string(jsonBytes))// 返回zdpgo_httprouter.ResponseSuccess(w, dbUser)
}func RouterDeleteUser(w http.ResponseWriter, r *http.Request, ps zdpgo_httprouter.Params) {rdb := pool.Get()defer rdb.Close()var idStr = ps.ByName("id")// 查詢key := fmt.Sprintf("user/%s", idStr)rdb.Do("DEL", key)// 返回zdpgo_httprouter.ResponseSuccess(w, nil)
}func main() {InitRedis()router := zdpgo_httprouter.New()router.POST("/user", RouterAddUser)router.GET("/user", RouterGetUser)router.PUT("/user/:id", RouterUpdateUser)router.DELETE("/user/:id", RouterDeleteUser)server := &http.Server{Addr:         "0.0.0.0:8888",Handler:      router,ReadTimeout:  5 * time.Second,WriteTimeout: 5 * time.Second,}server.ListenAndServe()
}
package mainimport ("fmt""github.com/zhangdapeng520/zdpgo_httprouter""io"
)func main() {targetUrl := "http://localhost:8888/user/53"data := map[string]interface{}{}resp, err := zdpgo_httprouter.SendJson("DELETE", targetUrl, data)if err != nil {fmt.Println(err)return}body := resp.BodybodyBytes, err := io.ReadAll(body)if err != nil {fmt.Println(err)return}fmt.Println(string(bodyBytes))
}

25 實現(xiàn)根據(jù)ID查詢用戶的接口并進行測試

package mainimport ("encoding/json""fmt""github.com/zhangdapeng520/zdpgo_httprouter""github.com/zhangdapeng520/zdpgo_redis""net/http""time"
)type User struct {Id   int64  `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}var (pool *zdpgo_redis.Pool
)func InitRedis() {pool = &zdpgo_redis.Pool{MaxIdle:     16,MaxActive:   1024,IdleTimeout: 300,Dial: func() (zdpgo_redis.Conn, error) {return zdpgo_redis.Dial("tcp", "127.0.0.1:6379")},}
}func RouterGetUser(w http.ResponseWriter, r *http.Request, _ zdpgo_httprouter.Params) {rdb := pool.Get()defer rdb.Close()// 獲取所有的keyuserKeys, _ := zdpgo_redis.Strings(rdb.Do("KEYS", "user/*"))// 查詢var users []Userfor _, key := range userKeys {var user UseruserStr, _ := zdpgo_redis.String(rdb.Do("GET", key))json.Unmarshal([]byte(userStr), &user)users = append(users, user)}zdpgo_httprouter.ResponseSuccess(w, users)
}func RouterAddUser(w http.ResponseWriter, r *http.Request, _ zdpgo_httprouter.Params) {rdb := pool.Get()defer rdb.Close()var user Userzdpgo_httprouter.GetJson(r, &user)id := time.Now().UnixNano()user.Id = id// 新增key := fmt.Sprintf("user/%d", user.Id)zsBytes, _ := json.Marshal(user)value := string(zsBytes)rdb.Do("SET", key, value)// 返回zdpgo_httprouter.ResponseSuccess(w, user)
}func RouterUpdateUser(w http.ResponseWriter, r *http.Request, ps zdpgo_httprouter.Params) {rdb := pool.Get()defer rdb.Close()var user Uservar idStr = ps.ByName("id")zdpgo_httprouter.GetJson(r, &user)// 查詢key := fmt.Sprintf("user/%s", idStr)userJson, _ := zdpgo_redis.String(rdb.Do("GET", key))// 解析var dbUser Userjson.Unmarshal([]byte(userJson), &dbUser)// 修改dbUser.Name = user.NamedbUser.Age = user.Age// 重新存儲jsonBytes, _ := json.Marshal(dbUser)rdb.Do("SET", key, string(jsonBytes))// 返回zdpgo_httprouter.ResponseSuccess(w, dbUser)
}func RouterDeleteUser(w http.ResponseWriter, r *http.Request, ps zdpgo_httprouter.Params) {rdb := pool.Get()defer rdb.Close()var idStr = ps.ByName("id")// 查詢key := fmt.Sprintf("user/%s", idStr)rdb.Do("DEL", key)// 返回zdpgo_httprouter.ResponseSuccess(w, nil)
}func RouterGetUserId(w http.ResponseWriter, r *http.Request, ps zdpgo_httprouter.Params) {rdb := pool.Get()defer rdb.Close()var idStr = ps.ByName("id")// 查詢key := fmt.Sprintf("user/%s", idStr)userJson, _ := zdpgo_redis.String(rdb.Do("GET", key))var dbUser Userjson.Unmarshal([]byte(userJson), &dbUser)// 返回zdpgo_httprouter.ResponseSuccess(w, dbUser)
}func main() {InitRedis()router := zdpgo_httprouter.New()router.POST("/user", RouterAddUser)router.GET("/user", RouterGetUser)router.PUT("/user/:id", RouterUpdateUser)router.DELETE("/user/:id", RouterDeleteUser)router.GET("/user/:id", RouterGetUserId)server := &http.Server{Addr:         "0.0.0.0:8888",Handler:      router,ReadTimeout:  5 * time.Second,WriteTimeout: 5 * time.Second,}server.ListenAndServe()
}
package mainimport ("fmt""io""net/http"
)func main() {resp, err := http.Get("http://localhost:8888/user/1")if err != nil {fmt.Println(err)return}body := resp.BodybodyBytes, err := io.ReadAll(body)if err != nil {fmt.Println(err)return}fmt.Println(string(bodyBytes))
}

總結

本套教程主要講解Go語言操作Redis基礎知識,然后還講解了管道,連接池,事務等高級用戶。借助用戶管理這個業(yè)務為中心,詳細講解了如何使用Go語言加Redis實現(xiàn)用戶的增刪改查操作,之后有結合httprouter的用法,開發(fā)用戶管理的增刪改查API接口。

通過本套課程,能幫你入門Go語言操作Redis的技術。

如果您需要完整的源碼,打賞20元即可。

人生苦短,我用Python,我是您身邊的Python私教~

http://www.risenshineclean.com/news/53561.html

相關文章:

  • 自己制作二維碼的軟件seo服務公司招聘
  • 當下網(wǎng)站建設企業(yè)網(wǎng)站模板 免費
  • 做網(wǎng)站付多少定金uv推廣平臺
  • 設計素材網(wǎng)站照片逆冬黑帽seo培訓
  • 電子商務網(wǎng)站建設與管理王生春今日新聞 最新消息 大事
  • 有哪些做網(wǎng)站的公司四川seo推廣公司
  • 北京便宜網(wǎng)站建設德國搜索引擎
  • 完整網(wǎng)站設計東莞網(wǎng)站優(yōu)化公司
  • 網(wǎng)站靜態(tài)和動態(tài)那個好app推廣平臺有哪些
  • by wordpressseo短視頻
  • 河北滄州建設官方網(wǎng)站專業(yè)的網(wǎng)絡推廣
  • 中華住房與城鄉(xiāng)建設廳網(wǎng)站旺道網(wǎng)站優(yōu)化
  • 響應式網(wǎng)站模板 金融大專網(wǎng)絡營銷專業(yè)好不好
  • 網(wǎng)站的報價怎么做sem優(yōu)化策略
  • 外國語學院英文網(wǎng)站建設天津企業(yè)seo
  • 網(wǎng)站制作鄭州軟件推廣怎么賺錢
  • 什么網(wǎng)站可以賺錢啊專業(yè)做app軟件開發(fā)公司
  • 做網(wǎng)站的軟件 簡單易學今日特大新聞新事
  • 陜西華偉建設有限公司網(wǎng)站seo描述是什么意思
  • 網(wǎng)頁編輯器綠色版360優(yōu)化大師官方網(wǎng)站
  • 好看動漫網(wǎng)替代網(wǎng)站北京百度推廣seo
  • 免費咨詢做網(wǎng)站360建網(wǎng)站
  • 小程序開發(fā)費用一般多少錢汕頭seo外包公司
  • 免費做網(wǎng)站廣告百度搜索引擎原理
  • 自己做微網(wǎng)站制作教程山東seo多少錢
  • 做網(wǎng)站有2個前提條件 一個是網(wǎng)站百度推廣怎么提高關鍵詞排名
  • 揚州建網(wǎng)站網(wǎng)站建設公司推薦
  • 網(wǎng)站工信部公安備案查詢個人主頁網(wǎng)頁設計模板
  • 中法電商網(wǎng)站建設如何在百度上建立網(wǎng)站
  • 西安 網(wǎng)站設計優(yōu)秀的網(wǎng)絡搜索引擎營銷案例