redis是一个key-value内存数据库。它支持存储的value类型包括字符串、list(链表)、set(集合)、有序集合和hash(哈希类型)。这些数据类型都支持push/pop、add/remove, redis支持各种不同方式的排序。redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。
Redis 集群是3.0以上才支持的
架构::
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->key
1. 首先下载https://codeload.github.com/antirez/redis/tar.gz/3.0.0-rc2
解压
修改配置文件
daemonize yes
port 6381
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
2. 进入到redis 目录,进行编译
make install
3. redis 创建集群至少三个master 三个slave所以最少要有六个实例。否则创建集群会提示。本文使用两台机器,每台三个实例。也可以使用一个机器创建六个实例。
4. 如果创建过程正卡在Waiting for the cluster tojoin.......................................。需要修改配置文件中的bind 127.0.0.1修改成对应机器的IP地址。并在创建集群的时候使用IP。这个属性是回路IP,也就是其他节点访问本节点用的。所以多台机器要修改成在局域网的IP。
5. 复制三个到第一台机器,并修改对应配置文件的端口,分别为6381,6382,6383
然后启动前三个
./src/redis-server redis.conf
6. 安装ruby
yum install ruby
安装rubygems
yum install rubygems
gem install redis
7. 安装并运行第二台机器的后三个,复制到第二台机器三个并修改端口号分别为6384,6385,6386,并执行步骤6安装ruby
1. 运行集群命令
./src/redis-trib.rb create –replicas 1 192.168.1.121:6381 192.168.1.121:6382192.168.1.121:6383 192.168.1.120:6384 192.168.1.120:6385 192.168.1.120:6386
2. 出现提示,输入yes
到此集群就创建完了
下载
下载jedis-jedis-2.7.2.zip 和commons-pool2-2.4.2-bin.zip
http://apache.opencas.org//commons/pool/binaries/commons-pool2-2.4.2-bin.zip
https://codeload.github.com/xetorthio/jedis/zip/jedis-2.7.2
jedis 下载只有源码,需要自己编译成jar
配置spring
<bean name="genericObjectPoolConfig" class="org.apache.commons.pool2.impl.GenericObjectPoolConfig">
<property name="maxWaitMillis"value="-1" />
<property name="maxTotal"value="1000" />
<property name="minIdle"value="8" />
<property name="maxIdle"value="100" />
bean>
<bean id="jedisCluster"class="redis.client.factory.JedisClusterFactory">
<property name="addressConfig">
<value>classpath:connect-redis.propertiesvalue>
property>
<property name="addressKeyPrefix"value="address" />
<property name="timeout"value="300000" />
<property name="maxRedirections"value="6" />
<property name="genericObjectPoolConfig"ref="genericObjectPoolConfig" />
bean>
测试
写入缓存
读取缓存