springboot2.1.3+j2cache2.7.7-release+redis3.2.3,使用lettuce管理redis三主三从时,数据取值有可能取不到,几率较高。
配置如下:
caffeine.properties:
#########################################
#########################################
default = 1000, 30d
J2Cache configuration:
#########################################
#########################################
#j2cache.broadcast = com.xyl.core.j2cache.cache.support.redis.SpringRedisPubSubPolicy
j2cache.broadcast = redis
#组播的通道名称
jgroups.channel.name = j2cache
jgroups.configXml = /network.xml
#########################################
j2cache.L2.config_section
to make the redis configurations available.#########################################
j2cache.L1.provider_class = caffeine
j2cache.L2.provider_class = lettuce
#j2cache.L2.provider_class = com.xyl.core.j2cache.cache.support.redis.SpringRedisProvider
redis
, using L2.config_section = redis
to read redis configurationsj2cache.sync_ttl_to_redis = true
j2cache.default_cache_null_object = true
#########################################
#########################################
j2cache.serialization = fst
#########################################
#########################################
#ehcache.configXml = /ehcache.xml
#ehcache3.configXml = /ehcache3.xml
#ehcache3.defaultHeapSize = 1000
#########################################
#########################################
caffeine.properties = /caffeine.properties
#########################################
#########################################
#########################################
#########################################
#redis.mode = single
redis.mode = cluster
#redis storage mode (generic|hash)
redis.storage = generic
redis.channel = j2cache
redis.channel.host =
#cluster name just for sharded
redis.cluster_name = j2cache
redis.namespace =
redis.hosts =三主三从的ip
redis.password = aaa
redis.database = 0
redis.maxTotal = 20000
redis.maxIdle = 100
redis.maxWaitMillis = 5000
redis.minEvictableIdleTimeMillis = 60000
redis.minIdle = 1
redis.numTestsPerEvictionRun = 10
redis.lifo = false
redis.softMinEvictableIdleTimeMillis = 10
redis.testOnBorrow = true
redis.testOnReturn = false
redis.testWhileIdle = true
redis.timeBetweenEvictionRunsMillis = 300000
redis.blockWhenExhausted = false
redis.jmxEnabled = false
redis.maxRedirects = 6
redis.timeout = 2000
redis.connectTimeOut = 10000
#lettuce.mode = single
lettuce.mode = cluster
lettuce.cluster_name = j2cache
lettuce.namespace =
lettuce.storage = generic
lettuce.channel = j2cache
#lettuce.scheme = redis
lettuce.scheme = redis-cluster
lettuce.hosts =三主三从的ip
lettuce.password = aaa
lettuce.database = 0
lettuce.connectTimeOut = 10000
lettuce.sentinelMasterId =
lettuce.maxRedirects = 6
lettuce.adaptiveRefreshTriggersTimeout = 2
lettuce.enablePeriodicRefresh = 300
#控制一个pool可分配多少个jedis实例,用来替换上面的redis.maxActive,如果是jedis 2.4以后用该属性
lettuce.maxTotal = -1
#最大空闲数
lettuce.maxIdle = 1000
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
lettuce.maxWaitMillis = 3000
#连接的最小空闲时间 默认1800000毫秒(30分钟)
lettuce.minEvictableIdleTimeMillis = 60000
#最小空闲数
lettuce.minIdle = 100
#每次释放连接的最大数目,默认3
lettuce.numTestsPerEvictionRun = 100
lettuce.lifo = false
#对象空闲多久后逐出, 当空闲时间>该值 且 空闲连接>最大空闲数 时直接逐出,不再根据MinEvictableIdleTimeMillis判断 (默认逐出策略)
lettuce.softMinEvictableIdleTimeMillis = 60000
#是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
lettuce.testOnBorrow = true
#在return给pool时,是否提前进行validate操作
lettuce.testOnReturn = false
#在空闲时检查有效性, 默认false
lettuce.testWhileIdle = true
#逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
lettuce.timeBetweenEvictionRunsMillis = 300000
lettuce.blockWhenExhausted = false
redis服务端版本5.0.3
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
RedisClusterConfiguration cluster = new RedisClusterConfiguration();
cluster.setClusterNodes(nodes);
cluster.setMaxRedirects(maxRedirects);
cluster.setPassword(paw);
// connectionFactory = new LettuceConnectionFactory(cluster, config.build());
connectionFactory = new LettuceConnectionFactory(cluster,
getLettuceClientConfiguration(config, adaptiveRefreshTriggersTimeout, enablePeriodicRefresh));
/**
* 配置LettuceClientConfiguration 包括线程池配置和安全项配置
*
* @param LettucePoolingClientConfigurationBuilder config
* @return lettuceClientConfiguration
*/
private LettuceClientConfiguration getLettuceClientConfiguration(LettucePoolingClientConfigurationBuilder config,
int adaptiveRefreshTriggersTimeout, int enablePeriodicRefresh) {
/*
* 【重要!!】 【重要!!】 【重要!!】
* ClusterTopologyRefreshOptions配置用于开启自适应刷新和定时刷新。如自适应刷新不开启,Redis集群变更时将会导致连接异常!
*/
ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder()
// 开启自适应刷新
.enableAdaptiveRefreshTrigger(ClusterTopologyRefreshOptions.RefreshTrigger.MOVED_REDIRECT,
ClusterTopologyRefreshOptions.RefreshTrigger.PERSISTENT_RECONNECTS)
.adaptiveRefreshTriggersTimeout(Duration.ofSeconds(adaptiveRefreshTriggersTimeout))
// 开启定时刷新
.enablePeriodicRefresh(Duration.ofSeconds(enablePeriodicRefresh))
.build()
;
return config
.clientOptions(ClusterClientOptions.builder().topologyRefreshOptions(topologyRefreshOptions).build())
.build();
}
登录 后才可以发表评论