網站首頁 編程語言 正文
先上命令速查網站,菜鳥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的命令是差不多的
原文鏈接:https://www.cnblogs.com/xushushan/archive/2022/07/20/16498266.html
相關推薦
- 2022-09-15 如何使用注解方式實現?Redis?分布式鎖_Redis
- 2022-07-30 Redis如何使用HyperLogLog的實現_Redis
- 2022-05-19 Python?Timer和TimerFPS計時工具類_python
- 2023-01-01 C++?Boost?Flyweight庫使用介紹_C 語言
- 2022-09-13 Go中的關鍵字any?interface是否會成為歷史_Golang
- 2023-01-30 Python中String模塊示例詳解_python
- 2022-10-25 Python中random函數的用法整理大全_python
- 2022-03-14 關于log4j日志擴展---自定義PatternLayout(log4j自定義日志級別)
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支