安装redis
本文视频教程:https://www.bilibili.com/vide...
下载redis
这里在windows平台下测试
https://github.com/MicrosoftArchive/redis/releases
启动server
执行
redis-server.exe
C:\Program Files\Redis>redis-server.exe
[12092] 10 Aug 13:29:08.616 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server.exe /path/to/redis.conf
_._
_.-``__ ''-._
_.-```.`_.''-._Redis 3.0.504 (00000000/0) 64 bit
.-`` .-```.```\/_.,_ ''-._
(',.-`| `,)Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'|Port: 6379
|`-._`._/_.-'|PID: 12092
`-._`-._`-./_.-'_.-'
|`-._`-._`-.__.-'_.-'_.-'|
|`-._`-.__.-'_.-'|http://redis.io
`-._`-._`-.__.-'_.-'_.-'
|`-._`-._`-.__.-'_.-'_.-'|
|`-._`-.__.-'_.-'|
`-._`-._`-.__.-'_.-'_.-'
`-._`-.__.-'_.-'
`-.__.-'
`-.__.-'[12092] 10 Aug 13:29:08.619 # Server started, Redis version 3.0.504
[12092] 10 Aug 13:29:08.619 * The server is now ready to accept connections on port 6379
客户端测试
执行
redis-cli.exe
127.0.0.1:6379> set name duoke360
OK
127.0.0.1:6379> get name
"duoke360"
127.0.0.1:6379>
安装go-redis库 使用
go get
命令安装go get -u github.com/go-redis/redis
初始化数据库连接
package mainimport (
"context"
"github.com/go-redis/redis"
"time"
)// 声明一个全局的rdb变量
var rdb *redis.Client// 初始化连接
func initClient() (err error) {
rdb = redis.NewClient(&redis.Options{
Addr:"localhost:6379",
Password: "", // no password set
DB:0,// use default DB
})ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
_, err = rdb.Ping(ctx).Result()
if err != nil {
return err
}
return nil
}func main() {
initClient()}
连接Redis哨兵模式
func initClient()(err error){
rdb := redis.NewFailoverClient(&redis.FailoverOptions{
MasterName:"master",
SentinelAddrs: []string{"x.x.x.x:26379", "xx.xx.xx.xx:26379", "xxx.xxx.xxx.xxx:26379"},
})
_, err = rdb.Ping().Result()
if err != nil {
return err
}
return nil
}
连接Redis集群模式
func initClient()(err error){
rdb := redis.NewClusterClient(&redis.ClusterOptions{
Addrs: []string{":7000", ":7001", ":7002", ":7003", ":7004", ":7005"},
})
_, err = rdb.Ping().Result()
if err != nil {
return err
}
return nil
}
字符串get、set
package mainimport (
"context"
"fmt"
"github.com/go-redis/redis"
"time"
)// 声明一个全局的rdb变量
var rdb *redis.Client
var ctx context.Context
var cancel context.CancelFunc
// 初始化连接
func initClient() (err error) {
rdb = redis.NewClient(&redis.Options{
Addr:"localhost:6379",
Password: "", // no password set
DB:0,// use default DB
})ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)_, err = rdb.Ping(ctx).Result()
if err != nil {
return err
}
return nil
}func testStringGetSet() {err := rdb.Set(ctx,"score", 100, 0).Err()
if err != nil {
fmt.Printf("set score failed, err:%v\n", err)
return
}val, err := rdb.Get(ctx,"score").Result()
if err != nil {
fmt.Printf("get score failed, err:%v\n", err)
return
}
fmt.Println("score", val)val2, err := rdb.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)
}
defer cancel()
}
测试
func main() {
initClient()
testStringGetSet()
}
【golang操作redis】运行结果
score 100
name duoke360
zset示例
func testSet(){
zsetKey := "book_price"
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++"},
}
// ZADD
num, err := rdb.ZAdd(ctx,zsetKey, languages).Result()
if err != nil {
fmt.Printf("zadd failed, err:%v\n", err)
return
}
fmt.Printf("zadd %d succ.\n", num)// 把Golang的分数加10
newScore, err := rdb.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)// 取分数最高的3个
ret, err := rdb.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)
}// 取95~100分的
op := redis.ZRangeBy{
Min: "95",
Max: "100",
}
ret, err = rdb.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)
}
}func main() {
initClient()
testStringGetSet()
}
推荐阅读
- 【golang】leetcode中级-字母异位词分组&无重复字符的最长子串
- 彻底理解Golang Map
- kratos线上开源年会它来啦~
- 深入浅出 Golang 资源嵌入方案(go-bindata篇)
- 深入浅出 Golang 资源嵌入方案(前篇)
- golang 经典案例总结
- Go实战 | 基于有向无环图的并发执行流的实现
- Golang 数组和切片
- Go JSON编码与解码()
- golang map基础知识