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. Python基础6--函数、类和文件操作

    1 def name(para) def myabs(x): if x>0: return x else: return -x 2 lambda表达式 用于声明匿名函数,既没有名字的小函数 f ...

  2. OpenID

    OpenId是一个以用户为中心的数字身份识别框架,它具有开放.分散.自由等特性.OpenId的创建是基于这样一个概念:我们可以通过URI(或者URL网址)来识别一个网站.同样,我们也可以通过这样的方式 ...

  3. 使用 TortoiseSVN 创建 svn branch

    1.使用TortoiseSVN->Repo-browser进入仓库. 2.选择需要创建分支的文件->Copy to 添加分支路径后,点击ok Rename:trunk路径 格式:https ...

  4. 2.23 js处理日历控件(修改readonly属性)

    2.23 js处理日历控件(修改readonly属性) 前言    日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如 ...

  5. 微信小程序--地图上添加图片

    如何在微信小程序地图添加上,添加图片? 在微信小程序中,地图的层级最高,所以我们没有办法,通过定位,在地图上添加图片等信息; 处理办法: 添加控件:controls; 其中有个属性position,进 ...

  6. USB眼图

    /********************************************************************** * USB眼图 * 说明: * 对于USB眼图,并不是很 ...

  7. JS中数据类型的判断

    typeof 使用 : var n = "hello"; console.log(typeof n); console.log(typeof(n));

  8. golang 3des/ecb/cbc/pkcs5 加解密

    本人新手,参考文档: http://blog.studygolang.com/2013/01/go%E5%8A%A0%E5%AF%86%E8%A7%A3%E5%AF%86%E4%B9%8Bdes/ h ...

  9. Redis实战之Redis命令

    阅读目录 1. 字符串命令 2. 列表命令 3. 集合命令 4. 散列命令 5. 有序集合命令 6. 发布与订阅命令 7. 小试牛刀 Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结 ...

  10. SSAS aggregation 的作用及其使用

    作用: 聚合是为了解决查询在运行时的效率低下,在数据立方体部署的时候进行聚合,实际上是对数据立方体的预处理,方便以后查询.如若在部署时未进行聚合,则在以后每次查询时实际上都会进行一次集合的操作,等待结 ...