Redis Master/Salve Replication(主从复制模式)

来源:互联网 发布:网络广告制作软件 编辑:程序博客网 时间:2024/05/01 12:27

前言

          Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。



1.Redis安装部署

            1>下载安装文件(http://redis.io/download)到/tmp 目录下面  (个人喜好),当前使用版本是Redis3.0.7

             2>解压缩,编译

                      tar -zxvf  redis-3.0.7.tar.gz  

                  解压缩完成后,进入 redis-3.0.7目录

                       make

                    编译完成后,把文件copy到/user/local目录下

             

               3>部署情况

                   两台服务器:10.45.130.193 Master

                                          10.45.130.194 Slave

       

                 4>主从复制原理

            初次同步:Slave向Master发出同步请求(发送sync命令),Master先dump出rdb文件,然后将rdb文件全量传输给slave,然后Master把缓存的写命令转发给Slave,初次同步完成。
          以后Master数据变更,会将变量的快照直接实时依次发送给各个Slave。

       

2.Redis配置文件

      1>Master配置:cp redis.confredis.master.conf,并修改如下参数,其他照旧

           port 6379                                    #监听的端口
           masterauth "redis@user"         #链接Master时的密码
           requirepass "redis@user"       #Master挂掉,再加入时变成了Slave,所以需要请求密码(Sentinel 模式)


            进入src目录,运行命令行启动: ./redis-server  ../redis.master.conf


       2>Slave配置:cp redis.confredis.slave.conf,并修改如下参数,

            port 6379                                    #监听的端口
           masterauth "redis@user"         #链接Master时的密码
           requirepass "redis@user"       #Master挂掉,再加入时变成了Slave,所以需要请求密码(Sentinel 模式)

           slaveof 10.45.130.193  6379      #其他和Master一样 ,这里Slave必须要配置

            

          进入src目录,命令行启动: ./redis-server  ../redis.slave.conf

          

          同时在Master的控制台上可以看到slave 10.45.130.193 加入了Master


3.Spring配置

              <!-- Redis连接池配置-->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxIdle" value="${redis.pool.maxIdle}" />
<property name="maxWaitMillis" value="${redis.pool.maxWait}" />
<property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />
</bean>


<!-- Redis连接工厂-->
<bean id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="usePool" value="true"></property>
<property name="hostName" value="${redis.ip}" />
<property name="port" value="${redis.port}" />
<property name="password" value="${redis.password}" />
<property name="timeout" value="${redis.timeout}" />
<property name="database" value="${redis.default.db}"></property>


<constructor-arg index="0" ref="jedisPoolConfig" />
</bean> 


<!-- Redis模板-->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory" />
<property name="KeySerializer">
<bean
class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
</property>
<property name="ValueSerializer">
<bean
class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"></bean>
</property>


<property name="HashKeySerializer">
<bean
class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
</property>
<property name="HashValueSerializer">
<bean
class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"></bean>
</property>
</bean>




0 0
原创粉丝点击