Redis select選擇數據庫
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選擇數據庫