RedisMultiDbClientSideCacheTest.java
package redis.clients.jedis.csc;
import io.redis.test.annotations.SinceRedisVersion;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import redis.clients.jedis.*;
import redis.clients.jedis.MultiDbConfig.DatabaseConfig;
import redis.clients.jedis.args.ClientType;
import redis.clients.jedis.params.ClientKillParams;
import redis.clients.jedis.util.RedisVersionCondition;
@SinceRedisVersion(value = "7.4.0", message = "Jedis client-side caching is only supported with Redis 7.4 or later.")
@Tag("integration")
public class RedisMultiDbClientSideCacheTest extends UnifiedJedisClientSideCacheTestBase {
protected static EndpointConfig endpoint;
@RegisterExtension
public static RedisVersionCondition versionCondition = new RedisVersionCondition(
() -> Endpoints.getRedisEndpoint("standalone0"));
@BeforeAll
public static void prepare() {
endpoint = Endpoints.getRedisEndpoint("standalone0");
}
@Override
protected UnifiedJedis createRegularJedis() {
return RedisClient.builder().hostAndPort(endpoint.getHostAndPort())
.clientConfig(endpoint.getClientConfigBuilder().build()).build();
}
@Override
protected MultiDbClient createCachedJedis(CacheConfig cacheConfig) {
DatabaseConfig dbConfig = DatabaseConfig
.builder(endpoint.getHostAndPort(), endpoint.getClientConfigBuilder().build()).build();
MultiDbConfig multiDbConfig = MultiDbConfig.builder().database(dbConfig).build();
return MultiDbClient.builder().multiDbConfig(multiDbConfig)
.clientConfig(endpoint.getClientConfigBuilder().build()).cacheConfig(cacheConfig).build();
}
@Test
public void clearIfOneDiesTest() {
try (MultiDbClient jedis = createCachedJedis(CacheConfig.builder().build())) {
Cache cache = jedis.getCache();
// Create 100 keys
for (int i = 0; i < 100; i++) {
jedis.set("key" + i, "value" + i);
}
assertEquals(0, cache.getSize());
// Get 100 keys into the cache
for (int i = 0; i < 100; i++) {
jedis.get("key" + i);
}
assertEquals(100, cache.getSize());
try (Jedis killer = new Jedis(endpoint.getHostAndPort(),
endpoint.getClientConfigBuilder().serverDefaultProtocol().build())) {
killer.clientKill(ClientKillParams.clientKillParams().type(ClientType.NORMAL)
.skipMe(ClientKillParams.SkipMe.YES));
}
jedis.get("foo");
assertEquals(1, cache.getSize());
}
}
}