Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Redis·Ö²¼Ê½¼¯Èº´î½¨
 
×÷Õߣº ÓîµÄ¼¾½Ú
  2591  次浏览      57
2019-11-18
 
±à¼­ÍƼö:
ÎÄÕÂÏêϸ½éÉÜÁËRedis¼¯Èº¼Ü¹¹£¬RedisµÄ°²×°ÅäÖ㬴´½¨Redis¼¯ÈºµÄÏêϸ¹ý³ÌµÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×Ôcnblogs£¬ÓÉ»ðÁú¹ûÈí¼þLuca±à¼­¡¢ÍƼö¡£

Redis¼¯Èº¼Ü¹¹Í¼

ÉÏͼÀ¶É«Îªredis¼¯ÈºµÄ½Úµã¡£

½ÚµãÖ®¼äͨ¹ýpingÃüÁîÀ´²âÊÔÁ¬½ÓÊÇ·ñÕý³££¬½ÚµãÖ®¼äûÓÐÖ÷Çø·Ö£¬Á¬½Óµ½ÈκÎÒ»¸ö½Úµã½øÐвÙ×÷ʱ£¬¶¼¿ÉÄÜ»áת·¢µ½ÆäËû½Úµã¡£

1¡¢RedisµÄÈÝ´í»úÖÆ

½ÚµãÖ®¼ä»á¶¨Ê±µÄ»¥Ïà·¢ËÍpingÃüÁ²âÊÔ½ÚµãµÄ½¡¿µ×´Ì¬£¬µ±½Úµã½ÓÊܵ½pingÃüÁîºó£¬»á·µ»ØÒ»¸öpong×Ö·û´®¡£

ͶƱ»úÖÆ£ºÈç¹ûÒ»¸ö½ÚµãA¸ø½ÚµãB·¢ËÍpingûÓеõ½pong·µ»Ø£¬»á֪ͨÆäËû½ÚµãÔٴθøB·¢ËÍping£¬Èç¹û¼¯ÈºÖÐÓг¬¹ýÒ»°ëµÄ½ÚµãÊÕ²»B½ÚµãµÄpong¡£ÄÇô¾ÍÈÏΪB½Úµã¹ÒÁË¡£Ò»°ã»áΪÿ¸ö½ÚµãÌṩһ¸ö±¸·Ý½Úµã£¬Èç¹û¹Òµô»áÇл»µ½±¸·Ý½Úµã¡£

2¡¢Redis¼¯Èº´æ´¢Ô­Àí

Redis¶ÔÓÚÿ¸ö´æ·ÅµÄkey»á½øÐÐhash²Ù×÷£¬Éú³ÉÒ»¸ö[0-16384]µÄhashÖµ£¨ÏȽøÐÐ

crc Ëã·¨ÔÙ¶Ô16384È¡Óࣩ¡£

¼¯ÈºµÄÇé¿öÏ£¬¾ÍÊǰÑ[0-16384]µÄÇø¼ä½øÐвð·Ö£¬·Åµ½²»Í¬µÄredisÖС£

3¡¢RedisµÄ³Ö¾Ã»¯

Snapshotting£º¶¨Ê±µÄ½«RedisÄÚ´æÖеÄÊý¾Ý±£´æµ½Ó²ÅÌÖÐ

AOF£º½«ËùÓеÄcommand²Ù×÷±£´æµ½aofÖУ¬AOPµÄͬ²½ÆµÂʺܸߣ¬Êý¾Ý¼´Ê¹¶ªÊ§£¬Á£¶ÈÒ²ºÜС£¬µ«»áÔÚÐÔÄÜÉÏÔì³ÉÓ°Ïì¡£

¶þ¡¢Redis¼¯Èº×¼±¸¹¤×÷

Redis°²×°

Ô´ÂëÏÂÔØ

ÏÂÔØµØÖ·https://pan.baidu.com/s/1bCcLv4 ÃÜÂëi5k6

½âѹԴÂë

tar -zxvf redis-3.0.0.tar.gz

