<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
先上命令速查網站,菜鳥yyds
https://www.runoob.com/redis/redis-strings.html
操作redis的包是go-redis/redis
官方檔案 https://redis.uptrace.dev/guide/
github https://github.com/go-redis/redis
建立專案
建立test資料夾
建立 Redis_test.go 檔案
直接上程式碼,程式碼解釋全寫在註釋裡
package test import ( "context" "encoding/json" "fmt" "github.com/go-redis/redis/v8" "testing" "time" ) var ctx = context.Background() var rdb *redis.Client func init() { rdb = redis.NewClient(&redis.Options{ // 埠需要改,這裡是docker的埠 Addr: "localhost:49153", Password: "redispw", // no password set DB: 0, // use default DB PoolSize:15, MinIdleConns: 10, //在啟動階段建立指定數量的Idle連線,並長期維持idle狀態的連線數不少於指定數量;。 //超時 //DialTimeout: 5 * time.Second, //連線建立超時時間,預設5秒。 //ReadTimeout: 3 * time.Second, //讀超時,預設3秒, -1表示取消讀超時 //WriteTimeout: 3 * time.Second, //寫超時,預設等於讀超時 //PoolTimeout: 4 * time.Second, //當所有連線都處在繁忙狀態時,使用者端等待可用連線的最大等待時長,預設為讀超時+1秒。 }) } // 基礎使用 func Test_Base(t *testing.T) { // 新增key //0表示沒有過期時間 rdb.Set(ctx, "testKey", "xxx", 0) // 獲取值 val, err := rdb.Get(ctx, "testKey").Result() if err != nil { fmt.Println("錯誤", err) } fmt.Println("值:", val) // 設定key過期時間 成功true rdb.Expire(ctx, "testKey", time.Second*60) // 存在返回1 rdb.Exists(ctx, "testKey") // key不存在時設定值 rdb.SetNX(ctx, "unkey", "val", 0) rdb.Set(ctx, "testKey2", "xxx", 0) // 刪除key 可刪除多個 rdb.Del(ctx, "testKey2", "testKey") } // 字串 func Test_String(t *testing.T) { // 設定值 rdb.Set(ctx, "strKey", 100, 0) rdb.Set(ctx, "straey", 100, 0) // key自增1 rdb.Incr(ctx, "strKey") // 增加 66 rdb.IncrBy(ctx, "straey", 66) // -1 rdb.Decr(ctx, "straey") // -5 rdb.DecrBy(ctx, "straey", 5) // 過期時間 rdb.TTL(ctx, "strKey") // str*ey : *為任意字串 // str[kKac]ey : 匹配[] 內的單個字元 strkey,strKey,straey,strcey // str?ey : ? 任意單個字元 // 掃描key iter := rdb.Scan(ctx, 0, "str?ey", 0).Iterator() for iter.Next(ctx) { fmt.Println("keys", iter.Val(), ": val", rdb.Get(ctx, iter.Val()).Val()) } if err := iter.Err(); err != nil { panic(err) } } // 雜湊 func Test_Hash(t *testing.T) { rdb.HMSet(ctx,"hkey1","name","shushan","age",99,"b",true) // 以結構體存入 注意redis tag type User struct { Name string `json:"name,omitempty" redis:"name"` Age int `json:"age,omitempty" redis:"age"` B bool `json:"b,omitempty" redis:"b"` //... } user1 := User{ Name: "shushan2", Age: 55, B: true, } // 結構體序列化反序列化map 你也可以用其他包進行轉化為map,但是注意轉化後的鍵名大小寫問題 m := make(map[string]interface{}) buf,_ := json.Marshal(user1) _ = json.Unmarshal(buf,&m) // 存入 rdb.HSet(ctx, "user4", m) // 取出繫結到結構體 map也行 var user User rdb.HGetAll(ctx,"user4").Scan(&user) fmt.Printf(" %#v n ",user) // test.User{Name:"shushan2", Age:55, B:true} // 獲取key下的所有值 *匹配方式與string的所有原理一樣 iter := rdb.HScan(ctx,"user4",0,"*",0).Iterator() for iter.Next(ctx) { fmt.Println("keys", iter.Val()) } if err := iter.Err(); err != nil { panic(err) } } // 列表 func Test_List(t *testing.T) { // 新增 rdb.LPush(ctx,"listKey1",111,222,333,444) rdb.RPush(ctx,"listKey1",5555) // 不存在不新增 rdb.LPushX(ctx,"unlistKey",111) var intf []int // 根據索引獲取 繫結到陣列 rdb.LRange(ctx,"listKey1",0,10).ScanSlice(&intf) fmt.Println(intf) var i int // 彈出 rdb.LPop(ctx,"listKey1").Scan(&i) fmt.Println(i) //.... } // 集合 func Test_Set(t *testing.T) { // 新增 rdb.SAdd(ctx,"setKey1","m1","onlyk1") rdb.SAdd(ctx,"setKey2","m2","xca") sl,_:= rdb.SDiff(ctx,"setKey1","setKey2").Result() fmt.Println(sl) // onlyk1,m1 //隨機移除 var val string rdb.SPop(ctx,"setKey1").Scan(&val) fmt.Println(val) // ..... } // 管道 func Test_Pipe(t *testing.T) { // 官方描述 // Redis 管道允許使用者端命令伺服器通過執行任務而通過執行任務來提高您的效能。 // 在管道中,像命令命令一樣將編寫 + 使用命令來執行任務,並將其用於執行任務,執行任務不是一個地執行100個命令。 // 理解為命令就像石頭,一次運送一個石頭 // 使用管道等於 用車裝石頭 Exec 時就運送過去 pipe := rdb.Pipeline() incr := pipe.Set(ctx, "pip_test","bt",0) pipe.Expire(ctx, "pip_test", time.Hour) // 提交 cmds, err := pipe.Exec(ctx) if err != nil { fmt.Println(err) } for _, cmd := range cmds { fmt.Println(cmd.String()) } // 該值得Exec提交後有效 fmt.Println(incr.Val()) }
其他操作都可以檢視go-redis的原始碼或者直接打出rdb.命令,go-redis 的函數命名方式和redis的命令是差不多的
到此這篇關於Go語言操作redis資料庫的方法的文章就介紹到這了,更多相關go操作redis內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45