[笔记]使用Go语言Redigo包在Docker容器内连接Redis容器的方法

Docker容器之间的连接可以带来不少方便,下面记录下如何在自己容器内通过环境变量连接与之连接的Redis容器的方法。

先起一个Redis的Docker容器,命名为 redis,再起一个自己的Docker容器,使用"--link redis:redis"方式与redis容器连接。

在自己的容器内部,会有对应的环境变量,其中这里用的就是 REDIS_PORT = tcp://172.17.0.89:6379。

将其分拆为 tcp 和 172.17.0.89:6379,作为参数传入redigo的Dial函数即可,如此可不必显式的写IP和端口地址。

顺便说一句,redigo是Go语言的Redis客户端实现。

参考代码如下:

package main

import (
    "fmt"
    "github.com/garyburd/redigo/redis"
    "os"
    "strings"
    "time"
)

func testRedis() bool {
    // e.g. REDIS_PORT = tcp://172.17.0.89:6379
    fmt.Println("REDIS_PORT", os.Getenv("REDIS_PORT"))
    addr := strings.Split(os.Getenv("REDIS_PORT"), "://")
    conn, err := redis.DialTimeout(addr[0], addr[1], 0, 1*time.Second, 1*time.Second)
    if err != nil {
        fmt.Println(err)
        return false
    }
    defer conn.Close()

    size, err := conn.Do("DBSIZE")
    if err != nil {
        fmt.Println(err)
        return false
    }
    fmt.Printf("DB size is %d \n", size)

    _, err = conn.Do("SET", "user:user0", 123)
    _, err = conn.Do("SET", "user:user1", 456)
    _, err = conn.Do("APPEND", "user:user0", 87)

    user0, err := redis.Int(conn.Do("GET", "user:user0"))
    user1, err := redis.Int(conn.Do("GET", "user:user1"))

    fmt.Printf("user0 is %d , user1 is %d \n", user0, user1)
    return true
}

func main() {
    fmt.Println(time.Now(), "[Redis test start]")

    if testRedis() {
        fmt.Println("[Redis test ok]")
    } else {
        fmt.Println("[Redis test failed]")
    }
}

如果连接成功,结果如下:

2015-03-12 12:16:44.796537101 +0000 UTC [Redis test start]
REDIS_PORT tcp://172.17.0.89:6379
DB size is 2
user0 is 12387 , user1 is 456
[Redis test ok]
时间: 2024-10-24 10:44:11

[笔记]使用Go语言Redigo包在Docker容器内连接Redis容器的方法的相关文章

Docker运行MongoDB及Redis及ssh端口映射远程连接

Docker运行MongoDB及Redis及ssh端口映射远程连接 本节内容简介 在本实验里我们将通过完成 MongoDB 和 Redis 两个容器来学习Dockerfile及Docker的运行机制. 本节中,我们需要依次完成下面几项任务: MongoDB 的安装及配置 Redis 的安装及配置 Dockerfile 的编写 从 Dockerfile 构建镜像 本次实验的需求是完成 Dockerfile,通过 Dockerfile 创建 MongoDB 或 Redis 应用.Dockerhub上

Docker 如何连接到容器

让我们回顾一些基础知识: 机器需要一个网络接口来发送和接受数据包,路由表来定义如何到达哪些地址段.这里的网络接口 可以不是物理接口.事实上,每个linxu机器上的lo环回接口(docker 容器中也有)就是一个完全的 linux内核虚拟接口,它直接复制发送缓存中的数据包到接收缓存中.docker让宿主主机和容器使用特 殊的虚拟接口来通信--通信的2端叫"peers",他们在主机内核中连接在一起,所以能够相互通信.创建 他们很简单,前面介绍过了. docker创建容器的步骤如下: ? 创

Go语言学习笔记(一) [Go语言的HelloWorld]

日期:2014年7月18日 1.简介 Go 编程语言是一个使得程序员更加有效率的开源项目.Go 是有表达力.简 洁.清晰和有效率的.它的并行机制使其很容易编写多核和网络应用,而新奇的类型系统允许构建有性的模块化程序.Go 编译到机器码非常快 速,同时具有便利的垃圾回收和强大的运行时反射.它是快速的.静态类型编译语言,但是感觉上是动态类型的,解释型语言. Go 是第一个实现了简单的(或更加简单的)并行开发,且跨平台的类 C 语言. 2.Go语言文档查看 安装好Go语言之后,其文档可以通过go do

使用jar包格式化Docker 容器日志

前面使用JS格式化textarea中的日志内容,但局限于JS语言性能,在日志内容较多时效率无法接受,建议日志内容大于5000行时转投本java程序,文末提供jar包下载. LogsFormat.java package com.geostar.gfstack.docker.util; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import org.apache.commons.io.IOUtils;

Python源码剖析笔记0 ——C语言基础

python源码剖析笔记0--C语言基础回顾 要分析python源码,C语言的基础不能少,特别是指针和结构体等知识.这篇文章先回顾C语言基础,方便后续代码的阅读. 1 关于ELF文件 linux中的C编译得到的目标文件和可执行文件都是ELF格式的,可执行文件中以segment来划分,目标文件中,我们是以section划分.一个segment包含一个或多个section,通过readelf命令可以看到完整的section和segment信息.看一个栗子: char pear[40]; static

《OOC》笔记(1)——C语言const、static和extern的用法

<OOC>笔记(1)——C语言const.static和extern的用法 C语言中const关键字用法不少,我只喜欢两种用法.一是用于修饰函数形参,二是用于修饰全局变量和局部变量. 用const修饰的函数形参 直接修饰 一个形如 int Minus(const int a, const int b, int testCase); 的函数,const的意义是什么呢? 答:参数a被const修饰,说明在Minus函数内,编译器不允许a被别的变量(例如x)赋值(修改).参数b同理. 如果你写了a

安装R语言的包的方法

安装R语言的包的方法: 1. 在线安装 在R的控制台,输入类似install.packages("TSA")  # 安装 TSA install.packages("TSA", contriburl="url",  dependencies = TRUE) # 安装TSA 2. 手动安装(离线安装) 在Windows下: 下载对应的package.zip文件 打开R的菜单条->Packages->"Install packa

【MySQL笔记】SQL语言四大类语言

SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 1. 数据查询语言DQL 数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块: SELECT <字段名表> FROM <表或视图名> WHERE <查询条件> 具体参看:[MySQL笔记]数据库的查询 2 .数据操纵语言DML INSERT - insert data into a table(插入) UPDATE - upda

Java学习笔记(Java语言规范,API,JDK,IDE)

Java语言规范:java.sun.com/docs/books/jls 三个版本的API:J2SE J2EE J2ME 1. J2SE 客户端独立应用程序或者applet 2. J2EE 服务端应用程序 [Java Servlets&JavaServer Page] 3. J2ME 移动设备变成 JDK为Java开发提供一个开发环境(IDE) Java学习笔记(Java语言规范,API,JDK,IDE)