½øÈë½âѹºóµÄĿ¼½øÐбàÒë

cd /usr/local/redis-3.0.0

make

°²×°µ½Ö¸¶¨Ä¿Â¼,Èç /usr/local/redis

cd /usr/local/redis-3.0.0

make PREFIX=/usr/local/redis install

nredis.conf

redis.confÊÇredisµÄÅäÖÃÎļþ£¬redis.confÔÚredisÔ´ÂëĿ¼¡£

×¢ÒâÐÞ¸Äport×÷Ϊredis½ø³ÌµÄ¶Ë¿Ú,portĬÈÏ6379¡£

¿½±´ÅäÖÃÎļþµ½°²×°Ä¿Â¼ÏÂ

½øÈëÔ´ÂëĿ¼£¬ÀïÃæÓÐÒ»·ÝÅäÖÃÎļþ redis.conf£¬È»ºó½«Æä¿½±´µ½°²×°Â·¾¶ÏÂ

cd /usr/local/redis

mkdir conf

cp /usr/local/redis-3.0.0/redis.conf /usr/local/redis/bin

ÔËÐУºbin/redis-server ½«³öÏÖÏÂͼ»­Ã棺

RedisĬÈÏÊÇǰ̨ÔËÐеģ¬¿ÉÒÔÐÞ¸Äredis.confµÄdaemonize yes £¬½«Æä±ä³Éºǫ́ÔËÐС£

¼¯Èº»·¾³´î½¨

redis¼¯Èº¹ÜÀí¹¤¾ßredis-trib.rbÒÀÀµruby»·¾³£¬Ê×ÏÈÐèÒª°²×°ruby»·¾³

°²×°ruby

yum install ruby

yum install rubygems

°²×°rubyºÍredisµÄ½Ó¿Ú³ÌÐò

¿½±´redis-3.0.0.gemÖÁ/usr/localÏÂ

Ö´ÐУº

gem install /usr/local/redis-3.0.0.gem

Èý¡¢´´½¨Redis¼¯Èº

ÔÚһ̨·þÎñÆ÷ÉÏ£¬¿ÉÒÔÓò»Í¬¶Ë¿ÚºÅÀ´±íʾ²»Í¬redis·þÎñÆ÷¡£

Redis¼¯Èº×îÉÙÐèÒªÈý̨·þÎñÆ÷£¬¶øÃ¿Ì¨·þÎñÆ÷ÓÐÐèÒª±¸Ó÷þÎñÆ÷£¬ËùÒÔ×îÉÙÐèÒª6̨·þÎñÆ÷¡£¶Ë¿Ú¹æ»®ÈçÏ£º

Ö÷·þÎñÆ÷£º192.168.100.66 :7001 :7002 :7003

´Ó·þÎñÆ÷£º192.168.100.66 :7004 :7005 :7006

ÔÚ/usr/local ´´½¨Îļþ¼ÐÓÃÀ´´æ·Å·þÎñÆ÷³ÌÐò

mkdir 7001 7002 7003 7004 7005 7006

Èç¹ûÏëÈÃredisÖ§³Ö¼¯ÈºÐèÒªÐÞ¸Äredis.configÅäÖÃÎļþµÄcluster-enabled yes

±¾ÀýÖÐÎÒÃÇÒÔ¶Ë¿ÚÀ´Çø±ð²»Í¬µÄredis·þÎñ£¬ËùÒÔ»¹ÐèÒªÐÞ¸Äredis.configµÄportΪ¶ÔÓ¦¶Ë¿Ú

ÐÞ¸ÄÍêÅäÖÃÎļþ£¬½«redis°²×°Ä¿Â¼µÄbin¸´ÖƵ½ÉÏÃæÃ¿¸öĿ¼ÖС£

·Ö±ð½øÈë7001/bin/ 7002/bin .....

Æô¶¯·þÎñ./redis-server ./redis.conf

²é¿´redis½ø³Ì£ºps -aux|grep redis ÈçÏÂͼÔò˵Ã÷Æô¶¯³É¹¦

´´½¨¼¯Èº£º

