docker下怎么连接redis指定的库

docker下怎么连接redis指定的库,第1张

快速实现Docker到Redis的连接

首先运行下面命令,从Docker Hub拉取Redis镜像:

$ docker pull redis 

运行上面的命令下载镜像,Docker daemon会自动输出该Redis镜像的来源信息、下载状态,下载完成之后系统也会显示最终状态信息。

镜像拉取完成之后,大家可以用下面的命令启动Redis容器,记得要带上“-d”参数:

$ docker run --name myredis-itsmine -d redis 

“-d”参数的作用是让Redis在后台运行,因为本例中采用这种后台运行的方式较为合适,所以这里我们写上了这个参数。如果不带 “-d”参数的话处理起来就要麻烦一些,这种情况下我们需要先停止终端的运行或者退出容器,然后才能通过宿主机来访问Redis。

下面我们要进行最重要的一步操作,连接Redis。由于我们并没有实际的需要连接到Redis的应用,所以这里我们用了redis-cli工具。大家可以在宿主机上安装redis-cli,不过我建议大家新建一个容器,将redis-cli运行在里面,然后用下面的命令把这两个容器连接起来,这样我们就可以看到详细的应用信息:

$docker run --rm -it --link myredis-itsmine:redis redis /bin/bash

运行该命令之后我们就可以在bash命令行下面看到容器的提示信息了:

root@f75bacab2715:/data#

$ docker run --rm -it --link myredis:redis redis /bin/bash

$ root@af47015c4a76:/data# redis-cli -h redis -p 6379

$ redis:6379> ping

$ PONG

$ redis:6379> set "Abc" 123

$ OK

$ redis:6379> get "Abc"

$ "123"

$ redis:6379> exit

root@af47015c4a76:/data# exit

$ exit

在上面的命令中,docker run命令后面跟的“–link myredis-itsmine:redis” 参数用于创建连接,Docker收到该指令后,就会尝试将我们新建的容器连接到当前的“myredis-itsmine” 容器,同时会将新容器中的redis-cli命名为“redis”。Docker会在容器中的/etc/hosts路径下为“redis”创建一个入口,并指向“myredis-itsmine”容器的IP地址。这样我们就可以在redis-cli中直接使用“redis”作为主机名,这种做法是很方便的,我们不必再去找其他办法来“发现”Redis的IP地址,然后加以引用了。

接下来我们就可以通过set和put命令来执行Redis的存取操作了,这里我们可以用一些示例数据来做个试验。当然,在开始存取操作之前,大家还要再运行一下Redis的ping命令,验证一下Redis服务器是否已经连接上了。

<php

//第一步:实例化redis对象

$redis = new redis();

//第二步:php客户端设置的ip及端口

$redis->connect("127001","6379");

//第三部:配置连接密码 检测redis服务器连接状态

//连接失败直接结束 并输出

$auth = $redis->auth('zhenai') or die("redis 服务器连接失败");

// var_dump($auth);连接成功 返回 true 反之 返回false

//第四步 可用可不用

echo $connect_status=$redis->ping();

if($connect_status==="+PONG")

{

echo "redis 服务器连接成功";

}

//就是如此简单

先下载redis,找到下载的压缩包 redis-6430503zip,解压后,重命名为redis-30,置于某个文件夹下(如D:\Program Files)。

1 运行Redis服务器端

直接双击D:\Program Files\redis-30目录下的redis-serverexe文件(redis服务器端),就会以窗口的形式运行Redis服务器(但该窗口不可关闭,否则,Redis服务不可用)。此种运行redis服务器的方式,没有加载指定的配置文件。

2 运行Redis客户端

直接双击D:\Program Files\redis-30目录下的redis-cliexe文件(redis客户端),如果显示127001:6379> ,就说明客户端运行成功。

输入命令: keys

查看所有的键

如果提示“NOAUTH Authentication required”,则说明Redis服务器设置了密码,请输入正确的密码后,再来进行其他操作。

输入命令: auth 密码

如果提示OK,就说明密码正确。

Tips:可以将D:\Program Files\redis-30目录下的redis-serverexe发送到桌面快捷方式,便于以后快速打开Redis客户端。

3 将Redis服务安装到本地服务

由于上述启动Redis服务器的方式有点复杂,且redis服务窗口不可关闭。故这里介绍如何将Redis服务安装到Windows系统的本地服务。

复制D:\Program Files\redis-30目录下的rediswindowsconf文件,重命名为redisconf,来作为redis的配置文件。

打开win系统的命令行,依次输入下列命令:

d: (回车,切换到d盘)

cd Program Files\redis-30\ (回车,切换至D:\Program Files\redis-30目录)

redis-server --service-install redisconf --loglevel verbose (回车,安装redis本地服务,指定配置文件redisconf)

