Eric Zhao b1f33675c5 Improvements for Redis data source and demo | 6 lat temu | |
---|---|---|
.. | ||
src | 6 lat temu | |
README.md | 6 lat temu | |
pom.xml | 6 lat temu |
Sentinel DataSource Redis provides integration with Redis. The data source leverages Redis pub-sub feature to implement push model (listener).
The data source uses Lettuce as the Redis client internal. Requires JDK 1.8 or later.
NOTE: Currently we do not support Redis Cluster now.
To use Sentinel DataSource Redis, you should add the following dependency:
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-redis</artifactId>
<version>x.y.z</version>
</dependency>
Then you can create an RedisDataSource
and register to rule managers.
For instance:
ReadableDataSource<String, List<FlowRule>> redisDataSource = new RedisDataSource<List<FlowRule>>(redisConnectionConfig, ruleKey, channel, flowConfigParser);
FlowRuleManager.register2Property(redisDataSource.getProperty());
redisConnectionConfig
: use RedisConnectionConfig
class to build your Redis connection configruleKey
: the rule persistence key of a Redis Stringchannel
: the channel to subscribeYou can also create multi data sources to subscribe for different rule type.
Note that the data source first loads initial rules from a Redis String (provided ruleKey
) during initialization.
So for consistency, users should publish the value and save the value to the ruleKey
simultaneously like this (using Redis transaction):
MULTI
SET ruleKey value
PUBLISH channel value
EXEC
An example using Lettuce Redis client:
public <T> void pushRules(List<T> rules, Converter<List<T>, String> encoder) {
StatefulRedisPubSubConnection<String, String> connection = client.connectPubSub();
RedisPubSubCommands<String, String> subCommands = connection.sync();
String value = encoder.convert(rules);
subCommands.multi();
subCommands.set(ruleKey, value);
subCommands.publish(ruleChannel, value);
subCommands.exec();
}
RedisConnectionConfig config = RedisConnectionConfig.builder()
.withHost("localhost")
.withPort(6379)
.withPassword("pwd")
.withDataBase(2)
.build();
RedisConnectionConfig config = RedisConnectionConfig.builder()
.withRedisSentinel("redisSentinelServer1",5000)
.withRedisSentinel("redisSentinelServer2",5001)
.withRedisSentinelMasterId("redisSentinelMasterId").build();