½«Ö®Ç°½âѹµÄÎļþ¼ÐµÄredis-3.0.0/src/redis-trib.rb¸´ÖƵ½redis-clusterĿ¼

ÔËÐÐ

./redis-trib.rb create --replicas 1 192.168.100.66:7001 192.168.100.66:7002 192.168.100.66:7003 192.168.100.66:7004 192.168.100.66:7005 192.168.100.66:7006

Èç¹ûÖ´ÐÐʱ±¨ÈçÏ´íÎó£º

[ERR] Node XXXXXX is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0

½â¾ö·½·¨ÊÇɾ³ýÉú³ÉµÄÅäÖÃÎļþnodes.conf£¬Èç¹û²»ÐÐÔò˵Ã÷ÏÖÔÚ´´½¨µÄ½áµã°üÀ¨Á˾ɼ¯ÈºµÄ½áµãÐÅÏ¢£¬ÐèҪɾ³ýredisµÄ³Ö¾Ã»¯ÎļþºóÔÙÖØÆôredis£¬±ÈÈ磺appendonly.aof¡¢dump.rdb

Èç¹û³É¹¦×îÖÕÊäÈëÈçÏ£º

²éѯ¼¯ÈºÐÅÏ¢£º

˵Ã÷£º

./redis-cli -c -h 192.168.101.3 -p 7001 £¬ÆäÖÐ-c±íʾÒÔ¼¯Èº·½Ê½Á¬½Óredis£¬-hÖ¸¶¨ipµØÖ·£¬-pÖ¸¶¨¶Ë¿ÚºÅ

cluster nodes ²éѯ¼¯Èº½áµãÐÅÏ¢

cluster info ²éѯ¼¯Èº×´Ì¬ÐÅÏ¢

hash²ÛÖØÐ·ÖÅä

µÚÒ»²½£ºÁ¬½ÓÉϼ¯Èº

./redis-trib.rb reshard 192.168.101.3:7001£¨Á¬½Ó¼¯ÈºÖÐÈÎÒâÒ»¸ö¿ÉÓýáµã¶¼ÐУ©

µÚ¶þ²½£ºÊäÈëÒª·ÖÅäµÄ²ÛÊýÁ¿

ÊäÈë 500±íʾҪ·ÖÅä500¸ö²Û

µÚÈý²½£ºÊäÈë½ÓÊղ۵Ľáµãid

ÕâÀï×¼±¸¸ø7007·ÖÅä²Û£¬Í¨¹ýcluster nodes²é¿´7007½áµãidΪ15b809eadae88955e36bcdbb8144f61bbbaf38fb

ÊäÈ룺15b809eadae88955e36bcdbb8144f61bbbaf38fb

µÚËIJ½£ºÊäÈëÔ´½áµãid

ÕâÀïÊäÈëall

µÚÎå²½£ºÊäÈëyes¿ªÊ¼Òƶ¯²Ûµ½Ä¿±ê½áµãid

Ìí¼Ó´Ó½Úµã

¼¯Èº´´½¨³É¹¦ºó¿ÉÒÔÏò¼¯ÈºÖÐÌí¼Ó½Úµã£¬ÏÂÃæÊÇÌí¼ÓÒ»¸öslave´Ó½Úµã¡£

Ìí¼Ó7008´Ó½áµã£¬½«7008×÷Ϊ7007µÄ´Ó½áµã¡£

./redis-trib.rb add-node --slave --master-id Ö÷½Úµãid Ìí¼Ó½ÚµãµÄipºÍ¶Ë¿Ú ¼¯ÈºÖÐÒÑ´æÔÚ½ÚµãipºÍ¶Ë¿Ú

Ö´ÐÐÈçÏÂÃüÁ

./redis-trib.rb add-node --slave --master-id cad9f7413ec6842c971dbcc2c48b4ca959eb5db4 192.168.101.3:7008 192.168.101.3:7001

cad9f7413ec6842c971dbcc2c48b4ca959eb5db4 ÊÇ7007½áµãµÄid£¬¿Éͨ¹ýcluster nodes²é¿´¡£

