1. 程式人生 > >Redis select選擇數據庫

Redis select選擇數據庫

http 復雜 put 影響 gary dia nec 兩個 lis

Redis的功能真是強大,可以做數據庫,可以做緩存。

今天發現Redis支持分隔操作空間,使得空間與空間之間互不影響。

SELECT index
切換到指定的數據庫,數據庫索引號 index 用數字值指定,以 0 作為起始索引值。
默認使用 0 號數據庫。

可用版本:
>= 1.0.0
時間復雜度:
O(1)
返回值:
OK

redis> SET number 0         # 默認使用 0 號數據庫
OK

redis> SELECT 1                # 使用 1 號數據庫
OK

redis[1]> GET number        # 已經切換到 1 號數據庫,註意 Redis 現在的命令提示符多了個 [1]
(nil)

redis[1]> SET number 1
OK

redis[1]> GET number
"1"

redis[1]> SELECT 3             # 再切換到 3 號數據庫
OK

redis[3]>                      # 提示符從 [1] 改變成了 [3]

select index操作可以選擇數據庫,如果不選擇,則默認是db 0。每個連接建立後,如果不select,默認是對db 0操作。

Example1

以下代碼,建立一個連接,進行select操作,選擇db 3,然後關閉。接著再分別建立兩個連接進行sadd操作。從輸出結果可以看到,兩次sadd的操作都是對db 0操作的。

package main

import (
    "log"

    "github.com/garyburd/redigo/redis"
)

const (


    redisServer = "10.194.80.35:6379"

)

func main() {

    selectDB(3)
    batchSADD()
    batchSADD2()

}


func selectDB(num int){


    option := redis.DialPassword("123456")
    c, err := redis.Dial("tcp", redisServer, option)
    if err != nil {
        log.Println("connect server failed:", err)
        return
    }

    defer c.Close()

    v, err := redis.String(c.Do("SELECT", num))
    if err != nil {
        log.Println("select failed:", err)
        return
    }


    log.Println("select:",v)

}

func batchSADD(){
    option := redis.DialPassword("123456")
    c, err := redis.Dial("tcp", redisServer, option)
    if err != nil {
        log.Println("connect server failed:", err)
        return
    }

    defer c.Close()

    setKey := "myset"
    args := []interface{}{setKey}
    args = append(args, "10.1")
    args = append(args, "10.2")
    v, err := redis.Int64(c.Do("SADD", args...))
    if err != nil {
        log.Println("SADD failed:", err)
        return
    }

    log.Println("sadd:",v)
}


func batchSADD2(){
    option := redis.DialPassword("123456")
    c, err := redis.Dial("tcp", redisServer, option)
    if err != nil {
        log.Println("connect server failed:", err)
        return
    }

    defer c.Close()

    setKey := "myset"
    args := []interface{}{setKey}
    args = append(args, "10.3")
    args = append(args, "10.4")
    v, err := redis.Int64(c.Do("SADD", args...))
    if err != nil {
        log.Println("SADD failed:", err)
        return
    }

    log.Println("sadd:",v)
}

/*

select db 3

first sadd to db 0
second sadd to db 0

*/

output結果:

127.0.0.1:6379> SMEMBERS myset
1) "10.1"
2) "10.4"
3) "10.2"
4) "10.3"
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> select 3
OK
127.0.0.1:6379[3]> SMEMBERS myset
(empty list or set)
127.0.0.1:6379[3]>

Example2

建立連接,select 3選擇db 3,然後sadd,再建立一個連接,直接sadd。從結果可以看到,第一次sadd操作對db 3操作,第二次sadd對db 0操作的。

package main

import (
    "log"

    "github.com/garyburd/redigo/redis"
)

const (


    redisServer = "10.194.80.35:6379"

)

func main() {

    batchSADD()
    batchSADD2()

}


func selectDB(num int){


    option := redis.DialPassword("123456")
    c, err := redis.Dial("tcp", redisServer, option)
    if err != nil {
        log.Println("connect server failed:", err)
        return
    }

    defer c.Close()

    v, err := redis.String(c.Do("SELECT", num))
    if err != nil {
        log.Println("select failed:", err)
        return
    }


    log.Println("select:",v)

}

func batchSADD(){
    option := redis.DialPassword("123456")
    c, err := redis.Dial("tcp", redisServer, option)
    if err != nil {
        log.Println("connect server failed:", err)
        return
    }

    defer c.Close()

    ret, err := redis.String(c.Do("SELECT", 3))
    if err != nil {
        log.Println("select failed:", err)
        return
    }

    log.Println("select:",ret)

    setKey := "myset"
    args := []interface{}{setKey}
    args = append(args, "10.1")
    args = append(args, "10.2")
    v, err := redis.Int64(c.Do("SADD", args...))
    if err != nil {
        log.Println("SADD failed:", err)
        return
    }

    log.Println("sadd:",v)
}


func batchSADD2(){
    option := redis.DialPassword("123456")
    c, err := redis.Dial("tcp", redisServer, option)
    if err != nil {
        log.Println("connect server failed:", err)
        return
    }

    defer c.Close()

    setKey := "myset"
    args := []interface{}{setKey}
    args = append(args, "10.5")
    args = append(args, "10.6")
    v, err := redis.Int64(c.Do("SADD", args...))
    if err != nil {
        log.Println("SADD failed:", err)
        return
    }

    log.Println("sadd:",v)
}

/*
firt sadd to db 3

second sadd to db 0

*/

output結果:

127.0.0.1:6379> SMEMBERS myset
1) "10.6"
2) "10.1"
3) "10.5"
4) "10.4"
5) "10.2"
6) "10.3"
127.0.0.1:6379> select 3
OK
127.0.0.1:6379[3]> SMEMBERS myset
1) "10.1"
2) "10.2"
127.0.0.1:6379[3]>

參考

http://redisdoc.com/connection/select.html

Redis select選擇數據庫