BAEL-3613: Reading All Available Redis Keys (#8490)

This commit is contained in:
Tapan Avasthi
2020-01-23 22:00:12 +05:30
committed by Sam Millington
parent f46ea65783
commit 6bca22524a
10 changed files with 537 additions and 1 deletions
@@ -0,0 +1,96 @@
package com.baeldung.redis_scan;
import com.baeldung.redis_scan.client.RedisClient;
import org.junit.*;
import redis.embedded.RedisServer;
import java.io.IOException;
import java.net.ServerSocket;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class NaiveApproachIntegrationTest {
private static RedisServer redisServer;
private static int port;
private static RedisClient redisClient;
@BeforeClass
public static void setUp() throws IOException {
// Take an available port
ServerSocket s = new ServerSocket(0);
port = s.getLocalPort();
s.close();
redisServer = new RedisServer(port);
redisServer.start();
}
@AfterClass
public static void destroy() {
if (redisServer.isActive())
redisServer.stop();
}
@Before
public void init() {
if (!redisServer.isActive()) {
redisServer.start();
}
redisClient = RedisClient.getInstance("127.0.0.1", port);
}
@After
public void flushAll() {
redisClient.flushAll();
}
@Test
public void testKeys() {
HashMap<String, String> keyValues = new HashMap<String, String>();
keyValues.put("balls:cricket", "160");
keyValues.put("balls:football", "450");
keyValues.put("balls:volleyball", "270");
redisClient.mset(keyValues);
Set<String> readKeys = redisClient.keys("ball*");
Assert.assertEquals(keyValues.size(), readKeys.size());
}
@Test
public void testSmembers() {
HashSet<String> setMembers = new HashSet<String>();
setMembers.add("cricket_160");
setMembers.add("football_450");
setMembers.add("volleyball_270");
redisClient.sadd("balls", setMembers.toArray(new String[setMembers.size()]));
Set<String> readSetMembers = redisClient.smembers("balls");
Assert.assertEquals(setMembers.size(), readSetMembers.size());
}
@Test
public void testHgetAll() {
HashMap<String, String> keyValues = new HashMap<String, String>();
keyValues.put("balls:cricket", "160");
keyValues.put("balls:football", "450");
keyValues.put("balls:volleyball", "270");
redisClient.hmset("balls", keyValues);
Map<String, String> readHash = redisClient.hgetAll("balls");
Assert.assertEquals(keyValues.size(), readHash.size());
}
@Test
public void testZRange() {
HashMap<String, Double> scoreMembers = new HashMap<String, Double>();
scoreMembers.put("cricket", (double) 160);
scoreMembers.put("football", (double) 450);
scoreMembers.put("volleyball", (double) 270);
redisClient.zadd("balls", scoreMembers);
Set<String> readSetMembers = redisClient.zrange("balls", 0, -1);
Assert.assertEquals(readSetMembers.size(), scoreMembers.size());
}
}
@@ -0,0 +1,129 @@
package com.baeldung.redis_scan;
import com.baeldung.redis_scan.client.RedisClient;
import com.baeldung.redis_scan.iterator.RedisIterator;
import com.baeldung.redis_scan.strategy.ScanStrategy;
import com.baeldung.redis_scan.strategy.impl.Hscan;
import com.baeldung.redis_scan.strategy.impl.Scan;
import com.baeldung.redis_scan.strategy.impl.Sscan;
import com.baeldung.redis_scan.strategy.impl.Zscan;
import org.junit.*;
import redis.clients.jedis.Tuple;
import redis.embedded.RedisServer;
import java.io.IOException;
import java.net.ServerSocket;
import java.util.*;
public class ScanStrategyIntegrationTest {
private static RedisServer redisServer;
private static int port;
private static RedisClient redisClient;
@BeforeClass
public static void setUp() throws IOException {
// Take an available port
ServerSocket s = new ServerSocket(0);
String ip = "127.0.0.1";
port = s.getLocalPort();
s.close();
redisServer = new RedisServer(port);
redisServer.start();
}
@AfterClass
public static void destroy() {
if (redisServer.isActive())
redisServer.stop();
}
@Before
public void init() {
if (!redisServer.isActive()) {
redisServer.start();
}
redisClient = RedisClient.getInstance("127.0.0.1", port);
}
@After
public void flushAll() {
redisClient.flushAll();
}
@Test
public void testScanStrategy() {
HashMap<String, String> keyValues = new HashMap<String, String>();
keyValues.put("balls:cricket", "160");
keyValues.put("balls:football", "450");
keyValues.put("balls:volleyball", "270");
redisClient.mset(keyValues);
ScanStrategy<String> scanStrategy = new Scan();
int iterationCount = 2;
RedisIterator iterator = redisClient.iterator(iterationCount, "ball*", scanStrategy);
List<String> results = new LinkedList<String>();
while (iterator.hasNext()) {
results.addAll(iterator.next());
}
Assert.assertEquals(keyValues.size(), results.size());
}
@Test
public void testSscanStrategy() {
HashSet<String> setMembers = new HashSet<String>();
setMembers.add("cricket_160");
setMembers.add("football_450");
setMembers.add("volleyball_270");
redisClient.sadd("balls", setMembers.toArray(new String[setMembers.size()]));
Sscan scanStrategy = new Sscan("balls");
int iterationCount = 2;
RedisIterator iterator = redisClient.iterator(iterationCount, "*", scanStrategy);
List<String> results = new LinkedList<String>();
while (iterator.hasNext()) {
results.addAll(iterator.next());
}
Assert.assertEquals(setMembers.size(), results.size());
}
@Test
public void testHscanStrategy() {
HashMap<String, String> hash = new HashMap<String, String>();
hash.put("cricket", "160");
hash.put("football", "450");
hash.put("volleyball", "270");
redisClient.hmset("balls", hash);
Hscan scanStrategy = new Hscan("balls");
int iterationCount = 2;
RedisIterator iterator = redisClient.iterator(iterationCount, "*", scanStrategy);
List<Map.Entry<String, String>> results = new LinkedList<Map.Entry<String, String>>();
while (iterator.hasNext()) {
results.addAll(iterator.next());
}
Assert.assertEquals(hash.size(), results.size());
}
@Test
public void testZscanStrategy() {
HashMap<String, Double> memberScores = new HashMap<String, Double>();
memberScores.put("cricket", (double) 160);
memberScores.put("football", (double) 450);
memberScores.put("volleyball", (double) 270);
redisClient.zadd("balls", memberScores);
Zscan scanStrategy = new Zscan("balls");
int iterationCount = 2;
RedisIterator iterator = redisClient.iterator(iterationCount, "*", scanStrategy);
List<Tuple> results = new LinkedList<Tuple>();
while (iterator.hasNext()) {
results.addAll(iterator.next());
}
Assert.assertEquals(memberScores.size(), results.size());
}
}