diff --git a/src/main/java/org/redis/Main.java b/src/main/java/org/redis/Main.java index 68b3db6..5c2bae1 100644 --- a/src/main/java/org/redis/Main.java +++ b/src/main/java/org/redis/Main.java @@ -1,7 +1,20 @@ package org.redis; +import redis.clients.jedis.Jedis; + +import java.util.Map; + public class Main { public static void main(String[] args) { - System.out.println("Hello world!"); + Jedis jedis = new Jedis("localhost", 6379); + Map mapRedis = new RedisMap(jedis); + + mapRedis.put("1", "Polina"); + mapRedis.put("2", "Lina"); + mapRedis.put("3", "Alina"); + mapRedis.put("4", "Karolina"); + System.out.println(mapRedis.get("4")); + + System.out.println(mapRedis.containsKey("9")); } } \ No newline at end of file diff --git a/src/main/java/org/redis/RedisMap.java b/src/main/java/org/redis/RedisMap.java new file mode 100644 index 0000000..f6e0e91 --- /dev/null +++ b/src/main/java/org/redis/RedisMap.java @@ -0,0 +1,92 @@ +package org.redis; + +import redis.clients.jedis.Jedis; + +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class RedisMap implements Map { + private final Jedis jedis; + + public RedisMap(Jedis jedis) { + this.jedis = jedis; + } + + @Override + public int size() { + return (int) jedis.dbSize(); + } + + @Override + public boolean isEmpty() { + return size() == 0; + } + + @Override + public boolean containsKey(Object key) { + return jedis.exists((String) key); + } + + @Override + public boolean containsValue(Object value) { + return jedis.keys("*").stream() + .anyMatch(key -> value.equals(jedis.get(key))); + } + + @Override + public String get(Object key) { + return jedis.get((String) key); + } + + @Override + public String put(String key, String value) { + return jedis.set(key, value); + } + + @Override + public String remove(Object key) { + String value = get(key); + jedis.del((String) key); + return value; + } + + @Override + public void putAll(Map m) { + for (Entry entry : m.entrySet()) { + put(entry.getKey(), entry.getValue()); + } + } + + @Override + public void clear() { + jedis.flushDB(); + } + + @Override + public Set keySet() { + return jedis.keys("*"); + } + + @Override + public Collection values() { + List values = new ArrayList<>(); + for (String key : jedis.keys("*")) { + values.add(jedis.get(key)); + } + return values; + } + + @Override + public Set> entrySet() { + Set> entrySet = new HashSet<>(); + for (String key : jedis.keys("*")) { + entrySet.add(new AbstractMap.SimpleEntry<>(key, jedis.get(key))); + } + return entrySet; + } +} diff --git a/src/test/java/RedisMapTest.java b/src/test/java/RedisMapTest.java new file mode 100644 index 0000000..db3461a --- /dev/null +++ b/src/test/java/RedisMapTest.java @@ -0,0 +1,72 @@ +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.redis.RedisMap; +import redis.clients.jedis.Jedis; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class RedisMapTest { + private Jedis jedis; + private RedisMap redisMap; + + @BeforeEach + void setUp() { + jedis = new Jedis("localhost", 6379); + redisMap = new RedisMap(jedis); + jedis.flushDB(); + } + + @AfterEach + void tearDown() { + jedis.close(); + } + + @Test + void testPutAndGet() { + redisMap.put("key1", "value1"); + assertEquals("value1", redisMap.get("key1")); + } + + @Test + void testSizeAndIsEmpty() { + assertTrue(redisMap.isEmpty()); + redisMap.put("key1", "value1"); + assertFalse(redisMap.isEmpty()); + assertEquals(1, redisMap.size()); + } + + @Test + void testContainsKey() { + redisMap.put("key1", "value1"); + assertTrue(redisMap.containsKey("key1")); + assertFalse(redisMap.containsKey("key2")); + } + + @Test + void testRemove() { + redisMap.put("key1", "value1"); + assertEquals("value1", redisMap.remove("key1")); + assertNull(redisMap.get("key1")); + } + + @Test + void testClear() { + redisMap.put("key1", "value1"); + assertEquals(1, jedis.keys("*").size()); + redisMap.clear(); + assertEquals(0,jedis.keys("*").size()); + } + + @Test + void testPutAll(){ + redisMap.putAll(Map.of("key1", "value1","key2","value2")); + assertEquals("value1", redisMap.get("key1")); + assertEquals("value2", redisMap.get("key2")); + } +}