redis兩個伺服器怎麼連接的
⑴ redis服務搭建有幾種方式
redis主從復制集群
實現方式:選擇一台redis伺服器作為master節點(負責寫操作),另外一台或多台伺服器作為slave節點(負責讀操作),slave節點上的數據完全由master節點同步過來。
作用:降低單節點redis伺服器的讀寫負載,將讀寫分離到不同的伺服器
提供數據的可用性
從圖中可以看出,返回0,說明不存在
⑵ 怎麼連接redis集群 使用jedis連接單機和集群redis的兩種方式
第一:非集群狀態下
非集群狀態下用Jedis獲取Redis連接,得到Jedis對象即可,一共有兩種:
1.利用Jedis構造器,僅限用於測試,在實際項目中肯定是用JedisPool。
Jedis(String host);
Jedis(String host , int port);
2.利用JedisPool
主要是利用Jedis jedis=jedisPool.getResource();
JedisPool有N多個構造器,常用的構造器參數有GenericObjectPoolConfig poolConfig,String host,int port,int timeout,String password,創建GenericObjectPoolConfig對象時我們一般用其子類JedisPoolConfig (redis.clients.jedis.JedisPoolConfig),timeout是連接redis伺服器的超時時間,以毫秒為單位,一般設置為0,如果不設為0,則不可設置太小,如果設成1、2,那麼可能因為網路原因在1毫秒、2毫秒之內沒有連上伺服器而報錯。見下例:
[java] view plain
public static void main(String[] args) {
JedisPoolConfig poolConfig = new JedisPoolConfig();
// 最大連接數
poolConfig.setMaxTotal(2);
// 最大空閑數
poolConfig.setMaxIdle(2);
// 最大允許等待時間,如果超過這個時間還未獲取到連接,則會報JedisException異常:
// Could not get a resource from the pool
poolConfig.setMaxWaitMillis(1000);
JedisPool pool = new JedisPool(poolConfig, "192.168.83.128", 6379, 0, "123");
Jedis jedis = null;
try {
for (int i = 0; i < 5; i++) {
jedis = pool.getResource();
jedis.set("foo" + i, "bar" + i);
System.out.println("第" + (i + 1) + "個連接, 得到的值為" + jedis.get("foo" + i));
// 用完一定要釋放連接
jedis.close();
}
} finally {
pool.close();
}
}
如上,創建出一個JedisPool對象,然後調用其getResource()方法獲取redis連接即可,之後就可以調用Jedis API操作redis了。jedis連接用完要釋放即close,如果不close,則產生的連接會越來越多,當達到了最大連接數,再想獲得連接,就會等待,當超過了最大等待時間後就會報異常。
第二:集群狀態下
集群狀態下用Jedis獲取redis連接,是得到JedisCluster對象,之後對redis進行操作都是用此對象的方法進行的:
[java] view plain
public static void main(String[] args) {
JedisPoolConfig poolConfig = new JedisPoolConfig();
// 最大連接數
poolConfig.setMaxTotal(1);
// 最大空閑數
poolConfig.setMaxIdle(1);
// 最大允許等待時間,如果超過這個時間還未獲取到連接,則會報JedisException異常:
// Could not get a resource from the pool
poolConfig.setMaxWaitMillis(1000);
Set<HostAndPort> nodes = new LinkedHashSet<HostAndPort>();
nodes.add(new HostAndPort("192.168.83.128", 6379));
nodes.add(new HostAndPort("192.168.83.128", 6380));
nodes.add(new HostAndPort("192.168.83.128", 6381));
nodes.add(new HostAndPort("192.168.83.128", 6382));
nodes.add(new HostAndPort("192.168.83.128", 6383));
nodes.add(new HostAndPort("192.168.83.128", 6384));
JedisCluster cluster = new JedisCluster(nodes, poolConfig);
String name = cluster.get("name");
System.out.println(name);
cluster.set("age", "18");
System.out.println(cluster.get("age"));
try {
cluster.close();
} catch (IOException e) {
e.printStackTrace();
}
}
用集群時,好像沒有辦法設置集群的參數,比如最大連接數,雖然在創建JedisCluster 對象時傳了JedisPoolConfig對象進去,但是JedisPoolConfig對象中的設置是不生效的。
⑶ 軟體Xshell連接Redis操作教程
方法/步驟
1、打開已經安裝成功的Xshell,點擊左上角【新建】按鈕,打開新建會話屬性對話框
2、連接信息驗證,輸入redis伺服器的主機IP,埠號,名稱(自定義,如test)
3、用戶身份驗證,方法:Password,輸入連接redis伺服器的用戶名和密碼;點擊【確定】按鈕
4、點擊會話對話框中的【連接】按鈕
5、連接成功狀態
6、通過命令
【redis-cli
-a
test123】;連接redis資料庫,其中【test123】資料庫是名稱。到這里為止,您已經通過Xshell能完整的操作redis了,您會了嗎?
⑷ 如何通過一個伺服器訪問兩一個伺服器的redis
在windows系統下安裝多個Redis實例。伺服器裝有一個Redis實例,隨著項目的進行,需要安裝多個實例才可以。直接安裝是只會有6379埠,需要採用下面的方式來安裝。本示例講解的是:redis-2.4.6-setup-64-bit.exe 和redis-2.8.17 windows MSOpen。工具/原料
Redis安裝文件
CMD命令提示符
方法/步驟
下載安裝文件,選擇穩定版本
點擊安裝exe文件,進行安裝。選擇好路徑,一直到安裝結束即可。
點擊Service查看Redis服務是否正確的安裝。Windows--》Service.msc。默認的埠為6379。服務已啟動。
使用客戶端工具進行連接,出現如下畫面即成功。
使用CMD工具,安裝另一個Redis實例服務,埠為6369. 需要提前建好6369埠使用的conf文件
如:C:\Users\Gray>E:\redis-2.8.17\redis-server.exe --service-install E:\redis-2.8.17\redis6369.conf --service-name RedisServer6369 --port 6369
試驗了幾次都沒有提示成功的信息,但是查看服務成功了,而且用客戶端連接也成功了。
查看6369埠的redis服務
步驟閱讀
7
使用客戶端連接6369 redis服務,出現如下界面表示成功
⑸ 如何同步到redis
在Redis中,用戶可以通過執行SLAVEOF命令或者設置slaveof選項,讓一個伺服器去復制(replicate)另一個伺服器,我們稱呼被復制的伺服器為主伺服器(master),而對主伺服器進行復制的伺服器則被稱為從伺服器(slave),如圖所示。
步驟5:發送埠信息
身份驗證步驟之後,從伺服器將執行命令REPLCONF listening-port <port-number>,向主伺服器發送從伺服器的監聽埠號。
主伺服器在接收到這個命令之後,會將埠號記錄在從伺服器所對應的客戶端狀態的slave_listening_port屬性中:
typedefstructredisClient{
//...
//從伺服器的監聽埠號
intslave_listening_port;
//...
}redisClient;
slave_listening_port屬性目前唯一的作用就是在主伺服器執行INFO replication命令時列印出從伺服器的埠號。
步驟6:同步
在這一步,從伺服器將向主伺服器發送PSYNC命令,執行同步操作,並將自己的資料庫更新至主伺服器資料庫當前所處的狀態。
需要注意的是在執行同步操作前,只有從伺服器是主伺服器的客戶端。但是執行從不操作之後,主伺服器也會稱為從伺服器的客戶端:
如果PSYNC命令執行的是完整同步操作,那麼主伺服器只有成為了從伺服器的客戶端才能將保存在緩沖區中的寫命令發送給從伺服器執行;
如果PSYNC命令執行的是部分同步操作,那麼主伺服器只有成為了從伺服器的客戶端才能將保存在復制積壓緩沖區中的寫命令發送給從伺服器執行;
步驟7:命令傳播
當完成了同步之後,主從伺服器就會進入命令傳播階段,這時主伺服器只要一直將自己執行的寫命令發送給從伺服器,而從伺服器只要一直接收並執行主伺服器發來的寫命令,就可以保證主從伺服器一直保持一致了。
心跳檢測
在命令傳播階段,從伺服器默認會以每秒一次的頻率,向主伺服器發送命令:REPLCONF ACK <replication_offset>
其中replication_offset是從伺服器當前的復制偏移量。
發送REPLCONF ACK命令對於主從伺服器有三個作用:
檢測主從伺服器的網路連接狀態;
輔助實現min-slaves選項;
檢測命令丟失。
檢測主從伺服器的網路連接狀態
如果主伺服器超過一秒鍾沒有收到從伺服器發來的REPLCONF ACK命令,那麼主伺服器就知道主從伺服器之間的連接出現問題了。
通過向主伺服器發送INFO replication命令,在列出的從伺服器列表的lag一欄中,我們可以看到相應從伺服器最後一次向主伺服器發送REPLCONF ACK命令距離現在過了多少秒:
127.0.0.1:6379>INFOreplication
#Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=12345,state=online,offset=211,lag=0
#剛剛發送過REPLCONFACK命令
slave1:ip=127.0.0.1,port=56789,state=online,offset=197,lag=15
#15秒之前發送過REPLCONFACK命令
master_repl_offset:211
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:210
在一般情況下,lag的值應該在0秒或者1秒之間跳動,如果超過1秒的話,那麼說明主從伺服器之間的連接出現了故障。
輔助實現min-slaves配置選項
Redis的min-slaves-to-write和min-slaves-max-lag兩個選項可以防止主伺服器在不安全的情況下執行寫命令。
舉個例子,如果我們向主伺服器提供以下設置:
min-slaves-to-write3
min-slaves-max-lag10
那麼在從伺服器的數量少於3個,或者三個從伺服器的延遲(lag)值都大於或等於10秒時,主伺服器將拒絕執行寫命令,這里的延遲值就是上面提到的INFO replication命令的lag值。
檢測命令丟失
我們從命令:REPLCONF ACK <replication_offset>就可以知道,每發送一次這個命令從伺服器都會向主伺服器報告一次自己的復制偏移量。那此時盡管主伺服器發送給從伺服器的SET key value丟失了。也無所謂,主伺服器馬上就知道了。