redis集群的Cluster方式配置以及spring的集成
来源:互联网 发布:超级seo 编辑:程序博客网 时间:2024/05/22 17:16
Windows 配置Reids集群 Redis Cluster
1. 下载安装Redis
Redis官方不支持Windows,但是Microsoft Open Tech group在 GitHub上开发了一个Win64的版本,下载地址为:
https://github.com/MSOpenTech/redis/releases
解压之后,拷贝到自定义的redis目录下,例如D:\dev\Redis
打开cmd,切换到Redis目录下,执行
redis-server redis.windows.conf
窗口不要关闭,再重新打开一个cmd窗口,连接Redis执行
redis-cli.exe -h 127.0.0.1 -p 6379
2. 安装Ruby并配置环境
安装Ruby,Windows可以安装RubyInstaller,下载地址:
http://railsinstaller.org/en
win下安装教程:http://jingyan.baidu.com/article/6181c3e094296d152ef153d7.html
只能更换下RubyGems 镜像
感谢淘宝 http://ruby.taobao.org
gem sources --remove https://rubygems.org/
gem sources -a https://ruby.taobao.org/
gem sources -l
一直下一步安装完成会自动弹出一个cmd的黑色窗口,需要对Ruby进行配置
3. 搭建Redis集群
要让集群正常运作至少需要三个主节点,不过在刚开始试用集群功能时, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。
主节点崩溃,从节点的Redis就会提升为主节点,代替原来的主节点工作,崩溃的主Redis回复工作后,会成为从节点
1). 创建Redis集群目录
在redis安装的根目录下创建6个以端口命名的文件夹
mkdir 7000 7001 7002 7003 7004 7005
将安装的redis文件夹中的redis.windows.conf以及redis-server,分别拷贝到新建的六个文件夹中
2). 更改配置
将六个文件夹下的redis.windows.conf文件中以下属性进行修改:
port 7001(对应文件夹的端口号)cluster-enabled yescluster-config-file nodes.confcluster-node-timeout 5000appendonly yes
开始不要给每个redis设置密码,不然后面会非常痛苦
3). 启动6个redis服务
进入每个端口命名的文件夹下启动服务
cd 7001redis-server.exe redis.conf(redis.win.conf)
其他几个目录同上
4). 创建启动集群
由于创建启动集群需要redis-trib.rb文件,它是一个 Ruby 程序, 这个程序通过向实例发送特殊命令来完成创建新集群,检查集群或者对集群进行重新分片(reshared)等工作。
Windows的redis安装文件中是没有这个文件的,我们需要去官网下载Redis,官网的Redis是Linux版本,在其源码src文件夹下,将redis-trib.rb拷贝到本机中Redis的安装目录中
最后进入redis-trib.rb文件所在目录执行:
ruby redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
到这一步可能会报错,需要执行:
gem install redis
然后执行上一步在这里用于创建一个新的集群, 选项–replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。之后跟着的其他参数则是这个集群实例的地址列表,3个master3个slave
redis-trib 会打印出一份预想中的配置给你看, 如果你觉得没问题的话, 就可以输入 yes ,redis-trib 就会将这份配置应用到集群当中,让各个节点开始互相通讯。
5). 连接集群进行测试
连接集群的指令:
redis-cli.exe -c -p 7000
Redis集群数据分配策略:
采用一种叫做哈希槽 (hash slot)的方式来分配数据,redis cluster 默认分配了 16384 个slot,当我们set一个key 时,会用CRC16算法来取模得到所属的slot,然后将这个key分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384
注意的是:必须要3个以后的主节点,否则在创建集群时会失败,三个节点分别承担的slot 区间是:
节点A覆盖0-5460; 节点B覆盖5461-10922; 节点C覆盖10923-16383.
所以上图中按照redis cluster的哈希槽算法:CRC16(‘name’)%16384
被分配到了7001端口的redis服务上。
至此,Redis Cluster在Windows上的配置就完成了!
设置集群访问密码:
方式一:修改所有Redis集群中的redis.conf文件加入:
masterauth passwd123
requirepass passwd123
说明:这种方式需要重新启动各节点
方式二:进入各个实例进行设置:
./redis-cli -c -p 7000
config set masterauth passwd123
config set requirepass passwd123
config rewrite
auth 密码
这个命令就是登陆;
下面是spring的集群配置:
xml配置:这里出现很多问题,jedis和spring-data-redis低版本是不支持密码和集群的,jar包容易出现问题,
redisClusterConfiguration配置集群实例时有两种方式,一种是通过resource资源文件加载(我用的这种但是出现很多问题)二中是在redisClusterConfiguration
里面直接注入每一个实例,具体可以看一看源码,通过set的方式注入
<!-- 引入配置文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="ignoreResourceNotFound" value="true" /> <property name="locations" > <list> <value>classpath*:/redis.properties</value> </list> </property> </bean> <!-- redis pool相关配置 --><bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"><!-- 最小空闲数 --><property name="minIdle" value="${redis.minIdle}" /><!-- 最大空闲数 --><property name="maxIdle" value="${redis.maxIdle}" /><!-- 最大连接数 --><property name="maxTotal" value="${redis.maxTotal}" /><!-- 最大等待时间 单位毫秒(ms) --><property name="maxWaitMillis" value="${redis.maxWaitMillis}" /><!-- 使用连接时测试连接是否可用 --><property name="testOnBorrow" value="${redis.testOnBorrow}" /></bean><!--配置文件加载--> <bean id="resourcePropertySource" class="org.springframework.core.io.support.ResourcePropertySource"> <constructor-arg name="name" value="redis.properties"/> <constructor-arg name="resource" value="classpath:redis.properties"/> </bean> <!-- Redis集群配置 这里使用的是spring-data-redis 包中内容 --> <!--redisCluster配置--> <bean id="redisClusterConfiguration" class="org.springframework.data.redis.connection.RedisClusterConfiguration"> <constructor-arg name="propertySource" ref="resourcePropertySource"/> </bean> <!-- jedis客户端连接工厂 --><bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"><constructor-arg name="clusterConfig" ref="redisClusterConfiguration"/><constructor-arg name="poolConfig" ref="poolConfig"/> <property name="password" value="gongyiyang" /></bean><!-- <property name="database" value="${redis.database}" /><property name="port" value="${redis.port}" /><property name="hostName" value="${redis.host}" /><property name="password" value="${redis.password}" /> --><!-- redisTemplate模板 --><bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"><property name="connectionFactory" ref="jedisConnectionFactory" /></bean> <!-- redis缓存管理器 --><bean id="cacheManager" class="org.gyy.redis.spring_redis.RedisCacheManager"><constructor-arg name="redisOperations" ref="redisTemplate" /><!-- 是否事务提交,如果事务回滚,缓存也回滚,默认false --><property name="transactionAware" value="true" /><!-- 设置缓存超时时间 已实现自动续期 如果不设置将永久存在 --><property name="expires"><map><!-- 模块信息相关缓存配置 --><entry key="cachelong" value="1800" /></map></property></bean><!-- 支持缓存注解 --><cache:annotation-driven cache-manager="cacheManager" />资源文件:使用资源文件时,由于spring在加载资源文件时有可能不会加载到,需要自己设置,我直接就把它放在spring的资源文件上面加载了,使得资源文件很庞大,另外这里是没有sentine配置,只有cluster的集群,集体有什么区别,百度一下
#redis中心 #redis的服务器地址 redis.host=127.0.0.1 #redis的服务端口 redis.port=6379 #密码 redis.password=123456 #缓存池最小空闲数redis.minIdle=5#缓存池最大空闲数redis.maxIdle=100#缓存池最大连接数redis.maxTotal=300#最大等待时间redis.maxWaitMillis=3000#客户端超时时间单位是毫秒 redis.timeout=100000 redis.maxTotal=1000 redis.minIdle=8 #明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个 redis.testOnBorrow=true #sentinel #spring.redis.sentinel.master=mymaster #spring.redis.sentinel.node1.host=127.0.0.1 #spring.redis.sentinel.node2.host=127.0.0.1 #spring.redis.sentinel.node3.host=127.0.0.1 #spring.redis.sentinel.node1.port=26379 #spring.redis.sentinel.node2.port=26479 #spring.redis.sentinel.node3.port=26579 #sentinel #jediscluster cluster1.host.port=127.0.0.1:7000 cluster2.host.port=127.0.0.1:7001 cluster3.host.port=127.0.0.1:7002 cluster4.host.port=127.0.0.1:7003 cluster5.host.port=127.0.0.1:7004 cluster6.host.port=127.0.0.1:7005 #jediscluster #rediscluster spring.redis.cluster.nodes=127.0.0.1:7000,127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003,127.0.0.1:7004,127.0.0.1:7005spring.redis.cluster.max-redirects=3 #rediscluster设置成功以后直接注解使用就可以了,另外说一下,如果项目中有使用mybatis多数据源的注入,有可能会报错,
- redis集群的Cluster方式配置以及spring的集成
- spring配置集成redis的不同方式
- redis配置与cluster集群的搭建
- tomcat 集群(1)总结tomcat的server.ml配置cluster的方式,以及Tomcat集群session共享失败的解决方法
- redis cluster集群配置
- Redis Cluster集群配置
- quartz集成spring下的集群配置
- spring集成quartz的集群配置实例
- spring 整合 redis cluster集群
- spring配置单Redis,Sentinel 哨兵模式,Redis Cluster集群,Redis Sharding集群
- redis cluster 的手工配置
- Redis cluster的配置过程
- Redis Cluster 集群的实现和管理
- Redis Cluster集群的搭建与实践
- Redis Cluster集群的搭建与实践
- redis cluster集群的源码分析(1)
- redis cluster集群的源码分析(2)
- Redis Cluster集群的搭建与实践
- getComputedStyle方法与currentStyle属性获取元素样式
- iOS判断是两个日期是否大于1天
- 建立一个链表,每个结点数据包括:学号、姓名,性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。
- java解析xml并把节点值存储到数据库中
- 滚动切换选项卡视图
- redis集群的Cluster方式配置以及spring的集成
- Leetcode笔记:(MySQL)181. Employees Earning More Than Their Managers
- the specified license key not be verified as belonging to this host
- <C语言>实现输入几个数,先倒叙排列,再用“冒泡排序”方法从小到大排列
- 深度学习笔记——理论与推导之Structured Learning【Markov Logic Network】(十一)
- linux网络编程-UDP实现文件的传输
- 【转载】Android Studio NDK 开发与调试(生成 .so 文件)
- qduoj water problem(线段树)
- The container 'Maven Dependencies' references non existing library '