首先基于基础CentOS7或以上版本, 装好docker后,拉取最新redis版本,代码如下:
docker search redis #镜像库提供的多个镜像
docker pull redis #拉取最后版本的docker-redis镜像
docker pull redis:4.0.0 #拉取指定版本的redis镜像
docker images #查看已经拉取的镜像
启动三个redis实例用以分片
docker run -d --name redis7000 -p 7000:6379 redis:0.0.1
docker run -d --name redis7001 -p 7001:6379 redis:0.0.1
docker run -d --name redis7002 -p 7002:6379 redis:0.0.1
#-d : container将会运行在后台模式(detached mode)
#--name : 实例名称
#-p : 对外程序访问端口7000,宿主机映射的redis端口6379,最后的redis为镜像的名称
在Linux中打开响应端口7000,7001,7002.代码如下:
(CentOS7)
systemctl stop firewalld.service #关闭防火墙服务
disable firewalld.service #禁止防火墙开启启动
systemctl restart iptables.service #重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动
systemctl restart docker #重启docker服务
或
(CentOS6)
iptables -I INPUT -p tcp --dport 7000 -j ACCEPT
iptables -I INPUT -p tcp --dport 7001 -j ACCEPT
iptables -I INPUT -p tcp --dport 7002 -j ACCEPT
查看docker实例
docker ps #查看当前运行的dockerid
docker ps -a #查看已有的可能状态是停止
docker start b193fbe1e400 #开启实例,如重启可能实例被关闭
docker stop b193fbe1e400 #停止实例
docker rm –f 0cfc4932b9a0 #删除运行的docker,-f强制删除
docker rmi xcfc4932b9a0 #删除镜像
进入docker内部,代码如下 :
docker exec -it 0cfc4932b9a0 bash
#进入docker内部,-it输入输出,展示信息在控制台
编写java代码来测试下
package test;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
public class TestRedis {
@Test //完成单实例链接
public void jedis(){
Jedis jedis = new Jedis("192.168.80.38",7000);
//jedis.auth("123456");
jedis.set("name","tony"); //调用redis命令set
String s = jedis.get("name");
System.out.println(s);
jedis.close();
}
@Test //分片
public void shard(){
//构造各个节点链接信息,host和port
List<JedisShardInfo> infoList = new ArrayList<JedisShardInfo>();
JedisShardInfo info1 = new JedisShardInfo("192.168.80.22",7000);
infoList.add(info1);
JedisShardInfo info2 = new JedisShardInfo("192.168.80.22",7001);
infoList.add(info2);
JedisShardInfo info3 = new JedisShardInfo("192.168.80.22",7002);
infoList.add(info3);
//分片jedis
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(500); //最大链接数
ShardedJedisPool pool = new ShardedJedisPool(config, infoList);
//ShardedJedis jedis = new ShardedJedis(infoList);
ShardedJedis jedis = pool.getResource(); //从pool中获取
for(int i=0;i<10;i++){
jedis.set("n"+i, "t"+i);
}
System.out.println(jedis.get("n9"));
jedis.close();
}
}
另附上redis配置文件:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<!-- 构建连接池配置信息 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- 最大连接数 -->
<property name="maxTotal" value="${redis.maxTotal}" />
</bean>
<bean id="jedisShardInfo1" class="redis.clients.jedis.JedisShardInfo">
<constructor-arg index="0" value="${redis.node1.ip}" />
<constructor-arg index="1" value="${redis.node1.port}"
type="int" /><!-- 如果不声明类型,按字符串对待,调用格式就不对,默认赵6379端口 -->
</bean>
<bean id="jedisShardInfo2" class="redis.clients.jedis.JedisShardInfo">
<constructor-arg index="0" value="${redis.node2.ip}" />
<constructor-arg index="1" value="${redis.node2.port}"
type="int" />
</bean>
<bean id="jedisShardInfo3" class="redis.clients.jedis.JedisShardInfo">
<constructor-arg index="0" value="${redis.node3.ip}" />
<constructor-arg index="1" value="${redis.node3.port}"
type="int" />
</bean>
<!-- 定义集群连接池 -->
<bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool"
destroy-method="close">
<constructor-arg index="0" ref="jedisPoolConfig" />
<constructor-arg index="1">
<list>
<ref bean="jedisShardInfo1" />
<ref bean="jedisShardInfo2" />
<ref bean="jedisShardInfo3" />
</list>
</constructor-arg>
</bean>
</beans>
redis.properties
redis.maxTotal=50
redis.node1.ip=192.168.80.22
redis.node1.port=7000
redis.node2.ip=192.168.80.22
redis.node2.port=7001
redis.node3.ip=192.168.80.22
redis.node3.port=7002