[js go]go操作redis

698 阅读1分钟

使用docker安装redis

搜索redis镜像

$ docker search redis

拉取最新镜像

$ docker pull redis:latest

查看本地镜像

$ docker images

运行redis容器, 默认使用6379端口

$ docker run -itd --name redis-test -p 6379:6379 redis

查看容器运行消息

$ docker ps

测试使用redis

$ docker exec -it redis-test /bin/bash
$ redis-cli

设置一个10秒后过期的key

添加安全组并使用AnotherRedisDesktopManager远程访问redis

使用go操作redis

安装go-redis

$ go get -u github.com/go-redis/redis

建立连接

	rdb := redis.NewClient(&redis.Options{
		Addr:     "server:6379",
		Password: "",  // no password set
		DB:       0,   // use default DB
		PoolSize: 100, // 连接池大小
	})

	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()

	_, err := rdb.Ping(ctx).Result()
	if err != nil {
		fmt.Printf("connect err %v \n", err)
	} else {
		fmt.Printf("rdb %#v", rdb) // rdb &redis.Client{...}
	}

set和get

	err = rdb.Set(ctx, "dev_bro_age", "35", 0).Err()
	if err != nil {
		panic(nil)
	} else {
		val, err := rdb.Get(ctx, "dev_bro_age").Result()
		if err!= nil {
			panic(err)
		} else {
			fmt.Printf("dev_bro_age: %s \n", val) // dev_bro_age: 35 
		}
	}

zset添加

	zsetKey := "age_rank"
	devbros := []*redis.Z{
		&redis.Z{Score: 25, Member: "devbro0"},
		&redis.Z{Score: 35, Member: "devbro1"},
		&redis.Z{Score: 45, Member: "devbro2"},
	}
	num, err := rdb.ZAdd(ctx, zsetKey, devbros...).Result()
	if err != nil {
		panic(err)
	} else {
		fmt.Printf("add %d success", num) // add 3 success
	}

zset修改

	newScore, err := rdb.ZIncrBy(ctx, zsetKey, 10, "devbro0").Result()
	if err != nil {
		panic(err)
	} else {
		fmt.Printf("devbro0's new age is %v", newScore) // devbro0's new age is 35
	}

zset查询

	ret, err := rdb.ZRevRangeWithScores(ctx, zsetKey, 0, 0).Result() // 取age最大的那个
	if err != nil {
		fmt.Printf("zrevrange failed, err:%v\n", err)
		return
	} else {
		for _, z := range ret {
			fmt.Println(z.Member, z.Score) // devbro2 45
		}
	}