我们正面临Storm带来的货物问题。我们使用storm状态持久性从内存中获取数据,以填充实时报告。但在重载环境下gc暂停时间较长。因此,我们创建了另一个服务。storm将向维护内存中数据结构的服务发送数据。虽然gc的长暂停时间减少了,但是我们仍然无法扩展以适应更重的负载环境。我尝试在新服务中使用redis缓存。但是在重载下对redis的写操作非常慢。可能是由于它的单线程模型。
有没有人能建议一个有效的缓存机制。我检查了memcached,但它对每个键可以容纳的值的大小有限制。
下面是我尝试的代码更改:
**Pom.xml**
<!-- Spring boot Redis dependency -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
**Bean Configuration**
@Bean
RedisTemplate<String, List<Data>> redisTemplate() {
RedisTemplate<String, List<Data>> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(new JedisConnectionFactory()());
}
**RedisStore abstract class**
public abstract class RedisStore<T extends BaseEvent> implements EventStoreService<Integer, T>{
private ValueOperations<String, List<T>> valOperations;
final String type;
public RedisStore(String type, RedisTemplate<String, List<T>> redisTemplate) {
this.valOperations = redisTemplate.opsForValue();
this.type = type;
}
public void put(Integer id, T elem) {
List<T> existingElems = valOperations.get(getKey(id));
if (null == existingElems) {
existingElems = new ArrayList<>();
}
existingElems.add(elem);
valOperations.set(getKey(id), existingElems);
}
}
暂无答案!
目前还没有任何答案,快来回答吧!