@Override protected void updateStatesToRedis(RedisState redisState, Map<String, String> keyToValue) { Jedis jedis = null; try { jedis = redisState.getJedis(); Pipeline pipeline = jedis.pipelined(); for (Map.Entry<String, String> kvEntry : keyToValue.entrySet()) { String key = kvEntry.getKey(); String value = kvEntry.getValue(); switch (dataType) { case STRING: if (this.expireIntervalSec > 0) { pipeline.setex(key, expireIntervalSec, value); } else { pipeline.set(key, value); } break; case HASH: pipeline.hset(additionalKey, key, value); break; default: throw new IllegalArgumentException("Cannot process such data type: " + dataType); } } // send expire command for hash only once // it expires key itself entirely, so use it with caution if (dataType == RedisDataTypeDescription.RedisDataType.HASH && this.expireIntervalSec > 0) { pipeline.expire(additionalKey, expireIntervalSec); } pipeline.sync(); } finally { if (jedis != null) { redisState.returnJedis(jedis); } } }