操作完成后,就可以到win系统的本地服务管理处,查看和操作Redis服务。(计算机图标右键 -> 管理) -> 服务和应用程序 -> 服务)

4 设置Redis密码

编辑D:\Program Files\redis-30目录下的redisconf配置文件,找到如下代码:

# requirepass foobared

将其复制一行,去掉前导的#注释符,将foobared改为你要设置的密码,如:

requirepass test

保存退出。

重启Redis服务,配置文件就会生效。

第一:非集群状态下

非集群状态下用Jedis获取Redis连接,得到Jedis对象即可,一共有两种:

1利用Jedis构造器,仅限用于测试,在实际项目中肯定是用JedisPool。

Jedis(String host);

Jedis(String host , int port);

2利用JedisPool

主要是利用Jedis jedis=jedisPoolgetResource();

JedisPool有N多个构造器,常用的构造器参数有GenericObjectPoolConfig poolConfig,String host,int port,int timeout,String password,创建GenericObjectPoolConfig对象时我们一般用其子类JedisPoolConfig (redisclientsjedisJedisPoolConfig),timeout是连接redis服务器的超时时间,以毫秒为单位,一般设置为0,如果不设为0,则不可设置太小,如果设成1、2,那么可能因为网络原因在1毫秒、2毫秒之内没有连上服务器而报错。见下例:

[java] view plain copy

public static void main(String[] args) {

JedisPoolConfig poolConfig = new JedisPoolConfig();

// 最大连接数

poolConfigsetMaxTotal(2);

// 最大空闲数

poolConfigsetMaxIdle(2);

// 最大允许等待时间,如果超过这个时间还未获取到连接,则会报JedisException异常:

// Could not get a resource from the pool

poolConfigsetMaxWaitMillis(1000);

JedisPool pool = new JedisPool(poolConfig, "19216883128", 6379, 0, "123");

Jedis jedis = null;

try {

for (int i = 0; i < 5; i++) {

jedis = poolgetResource();

jedisset("foo" + i, "bar" + i);

Systemoutprintln("第" + (i + 1) + "个连接, 得到的值为" + jedisget("foo" + i));

// 用完一定要释放连接

jedisclose();

}

} finally {

poolclose();

}

}

如上,创建出一个JedisPool对象,然后调用其getResource()方法获取redis连接即可,之后就可以调用Jedis API操作redis了。jedis连接用完要释放即close,如果不close,则产生的连接会越来越多,当达到了最大连接数,再想获得连接,就会等待,当超过了最大等待时间后就会报异常。

第二:集群状态下

集群状态下用Jedis获取redis连接,是得到JedisCluster对象,之后对redis进行操作都是用此对象的方法进行的:

[java] view plain copy

public static void main(String[] args) {

JedisPoolConfig poolConfig = new JedisPoolConfig();

// 最大连接数

poolConfigsetMaxTotal(1);

// 最大空闲数

poolConfigsetMaxIdle(1);

// 最大允许等待时间,如果超过这个时间还未获取到连接,则会报JedisException异常:

// Could not get a resource from the pool

poolConfigsetMaxWaitMillis(1000);

Set<HostAndPort> nodes = new LinkedHashSet<HostAndPort>();

nodesadd(new HostAndPort("19216883128", 6379));

nodesadd(new HostAndPort("19216883128", 6380));

nodesadd(new HostAndPort("19216883128", 6381));

nodesadd(new HostAndPort("19216883128", 6382));

nodesadd(new HostAndPort("19216883128", 6383));

nodesadd(new HostAndPort("19216883128", 6384));

JedisCluster cluster = new JedisCluster(nodes, poolConfig);

String name = clusterget("name");

Systemoutprintln(name);

clusterset("age", "18");

Systemoutprintln(clusterget("age"));

try {

clusterclose();

} catch (IOException e) {

eprintStackTrace();

}

}

用集群时,好像没有办法设置集群的参数,比如最大连接数,虽然在创建JedisCluster 对象时传了JedisPoolConfig对象进去,但是JedisPoolConfig对象中的设置是不生效的。

一、首先确定服务器上Redis是可以访问的

二、查看redisconf配置文件

确保以下两项配置

1bind 127001改为 #bind 127001

2protected-mode yes 改为 protected-mode no

ps: protected-mode 是32 之后加入的新特性,是为了禁止公网访问redis cache,加强redis安全的。

它启用的条件,有两个:

1) 没有bind IP

2) 没有设置访问密码

解决:刚好我们注释了bing 127001 并且默认redisconf也是没有设置密码的 所以触发了protected-mode 我们将它关闭即可 生产环境请慎用。

IP地址错误。成功连接本地redis服务器时返回是设置IP地址错误,只需要重新设置即可。服务器指在网络环境中或在具有客户-服务器结构(参见客户-服务器计算)的分布式管理环境中,为客户的请求提供服务的节点计算机。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » docker下怎么连接redis指定的库

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情