环境:虚拟机3主3从
1、关闭slave是对读写都没有影响的
2、关键就是关闭master,读写都会失败
虽说可以设置lettuce的拓扑自动更新,但是redis的slave变成master是需要时间的
在这段时间内的读写都无法进行,异常-->【connection refused】
等到slave变成了master,读写才会恢复,但是依然会报警告,无法连接到xxx,哎...找了半天发现有个方法可以避免读的失败,就是优先从slave读
StatefulRedisClusterConnection对象之
setReadFrom(ReadFrom.REPLICA_PREFERRED);
通过测试发现只有REPLICA_PREFERRED有效,其他无效
这个选项意思是优先从副本读取,master宕机或者slave宕机都不会对读造成任何影响
NICE啊。。。
3、使用lettuce操作cluster
|--工具类
/**
* lettuce获取cluster连接
*/
public class ClusterUtil {
private static final List<RedisURI> redisURIList = new ArrayList<>();
private static final String address =
"192.168.8.131:6379," +
"192.168.8.129:6379," +
"192.168.8.130:6379," +
"192.168.8.132:6379," +
"192.168.8.134:6379," +
"192.168.8.133:6379";
private static final String auth = "******";
private static RedisClusterClient client;
private static ThreadLocal<StatefulRedisClusterConnection> box = new ThreadLocal<>();
static {
for (String x : address.split(",")) {
StringBuilder sb = new StringBuilder();
sb.append("redis://").append(auth).append("@").append(x);
redisURIList.add(RedisURI.create(sb.toString()));
}
client = RedisClusterClient.create(redisURIList);
//拓扑更新设置
ClusterTopologyRefreshOptions.Builder topoBuilder = ClusterTopologyRefreshOptions.builder();
topoBuilder.enableAllAdaptiveRefreshTriggers();
topoBuilder.enablePeriodicRefresh(true);
topoBuilder.dynamicRefreshSources(true);
topoBuilder.closeStaleConnections(true);
//client选项设置
ClusterClientOptions.Builder clientOptionsBuilder = ClusterClientOptions.builder();
clientOpti