2016-08-18 2 views
1

Ich habe eine Spring-Boot-Anwendung, die Millionen von Schlüsselwertpaaren nehmen und in Redis einfügen muss.Redis MSET mit TTL im Frühjahr RedisTemplate

Momentan verwende ich die multiSet Methode 1.000 Schlüsselwertpaare gleichzeitig.

@Autowired 
private final StringRedisTemplate template; 

... 

Map<String, String> keyValuePairs = new HashMap<>(); 
template.opsForValue().multiSet(keyValuePairs); 

Allerdings müssen wir auch ein TTL für jedes Paar setzen. Es scheint keinen Weg zu geben, dies mit multiSet zu tun. Es gibt einen Weg mit set, aber das müsste millionenfach aufgerufen werden, also möglicherweise nicht effizient.

// For each key value pair 
template.opsForValue().set(key, value, timeout, unit); 

Kennt jemand eine Möglichkeit, dies zu tun oder die set in einer performanten Weise mit?

Dank

Antwort

1

Pipelining Ihr Problem lösen sollte; Sie erstellen eine Pipeline, füllen sie mit allen Befehlen aus, die Sie ausführen möchten, und senden Sie diese anschließend an redis. Wenn Sie SET mit EX verwenden, sollten Sie in der Lage sein, 10.000 oder mehr gleichzeitig zu senden.

+3

FWIW, hier ist der Link zur Funktionsdokumentation [Spring Data Redis Pipelining] (http://docs.spring.io/spring-data/redis/docs/current/reference/html/#pipeline) – mp911de