作者:@daemon365
本文为作者原创,转载请注明出处:https://www.cnblogs.com/daemon365/p/15162738.html
安装
下载第三方包:
| go get -u github.com/go-redis/redis/v9 |
连接
| |
| var redisdb *redis.Client |
| |
| func initClient() (err error) { |
| redisdb = redis.NewClient(&redis.Options{ |
| Addr: "localhost:6379", |
| Password: "", |
| DB: 0, |
| }) |
| _, err = redisdb.Ping(context.Background()).Result() |
| if err != nil { |
| fmt.Println("连接失败") |
| return |
| } |
| return |
| } |
使用
set/get示例
| func redisExample() { |
| ctx := context.Background() |
| err := redisdb.Set(ctx, "score", 100, 0).Err() |
| if err != nil { |
| fmt.Printf("set score failed, err:%v\n", err) |
| return |
| } |
| val, err := redisdb.Get(ctx, "score").Result() |
| if err != nil { |
| fmt.Printf("get score failed, err:%v\n", err) |
| return |
| } |
| fmt.Println("score", val) |
| val2, err := redisdb.Get(ctx, "name").Result() |
| if err == redis.Nil { |
| fmt.Println("name does not exist") |
| } else if err != nil { |
| fmt.Printf("get name failed, err:%v\n", err) |
| return |
| } else { |
| fmt.Println("name", val2) |
| } |
| } |
zset示例
| func redisExample2() { |
| ctx := context.Background() |
| zsetKey := "language_rank" |
| languages := []*redis.Z{ |
| &redis.Z{Score: 90.0, Member: "Golang"}, |
| &redis.Z{Score: 98.0, Member: "Java"}, |
| &redis.Z{Score: 95.0, Member: "Python"}, |
| &redis.Z{Score: 97.0, Member: "JavaScript"}, |
| &redis.Z{Score: 99.0, Member: "C/C++"}, |
| } |
| |
| num, err := redisdb.ZAdd(ctx, zsetKey, languages...).Result() |
| if err != nil { |
| fmt.Printf("zadd failed, err:%v\n", err) |
| return |
| } |
| fmt.Printf("zadd %d succ.\n", num) |
| |
| newScore, err := redisdb.ZIncrBy(ctx, zsetKey, 10.0, "Golang").Result() |
| if err != nil { |
| fmt.Printf("zincrby failed, err:%v\n", err) |
| return |
| } |
| fmt.Printf("Golang's score is %f now.\n", newScore) |
| |
| ret, err := redisdb.ZRevRangeWithScores(ctx, zsetKey, 0, 2).Result() |
| if err != nil { |
| fmt.Printf("zrevrange failed, err:%v\n", err) |
| return |
| } |
| for _, z := range ret { |
| fmt.Println(z.Member, z.Score) |
| } |
| |
| op := &redis.ZRangeBy{ |
| Min: "95", |
| Max: "100", |
| } |
| ret, err = redisdb.ZRangeByScoreWithScores(ctx, zsetKey, op).Result() |
| if err != nil { |
| fmt.Printf("zrangebyscore failed, err:%v\n", err) |
| return |
| } |
| for _, z := range ret { |
| fmt.Println(z.Member, z.Score) |
| } |
| } |
输出结果如下:
| $ ./06redis_demo |
| zadd 0 succ. |
| Golang's score is 100.000000 now. |
| Golang 100 |
| C/C++ 99 |
| Java 98 |
| JavaScript 97 |
| Java 98 |
| C/C++ 99 |
| Golang 100 |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?