1.4K Star 5K Fork 1.7K

GVP红薯 / J2Cache

 / 详情

springboot2.1.3+j2cache2.7.7-release+redis3.2.3,redis三主三从数据取值问题

待办的
创建于  
2019-12-27 12:02

springboot2.1.3+j2cache2.7.7-release+redis3.2.3,使用lettuce管理redis三主三从时,数据取值有可能取不到,几率较高。
配置如下:
caffeine.properties:
#########################################

Caffeine configuration

[name] = size, TTL[s|m|h|d] Must be bigger than session time

#########################################

default = 1000, 30d

J2Cache configuration:
#########################################

Cache Broadcast Method

values:

jgroups -> use jgroups's multicast

redis -> use redis publish/subscribe mechanism

none -> don't notify the other nodes in cluster

xx.xxxx.xxxx.Xxxxx your own cache broadcast policy classname that implement net.oschina.j2cache.ClusterPolicy

#########################################

#j2cache.broadcast = com.xyl.core.j2cache.cache.support.redis.SpringRedisPubSubPolicy
j2cache.broadcast = redis
#组播的通道名称
jgroups.channel.name = j2cache
jgroups.configXml = /network.xml

#########################################

Level 1&2 provider

values:

none -> disable this level cache

ehcache -> use ehcache2 as level 1 cache

ehcache3 -> use ehcache3 as level 1 cache

caffeine -> use caffeine as level 1 cache(only in memory)

redis -> use redis as level 2 cache (using jedis)

lettuce -> use redis as level 2 cache (using lettuce)

readonly-redis -> use redis as level 2 cache ,but never write data to it. if use this provider, you must uncomment j2cache.L2.config_section to make the redis configurations available.

[classname] -> use custom provider

#########################################

j2cache.L1.provider_class = caffeine
j2cache.L2.provider_class = lettuce
#j2cache.L2.provider_class = com.xyl.core.j2cache.cache.support.redis.SpringRedisProvider

When L2 provider isn't redis, using L2.config_section = redis to read redis configurations

j2cache.L2.config_section = redis

Enable/Disable ttl in redis cache data (if disabled, the object in redis will never expire)

j2cache.sync_ttl_to_redis = true

Whether to cache null objects by default

j2cache.default_cache_null_object = true

#########################################

Cache Serialization Provider

values:

fst -> fast-serialization

kyro -> kyro

java -> java standard

[classname implements Serializer]

#########################################

j2cache.serialization = fst

#########################################

Ehcache configuration

#########################################

#ehcache.configXml = /ehcache.xml

#ehcache3.configXml = /ehcache3.xml
#ehcache3.defaultHeapSize = 1000

#########################################

Caffeine configuration

caffeine.region.[name] = size, xxxx[s|m|h|d]

#########################################
caffeine.properties = /caffeine.properties

#########################################

Redis connection configuration

#########################################

#########################################

Redis Cluster Mode

single -> single redis server

sentinel -> master-slaves servers

cluster -> cluster servers (数据库配置无效,使用 database = 0)

sharded -> sharded servers (密码、数据库必须在 hosts 中指定,且连接池配置无效 ; redis://user:password@127.0.0.1:6379/0)

#########################################

#redis.mode = single
redis.mode = cluster

#redis storage mode (generic|hash)
redis.storage = generic

redis pub/sub channel name

redis.channel = j2cache

redis pub/sub server (using redis.hosts when empty)

redis.channel.host =

#cluster name just for sharded
redis.cluster_name = j2cache

redis cache namespace optional, default[j2cache]

redis.namespace =

connection

redis.hosts =三主三从的ip
redis.password = aaa
redis.database = 0

redis pool properties

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

评论 (2)

逸海 创建了任务

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();
}

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(1)
Java
1
https://gitee.com/ld/J2Cache.git
git@gitee.com:ld/J2Cache.git
ld
J2Cache
J2Cache

搜索帮助