×¢Ò⣺Èç¹ûÔ­À´¸Ã½áµãÔÚ¼¯ÈºÖеÄÅäÖÃÐÅÏ¢ÒѾ­Éú³Écluster-config-fileÖ¸¶¨µÄÅäÖÃÎļþÖУ¨Èç¹ûcluster-config-fileûÓÐÖ¸¶¨ÔòĬÈÏΪnodes.conf£©£¬Õâʱ¿ÉÄܻᱨ´í£º

[ERR] Node XXXXXX is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0

½â¾ö·½·¨ÊÇɾ³ýÉú³ÉµÄÅäÖÃÎļþnodes.conf£¬É¾³ýºóÔÙÖ´ÐÐ./redis-trib.rb add-nodeÖ¸Áî

²é¿´¼¯ÈºÖеĽáµã£¬¸ÕÌí¼ÓµÄ7008Ϊ7007µÄ´Ó½Úµã£º

1.1. ɾ³ý½áµã£º

./redis-trib.rb del-node 127.0.0.1:7005 4b45eb75c8b428fbd77ab979b85080146a9bc017

ɾ³ýÒѾ­Õ¼ÓÐhash²ÛµÄ½áµã»áʧ°Ü£¬±¨´íÈçÏ£º

[ERR] Node 127.0.0.1:7005 is not empty! Reshard data away and try again.

ÐèÒª½«¸Ã½áµãÕ¼ÓõÄhash²Û·ÖÅä³öÈ¥£¨²Î¿¼hash²ÛÖØÐ·ÖÅäÕ½ڣ©¡£

²âÊÔ:

Maven:

<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact /org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.10.RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>

ÆÕͨ²âÊÔ£º

@Test
public void redisClusterTest1(){
JedisPoolConfig config=new JedisPoolConfig();
config.setMaxTotal(30);
config.setMaxIdle(2);

Set<HostAndPort> jedisNode=new HashSet<HostAndPort>();
jedisNode.add(new HostAndPort("192.168.100.66",7001));
jedisNode.add(new HostAndPort("192.168.100.66",7002));
jedisNode.add(new HostAndPort("192.168.100.66",7003));
jedisNode.add(new HostAndPort("192.168.100.66",7004));
jedisNode.add(new HostAndPort("192.168.100.66",7005));
jedisNode.add(new HostAndPort("192.168.100.66",7006));

JedisCluster jc=new JedisCluster(jedisNode,config);
jc.set("name","ÀÏÍõ");
String value=jc.get("name");
System.out.println(value);
}

Spring²âÊÔ£º

ÅäÖÃÎļþ£º

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org /schema/beans"
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.xsd">
<!-- Á¬½Ó³ØÅäÖà -->
<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>
<!-- redis¼¯Èº -->
<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
<constructor-arg index="0">
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg index="0" value="192.168.100.66"> </constructor-arg>
<constructor-arg index="1" value="7001"> </constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg index="0" value="192.168.100.66"> </constructor-arg>
<constructor-arg index="1" value="7002"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg index="0" value="192.168.100.66"></constructor-arg>
<constructor-arg index="1" value="7003"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg index="0" value="192.168.100.66"></constructor-arg>
<constructor-arg index="1" value="7004"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg index="0" value="192.168.100.66"></constructor-arg>
<constructor-arg index="1" value="7005"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg index="0" value="192.168.100.66"></constructor-arg>
<constructor-arg index="1" value="7006"></constructor-arg>
</bean>
</set>
</constructor-arg>
<constructor-arg index="1" ref="jedisPoolConfig"></constructor-arg>
</bean>
</beans>

²âÊÔÀࣺ

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring-config.xml"})
public class RedisClusterTest {
@Autowired
private JedisCluster jedisCluster;
@Test
public void redisClusterTest2(){
jedisCluster.set("username","СÃ÷À²À²");
String name=jedisCluster.get("username");
System.out.println(name);
}
}

 

   
2591 ´Îä¯ÀÀ       57
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