风暴数据的最佳缓存提供程序

nukf8bse  于 2021-07-15  发布在  Storm
关注(0)|答案(0)|浏览(226)

我们正面临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);
}
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题