標籤:clust 並且 list import serve 檔案複製 int har bug
需求:
如果將全部資料都儲存到一台redis中,那麼如果該伺服器損壞,則影響全部的服務;
使用單台redis記憶體設定一般不要超過1G,但是有些業務資料量很大,如果不修改記憶體,則資料無法儲存;
方案:
採用redis分區技術;
優點:
1.使用redis分區可以實現記憶體資料的動態擴容;
2.使用分區,每台redis節點中儘可能儲存1/n的資料量,防止資料的丟失;
3.對於使用者而言,整個redis的分區就是一個服務;n台伺服器作為一個整體的伺服器共同為使用者服務;
1. 分區搭建:
1.1複製設定檔:建立shards檔案夾,將redis.conf檔案複製到shards檔案中,並且複製3分,改名字,改連接埠號碼;
[[email protected] redis]# ls00-RELEASENOTES deps MANIFESTO runtest-cluster srcBUGS dump.rdb README.md runtest-sentinel testsCONTRIBUTING INSTALL redis.conf sentinel.conf utilsCOPYING Makefile runtest shards[[email protected] redis]# cp redis.conf shards/redis-6379.conf[[email protected] redis]# cp redis.conf shards/redis-6380.conf[[email protected] redis]# cp redis.conf shards/redis-6381.conf[[email protected] redis]# ll
結果:
[[email protected] redis]# cd shards/
[[email protected] shards]# ll
total 144
-rw-r--r--. 1 root root 46696 Nov 2 22:51 redis-6379.conf
-rw-r--r--. 1 root root 46696 Nov 2 22:51 redis-6380.conf
-rw-r--r--. 1 root root 46696 Nov 2 22:51 redis-6381.conf
1.2確認啟動是否成功:
[[email protected]alhost shards]# redis-server redis-6379.conf [[email protected] shards]# redis-server redis-6380.conf [[email protected] shards]# redis-server redis-6381.conf [[email protected] shards]# ps -ef |grep redisroot 2845 1 0 22:58 ? 00:00:00 redis-server *:6379 root 2849 1 0 22:58 ? 00:00:00 redis-server *:6380 root 2853 1 0 22:59 ? 00:00:00 redis-server *:6381 root 2857 2585 0 22:59 pts/0 00:00:00 grep redis
1.3測試:
import java.util.ArrayList;import java.util.List;import org.junit.Test;import redis.clients.jedis.JedisPoolConfig;import redis.clients.jedis.JedisShardInfo;import redis.clients.jedis.ShardedJedis;import redis.clients.jedis.ShardedJedisPool;public class TestShardRedis { @Test public void testShard(){ /** * 建立分區的對象 * 1.poolConfig 標示池的大小 * 2.shards redis分區的節點資訊 */ JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(1000); poolConfig.setTestOnBorrow(true);//擷取串連時,先檢測,如果不行就換一個 List<JedisShardInfo> shards = new ArrayList<>(); shards.add(new JedisShardInfo("192.168.25.132", 6379)); shards.add(new JedisShardInfo("192.168.25.132", 6380)); shards.add(new JedisShardInfo("192.168.25.132", 6381)); ShardedJedisPool pool = new ShardedJedisPool(poolConfig, shards); //擷取redis的串連 ShardedJedis jedis = pool.getResource(); jedis.set("shards", "儲存分區的資料"); System.out.println(jedis.get("shards")); //還回串連到pool pool.returnResource(jedis); }}
輸出:儲存分區的資料
redis分區技術