代码拉取完成,页面将自动刷新
公司标准使用Cluster Redis模式,当前组件用于同一封装及优化客户端参数,提供常用工具服务类,简化业务端使用。
关于Redis的集群搭建及使用,请详见官方
<dependency>
<artifactId>free-bsf-redis</artifactId>
<groupId>com.free.bsf</groupId>
<version>1.7.1-SNAPSHOT</version>
</dependency>
#bsf redis是否开启支持
bsf.redis.enabled = false
#key支持spel表达式,timeout 单位为秒
@RedisCache(key = "'user-'+#userId", timeout = 60)
public User callComplex(long userId) {
return new User(userId, "hello: " + System.currentTimeMillis(), Arrays.asList(new User.Job(userId + "001", "haha")));
}
public List<User> callback(long userId) {
List<User> list = redisProvider.cache("user-" + userId, 60, () -> Arrays.asList(new User(userId, "hello: " + userId, Arrays.asList(new User.Job(userId + "001", "haha")))), new TypeReference<List<User>>() {
}.getType());
System.out.println(list);
return list;
}
//加锁,如果冲突,则一直等待
redisProvider.lock(key, () -> {
try {
callable.call();
} catch (Exception e) {
e.printStackTrace();
}
});
//尝试加锁,不行直接放弃
boolean result = redisProvider.tryLock(key, () -> {
try {
callable.call();
} catch (Exception e) {
e.printStackTrace();
}
});
通过分布式锁实现领导者选举算法,使用时建议阅读代码,理解原理。
RedisLeaderElection leaderElection = new RedisLeaderElection();
//异步通知进行选举
leaderElection.doElection(task);
//异步监听器
leaderElection.getListeners().add((name,isMaster)->{
if(isMaster){
System.out.println(threadName+ "【主节点】:" + isMaster);
}else{
System.out.println(threadName+ "【从节点】:" + isMaster);
}
});
//退出选举
leaderElection.exitElection();
//当前是否是主节点
leaderElection.isMaster();
val redis = ContextUtils.getBean(RedisProvider.class,false);
if (redis.limit("测试限流", 1, 10,RedisLimitType.Count)) {
//正常访问
} else {
//已限流
}
val jRedis = new Jedis({IP},6379);
val redis = RedisLimitFactory.create(jRedis,RedisLimitType.Slide);
if (redis.visit("测试限流", 1, 10)) {
//正常访问
} else {
//已限流
}
注意:计数和滑动窗口支持集群模式,令牌桶不支持集群模式。
标准Api接口文档
使用示范如下:
@Autowired
private RedisProvider redisProvider;
/**
* 获取值
*/
public String get(String key) {
return redisProvider.get(key);
}
/**
* 设置键值
*/
public void set(String key, String value, int timeout) {
redisProvider.set(key, value, timeout);
}
#集群模式客户端
val client = (JedisCluster)RedisProvider.getClient();
#单机模式客户端
val client = (Jedis)RedisProvider.getClient();
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。