From 753a72d89ed6548dd2e1744f2f6d2f1e8706242a Mon Sep 17 00:00:00 2001 From: GeorgyVShefer <156106194+GeorgyVShefer@users.noreply.github.com> Date: Mon, 22 Sep 2025 16:48:30 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D1=87?= =?UTF-8?q?=D0=B5=D1=81=D0=BA=D0=BE=D0=B5=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=202!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/org/redis/Main.java | 1 + src/main/java/org/redis/RedisMap.java | 117 ++++++++++++++++++++++ src/test/java/org/redis/RedisMapTest.java | 57 +++++++++++ 3 files changed, 175 insertions(+) create mode 100644 src/main/java/org/redis/RedisMap.java create mode 100644 src/test/java/org/redis/RedisMapTest.java diff --git a/src/main/java/org/redis/Main.java b/src/main/java/org/redis/Main.java index 68b3db6..f6eb535 100644 --- a/src/main/java/org/redis/Main.java +++ b/src/main/java/org/redis/Main.java @@ -2,6 +2,7 @@ public class Main { public static void main(String[] args) { + System.out.println("Hello world!"); } } \ 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..06d9ece --- /dev/null +++ b/src/main/java/org/redis/RedisMap.java @@ -0,0 +1,117 @@ +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.Objects; +import java.util.Set; + +public class RedisMap implements Map { + + private final Jedis jedis; + + public RedisMap(Jedis jedis) { + + this.jedis = jedis; + } + + @Override + public int size() { + + long size = jedis.dbSize(); + return Math.toIntExact(size); + } + + @Override + public boolean isEmpty() { + + if (size() == 0) { + return true; + } + + return false; + } + + @Override + public boolean containsKey(Object key) { + + return jedis.exists(String.valueOf(key)); + } + + @Override + public boolean containsValue(Object value) { + + for (String k : jedis.keys("*")) { + if (Objects.equals(jedis.get(k), value)) { + return true; + } + } + return false; + } + + @Override + public String get(Object key) { + return jedis.get(String.valueOf(key)); + } + + @Override + public String put(String key, String value) { + + String oldValue = jedis.get(key); + jedis.set(key, value); + return oldValue; + } + + @Override + public String remove(Object key) { + + String oldValue = jedis.get((String) key); + jedis.del(String.valueOf(key)); + return oldValue; + } + + @Override + public void putAll(Map m) { + for (Entry entry : m.entrySet()) { + jedis.set(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 : keySet()) { + values.add(jedis.get(key)); + } + return values; + } + + @Override + public Set> entrySet() { + + Set> entries = new HashSet<>(); + for (String key : keySet()) { + entries.add(new AbstractMap.SimpleEntry<>(key, jedis.get(key))); + } + + return entries; + } +} \ No newline at end of file diff --git a/src/test/java/org/redis/RedisMapTest.java b/src/test/java/org/redis/RedisMapTest.java new file mode 100644 index 0000000..686e9a4 --- /dev/null +++ b/src/test/java/org/redis/RedisMapTest.java @@ -0,0 +1,57 @@ +package org.redis; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import redis.clients.jedis.Jedis; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class RedisMapTest { + + private static Jedis jedis; + private static Map redisMap; + + @BeforeAll + static void setup() { + jedis = new Jedis("localhost", 6379); + redisMap = new RedisMap(jedis); + redisMap.clear(); + } + + @AfterEach + void cleanup() { + redisMap.clear(); + } + + @Test + void testPutAndGet() { + redisMap.put("key1", "value1"); + assertEquals("value1", redisMap.get("key1")); + } + + @Test + void testRemove() { + redisMap.put("key1", "value1"); + assertEquals("value1", redisMap.remove("key1")); + assertNull(redisMap.get("key1")); + } + + @Test + void testContainsKeyAndValue() { + redisMap.put("key1", "value1"); + assertTrue(redisMap.containsKey("key1")); + assertTrue(redisMap.containsValue("value1")); + } + + @Test + void testSizeAndClear() { + redisMap.put("a", "1"); + redisMap.put("b", "2"); + assertEquals(2, redisMap.size()); + redisMap.clear(); + assertTrue(redisMap.isEmpty()); + } +} \ No newline at end of file