redis的linux下的单机安装、集群安装及测试

来源:互联网 发布:淘宝认证考试 编辑:程序博客网 时间:2024/05/01 03:55

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

redis分为测试版和发行版,通过副版本号来区分(如3.x.y,若x为奇数,则为测试版本,若x为偶数,则为发行版本。

redis从3.0版本后开始支持集群,2.X及更低版本只能使用单机版。


redis单机版安装:

第一步需要在linux系统中安装gcc的C++组件
命令:yum install -y gcc-c++

第二步 需要将下载好的redis压缩包添加到linux服务器中

第三步 解压压缩包
命令:tar -zxvf  redis......

第四步 编译redis
命令:进入redis的解压完毕的根目录下 执行命令:make

第五步 安装redis
命令:进入redis的解压完毕的根目录下,执行命令: make install PREFIX=/usr/local/redis

第六步:启动redis
(1)先将redis解压目录下的redis.conf文件拷贝到 安装好的redis的bin目录下 
命令:cp redis.conf /usr/local/redis/bin

(2)修改拷贝过来的redis.conf配置文件,将前端启动改为后台启动
将daemonize no  改为 yes

(3)启动redis
在bin目录下执行命令:./redis-server redis.conf

(4)查看redis启动是否成功
输入命令:ps aux|grep redis

第七步:测试redis
在bin目录下启动redis自带的客户端 ./redis-cli 

---------------------------------------------------------------------------------------


Redis集群:
redis集群时 没有主副之分,连接任何一个节点都可以,为了避免出现单点故障 所以我们一般都采用主背模式,最简单的集群三对主背,即3*2台服务器(虚拟机)。


第一步 redis集群时需要使用一个ruby的脚本来完成集群。安装ruby环境
命令: yum install ruby 

第二步 安装ruby的包管理器
命令:yum install rubygems

第三步 进入到redis的安装目录下的src目录下找到到 redis-trib.rb这个文件,这是集群时需要的脚本。
命令: ll src/*.rb

第四步 这个脚本的执行需要依赖于一些其他的ruby包 所以我们还要下载一个 redis-3.0.0.gem(版本根据自己的选择)
将这个文件上传到linux服务器中

第五步 安装这个ruby包
命令:gem install redis-3.0.0.gem

第六步 先在local目录下创建一个目录名称为:redis-cluster
命令:mkdir redis-cluster

第七步 将安装好的redis下的bin目录拷贝到 redis-cluster目录下 并起名为redis01
命令:进入到redis目录下执行:cp -r bin ../redis-cluster/redis01

第八步 进入redis01目录下删除 dump.rdb文件
命令:rm -rf dump.rdb

第九步  修改redis.conf配置文件
命令:vim redis.conf 
(1)修改端口:默认的为6379,如果有变化,可以在配置文件的port属性中修改,这里因为是使用的虚拟机,所以将六个redis实例的端口改成了从7001-7006。 
(2)修改开启集群,搜索cluster  找到后 将默认为注释的 cluster-enabled yes去掉注释。因为集群配置默认情况下是不开启的,所以需要在配置文件中将此配置打开

第十步 将这个redis01 拷贝6份到当前这个目录下
命令:cp -r redis01/ redis02
      cp -r redis01/ redis03
      cp -r redis01/ redis04
      cp -r redis01/ redis05
      cp -r redis01/ redis06

第十一步 修改拷贝的这些redis的端口
命令:
vim redis02/redis.conf 
vim redis03/redis.conf 
 vim redis04/redis.conf 
vim redis05/redis.conf 
vim redis06/redis.conf


第十二步 把创建集群的ruby脚本复制到redis-cluster中
命令:cp *.rb /usr/local/redis-cluster/

第十二步 创建一个能够批量启动的脚本程序
命令:vim startall.sh
      
第十三步 在脚本文件中添加命令
命令:

cd redis01
      ./redis.server redis.conf
      cd .. 
      cd redis02
      ./redis-server redis.conf
      cd .. 
      cd redis03
      ./redis-server redis.conf
      cd .. 
      cd redis04
      ./redis-server redis.conf
      cd .. 
      cd redis05
      ./redis-server redis.conf
      cd .. 
      cd redis06
      ./redis-server redis.conf
      cd .. 

第十四步 将批量启动脚本设置为可执行权限
命令:chmod +x startall.sh

第十五步 执行这个批量启动的脚本
命令: ./startall.sh 

第十六步 查看redis是否启动成功
命令:ps aux|grep redis

第十七步 创建集群(注意修改ip及端口)
命令: ./redis-trib.rb create --replicas 1 192.168.10.32:7001 192.168.10.32:7002 192.168.10.32:7003 192.168.10.32:7004 192.168.10.32:7005  192.168.10.32:7006


控制台会显示如下信息 输入 yes

Can I set the above configuration? (type 'yes' to accept): 

如果控制台输出如下信息表集群成功

[OK] All 16384 slots covered.

--------------------------------------------------------------------------


测试Redis集群
测试Redis集群:可以连接集群中的任意一个节点进行测试 注意一定要有-c参数,否则能连上,但是无法操作redis集群
命令:[root@localhost redis-cluster]# ./redis01/redis-cli -h 192.168.10.32 -p 7001 -c


关闭Redis集群
命令:bin/redis-cli -p 7001 shutdown


也可以编写一个批量关闭的脚本
命令:

vim shutdown.sh
redis01/redis-cli -p 7001 shutdown
redis01/redis-cli -p 7002 shutdown
redis01/redis-cli -p 7003 shutdown
redis01/redis-cli -p 7004 shutdown
redis01/redis-cli -p 7005 shutdown
redis01/redis-cli -p 7006 shutdown


注:集群只需要创建一次,以后每次使用打开就行,不需要重复创建。

spring配置

<!-- 配置jedis连接池 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- 最大连接数 -->
<property name="maxTotal" value="30" />
<!-- 最大空闲连接数 -->
<property name="maxIdle" value="10" />
<!-- 每次释放连接的最大数目 -->
<property name="numTestsPerEvictionRun" value="1024" />
<!-- 释放连接的扫描间隔(毫秒) -->
<property name="timeBetweenEvictionRunsMillis" value="30000" />
<!-- 连接最小空闲时间 -->
<property name="minEvictableIdleTimeMillis" value="1800000" />
<!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
<property name="softMinEvictableIdleTimeMillis" value="10000" />
<!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
<property name="maxWaitMillis" value="1500" />
<!-- 在获取连接的时候检查有效性, 默认false -->
<property name="testOnBorrow" value="true" />
<!-- 在空闲时检查有效性, 默认false -->
<property name="testWhileIdle" value="true" />
<!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
<property name="blockWhenExhausted" value="false" />
</bean>


<!-- jedis整合spring单机版  -->
<bean id="jedis" class="redis.clients.jedis.JedisPool">
<constructor-arg name="host" value="192.168.10.32"/>
<constructor-arg name="port" value="6379"/>
<constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
</bean>


<!-- jedisCluster  -->
<bean id="cluster" class="redis.clients.jedis.JedisCluster">
<constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
<constructor-arg name="nodes">
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.10.32"/>
<constructor-arg name="port" value="7001"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.10.32"/>
<constructor-arg name="port" value="7002"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.10.32"/>
<constructor-arg name="port" value="7003"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.10.32"/>
<constructor-arg name="port" value="7004"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.10.32"/>
<constructor-arg name="port" value="7005"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.10.32"/>
<constructor-arg name="port" value="7006"/>
</bean>
</set>
</constructor-arg>
</bean>


程序测试

/**
* redis的单机版测试
*/
@Test
public void jedisSingleTest(){
//jedis
Jedis jedis = new Jedis("192.168.10.32", 6379);
jedis.set("key1", "HelloKey1");
String value = jedis.get("key1");
System.out.println(value);
jedis.close();
}

/**
* redis的单机版的池方式测试
*/
@Test
public void jedisPoolTest(){
JedisPool pool = new JedisPool("192.168.10.32", 6379);
Jedis j = pool.getResource();
j.set("key2", "HelloKey2");
String value = j.get("key2");
System.out.println(value);
j.close();
}
/**
* redis的集群测试
*/
@Test
public void jedisClusterTest(){
Set<HostAndPort> set = new HashSet<>();
set.add(new HostAndPort("192.168.10.32", 7001));
set.add(new HostAndPort("192.168.10.32", 7002));
set.add(new HostAndPort("192.168.10.32", 7003));
set.add(new HostAndPort("192.168.10.32", 7004));
set.add(new HostAndPort("192.168.10.32", 7005));
set.add(new HostAndPort("192.168.10.32", 7006));
JedisCluster cluster = new JedisCluster(set);
cluster.set("key3", "value3");
String str = cluster.get("key3");
System.out.println(str);
}

/**
* jedis单机版整合spring测试
*/
@Test
public void jedisSpringSingleTest(){
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
JedisPool pool = (JedisPool)ac.getBean("jedis");
Jedis j = pool.getResource();
j.set("jediskey", "jedisvalue");
String str = j.get("jediskey");
System.out.println(str);
j.close();
}

/**
* jedis集群版整合spirng测试
*/
@Test
public void jedisClusterSpringTest(){
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
JedisCluster cluster = (JedisCluster)ac.getBean("cluster");
cluster.set("clusterkey", "clustervalue");
String str = cluster.get("clusterkey");
System.out.println(str);
}

0 0
原创粉丝点击