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
  7. "10.1"
  8. "10.2"

    127.0.0.1:6379[3]>

参考

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

Redis select选择数据库的更多相关文章

  1. 12.Redis Select 命令 - 切换到指定的数据库

    转自:http://www.runoob.com/redis/redis-tutorial.html Redis Select 命令用于切换到指定的数据库,数据库索引号 index 用数字值指定,以 ...

  2. 【原】thinkphp修改Redis操作类,支持选择数据库功能及添加其他方法

    版本3.2.2(ThinkPHP\Library\Think\Cache\Driver\Redis.class.php), 一:官方默认不支持选择数据库功能及,现就可选择数据库功能进行说明. 1 co ...

  3. 用Redis作为Mysql数据库的缓存【转】

    用Redis作Mysql数据库缓存,必须解决2个问题.首先,应该确定用何种数据结构存储来自Mysql的数据:在确定数据结构之后,还要考虑用什么标识作为该数据结构的键. 直观上看,Mysql中的数据都是 ...

  4. redis(二)--用Redis作MySQL数据库缓存

    用Redis作MySQL数据库缓存,必须解决2个问题.首先,应该确定用何种数据结构存储来自mysql的数据:在确定数据结构之后,还要考虑用什么标识作为该数据结构的键. 直观上看,Mysql中的数据都是 ...

  5. Redis 多个数据库

    注意:Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念. Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存 ...

  6. Redis多个数据库

    注意:Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念. Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存 ...

  7. Redis 中的数据库

    前面我们花了很多的时间介绍了 redis 中基本的数据结构,及其内部的实现情况,这些都是非常基础的东西,可能不经意间你就会用到他们,希望你花点时间了解一下. 接下来,我们将走近 redis 数据库,学 ...

  8. php版redis插件,SSDB数据库,增强型的Redis管理api实例

    php版redis插件,SSDB数据库,增强型的Redis管理api实例 SSDB是一套基于LevelDB存储引擎的非关系型数据库(NOSQL),可用于取代Redis,更适合海量数据的存储.另外,ro ...

  9. 4.MySQL连接并选择数据库(SQL & C)

    在连接了MySQL数据库之后,可以通过SQL命令或者C.PHP.JAVA等程序来指定需要操作的数据库.这里主要介绍SQL命令和相应的C程序. 首先创建用户rick(赋予所有权限) mysql> ...

随机推荐

  1. chromium ②

    这篇研究两个问题:chromium对线程的封装和进程通信.主要参考chromium的官方技术文档:Treading和Inter-process Communication (IPC). chrome速 ...

  2. 2019-03-29-day022-封装与类方法与静态方法

    昨日回顾 抽象类 规范代码,规定子类必须实现某个方法的名字 不能实例化 from abc import ABCMeta, abstractmethod class 抽象类名(metaclass=ABC ...

  3. day 03 变量与基本数据类型

    变量的命名规范 一:变量命名的大前提,应该能够反映出变量值所记录内容 1:变量名只能由数字,字母,下划线组成 2:变量名不能以数字开头 3:变量名不能使用系统的关键字,不然可能会报错 二:变量名的命名 ...

  4. CPU对指令长度的判断

    译码一般包括:指令预取.指令预分析.解码.预取就是从cache或者内存取一系列的字节(大小可以保证至少包含一条指令),并设置一个待分析的位置,预分析从此位置逐字节分析,如果是前缀就设置分析状态(因为前 ...

  5. 【Python】unittest-3

    一.@unittest.skip("skipping this case") # 无条件忽略该测试方法 二.@unittest.skipIf(a > 5, "con ...

  6. Linux Kernel Stack

    整理一些杂乱的内容.以下x86架构. Linux 内核栈大小 内核栈大小是固定的,默认为8k,曾经有选项可以设置为4k栈.由于大小固定,申请过大的栈内存,或者函数调用层次过深,都可能导致栈溢出. 关注 ...

  7. skflow 分类与回归接口API 简单测试

    skflow也即是 tf.contrib.learn, 是 TensorFlow 官方提供的另外一个对 TensorFlow 的高层封装,通过这个封装,用户可以和使用 sklearn 类似的方法使用 ...

  8. TJU Problem 2548 Celebrity jeopardy

    下次不要被长题目吓到,其实不一定难. 先看输入输出,再揣测题意. 原文: 2548.   Celebrity jeopardy Time Limit: 1.0 Seconds   Memory Lim ...

  9. [LeetCode&Python] Problem 169. Majority Element

    Given an array of size n, find the majority element. The majority element is the element that appear ...

  10. HDU 1260:Tickets(DP)

    Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...