diff --git a/src/main/java/org/springframework/data/redis/repository/RedisRepository.java b/src/main/java/org/springframework/data/redis/repository/RedisRepository.java
new file mode 100644
index 0000000000..7575e02f8f
--- /dev/null
+++ b/src/main/java/org/springframework/data/redis/repository/RedisRepository.java
@@ -0,0 +1,12 @@
+package org.springframework.data.redis.repository;
+
+import org.springframework.data.keyvalue.repository.KeyValueRepository;
+
+/**
+ * Redis specific {@link org.springframework.data.repository.Repository} interface.
+ *
+ * @author Junghoon Ban
+ * @param <T>
+ * @param <ID>
+ */
+public interface RedisRepository<T, ID> extends KeyValueRepository<T, ID> {}
diff --git a/src/main/java/org/springframework/data/redis/repository/configuration/RedisRepositoryConfigurationExtension.java b/src/main/java/org/springframework/data/redis/repository/configuration/RedisRepositoryConfigurationExtension.java
index 1fea6ba25b..ca719bf231 100644
--- a/src/main/java/org/springframework/data/redis/repository/configuration/RedisRepositoryConfigurationExtension.java
+++ b/src/main/java/org/springframework/data/redis/repository/configuration/RedisRepositoryConfigurationExtension.java
@@ -19,12 +19,14 @@
 import java.util.Collection;
 import java.util.Collections;
 
+import java.util.List;
 import org.springframework.beans.factory.config.BeanDefinition;
 import org.springframework.beans.factory.support.AbstractBeanDefinition;
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
 import org.springframework.beans.factory.support.BeanDefinitionRegistry;
 import org.springframework.beans.factory.support.RootBeanDefinition;
+import org.springframework.data.keyvalue.repository.KeyValueRepository;
 import org.springframework.data.keyvalue.repository.config.KeyValueRepositoryConfigurationExtension;
 import org.springframework.data.redis.core.RedisHash;
 import org.springframework.data.redis.core.RedisKeyValueAdapter;
@@ -35,6 +37,7 @@
 import org.springframework.data.redis.core.convert.MappingRedisConverter;
 import org.springframework.data.redis.core.convert.RedisCustomConversions;
 import org.springframework.data.redis.core.mapping.RedisMappingContext;
+import org.springframework.data.redis.repository.RedisRepository;
 import org.springframework.data.repository.config.RepositoryConfigurationExtension;
 import org.springframework.data.repository.config.RepositoryConfigurationSource;
 import org.springframework.util.StringUtils;
@@ -44,6 +47,7 @@
  *
  * @author Christoph Strobl
  * @author Mark Paluch
