標籤:href 影響 fail dial 代碼 UNC get fir github
Redis的功能真是強大,可以做資料庫,可以做緩衝。
今天發現Redis支援分隔操作空間,使得空間與空間之間互不影響。
SELECT index
切換到指定的資料庫,資料庫索引號 index 用數字值指定,以 0 作為起始索引值。
預設使用 0 號資料庫。
可用版本:
>= 1.0.0
時間複雜度:
O(1)
傳回值:
OK
redis> SET number 0 # 預設使用 0 號資料庫OKredis> SELECT 1 # 使用 1 號資料庫OKredis[1]> GET number # 已經切換到 1 號資料庫,注意 Redis 現在的命令提示字元多了個 [1](nil)redis[1]> SET number 1OKredis[1]> GET number"1"redis[1]> SELECT 3 # 再切換到 3 號資料庫OKredis[3]> # 提示符從 [1] 改變成了 [3]
select index操作可以選擇資料庫,如果不選擇,則預設是db 0。每個串連建立後,如果不select,預設是對db 0操作。
Example1
以下代碼,建立一個串連,進行select操作,選擇db 3,然後關閉。接著再分別建立兩個串連進行sadd操作。從輸出結果可以看到,兩次sadd的操作都是對db 0操作的。
package mainimport ( "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 mainimport ( "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選擇資料庫