+ * @author Junghoon Ban
  * @since 1.7
  */
 public class RedisRepositoryConfigurationExtension extends KeyValueRepositoryConfigurationExtension {
@@ -69,6 +73,11 @@ protected String getDefaultKeyValueTemplateRef() {
 		return "redisKeyValueTemplate";
 	}
 
+	@Override
+	protected Collection<Class<?>> getIdentifyingTypes() {
+		return List.of(RedisRepository.class, KeyValueRepository.class);
+	}
+
 	@Override
 	public void registerBeansForRoot(BeanDefinitionRegistry registry, RepositoryConfigurationSource configuration) {
 
diff --git a/src/main/java/org/springframework/data/redis/repository/support/RedisRepositoryFactory.java b/src/main/java/org/springframework/data/redis/repository/support/RedisRepositoryFactory.java
index 2ce06cbd3d..8d434c1322 100644
--- a/src/main/java/org/springframework/data/redis/repository/support/RedisRepositoryFactory.java
+++ b/src/main/java/org/springframework/data/redis/repository/support/RedisRepositoryFactory.java
@@ -38,6 +38,7 @@
  * @author Christoph Strobl
  * @author Oliver Gierke
  * @author Mark Paluch
+ * @author Junghoon Ban
  * @since 1.7
  */
 public class RedisRepositoryFactory extends KeyValueRepositoryFactory {
@@ -75,6 +76,11 @@ public RedisRepositoryFactory(KeyValueOperations keyValueOperations,
 		this.operations = keyValueOperations;
 	}
 
+	@Override
+	protected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) {
+		return SimpleRedisRepository.class;
+	}
+
 	@Override
 	protected RepositoryFragments getRepositoryFragments(RepositoryMetadata metadata) {
 
diff --git a/src/main/java/org/springframework/data/redis/repository/support/SimpleRedisRepository.java b/src/main/java/org/springframework/data/redis/repository/support/SimpleRedisRepository.java
new file mode 100644
index 0000000000..61e4e57724
--- /dev/null
+++ b/src/main/java/org/springframework/data/redis/repository/support/SimpleRedisRepository.java
@@ -0,0 +1,22 @@
+package org.springframework.data.redis.repository.support;
+
+import org.springframework.data.keyvalue.core.KeyValueOperations;
+import org.springframework.data.keyvalue.repository.support.SimpleKeyValueRepository;
+import org.springframework.data.redis.repository.RedisRepository;
+import org.springframework.data.repository.NoRepositoryBean;
+import org.springframework.data.repository.core.EntityInformation;
+
+/**
+ * Redis specific repository implementation.
+ *
+ * @author Junghoon Ban
+ * @param <T>
+ * @param <ID>
+ */
+@NoRepositoryBean
+public class SimpleRedisRepository<T, ID> extends SimpleKeyValueRepository<T, ID> implements RedisRepository<T, ID> {
+
+	public SimpleRedisRepository(EntityInformation<T, ID> metadata, KeyValueOperations operations) {
+		super(metadata, operations);
+	}
+}
diff --git a/src/test/java/org/springframework/data/redis/repository/configuration/RedisRepositoryConfigurationExtensionUnitTests.java b/src/test/java/org/springframework/data/redis/repository/configuration/RedisRepositoryConfigurationExtensionUnitTests.java
index 34b0efaa78..68e6914d6b 100644
--- a/src/test/java/org/springframework/data/redis/repository/configuration/RedisRepositoryConfigurationExtensionUnitTests.java
+++ b/src/test/java/org/springframework/data/redis/repository/configuration/RedisRepositoryConfigurationExtensionUnitTests.java
@@ -20,7 +20,6 @@
 import java.util.Collection;
 
 import org.junit.jupiter.api.Test;
-
 import org.springframework.beans.factory.support.BeanDefinitionRegistry;
 import org.springframework.beans.factory.support.DefaultListableBeanFactory;
 import org.springframework.beans.factory.support.SimpleBeanDefinitionRegistry;
@@ -33,6 +32,7 @@
 import org.springframework.data.keyvalue.repository.KeyValueRepository;
 import org.springframework.data.redis.core.RedisHash;
 import org.springframework.data.redis.core.RedisKeyValueAdapter.EnableKeyspaceEvents;
+import org.springframework.data.redis.repository.RedisRepository;
 import org.springframework.data.repository.Repository;
 import org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource;
 import org.springframework.data.repository.config.RepositoryConfiguration;
@@ -65,6 +65,12 @@ void isStrictMatchIfRepositoryExtendsStoreSpecificBase() {
 		assertHasRepo(StoreRepository.class, extension.getRepositoryConfigurations(configurationSource, loader, true));
 	}
 
+	@Test // GH-2816
+	void isStrictMatchIfRepositoryExtendsKeyValueSpecificBase() {
+		assertHasRepo(KeyValueSpecificRepository.class,
+				extension.getRepositoryConfigurations(configurationSource, loader, true));
+	}
+
 	@Test // DATAREDIS-425
 	void isNotStrictMatchIfDomainTypeIsNotAnnotatedWithDocument() {
 
@@ -197,5 +203,8 @@ interface SampleRepository extends Repository<Sample, Long> {}
 
 	interface UnannotatedRepository extends Repository<Object, Long> {}
 
-	interface StoreRepository extends KeyValueRepository<Object, Long> {}
+	interface StoreRepository extends RedisRepository<Object, Long> {}
+
+	interface KeyValueSpecificRepository extends KeyValueRepository<Object, Long> {}
+
 }