🔹 What is Spring Data Redis?
Spring Data Redis provides easy integration with Redis, an in-memory key-value store. It abstracts the low-level Redis API and gives you repositories, templates, pub/sub messaging, and caching support.
🔹 Maven Dependency
Add this to your pom.xml
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId> <!-- Lettuce is the default Redis client -->
</dependency>
🔹 Configuration
application.yml
spring:
redis:
host: localhost
port: 6379
password: yourpassword # optional
Optionally, configure RedisTemplate
:
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return template;
}
}
🔹 Example 1: Using RedisTemplate
@Service
public class RedisExampleService {
private final RedisTemplate<String, Object> redisTemplate;
public RedisExampleService(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
public void saveData(String key, String value) {
redisTemplate.opsForValue().set(key, value, Duration.ofMinutes(10)); // expires in 10 min
}
public String getData(String key) {
return (String) redisTemplate.opsForValue().get(key);
}
public void deleteData(String key) {
redisTemplate.delete(key);
}
}
🔹 Example 2: Using Spring Data Redis Repositories
Define an entity with @RedisHash
:
@RedisHash("User")
public class User {
@Id
private String id;
private String name;
private int age;
// getters, setters, constructors
}
Repository:
public interface UserRepository extends CrudRepository<User, String> {
List<User> findByName(String name);
}
Usage:
@Service
public class UserService {
private final UserRepository repository;
public UserService(UserRepository repository) {
this.repository = repository;
}
public void saveUser() {
User user = new User("1", "Alice", 25);
repository.save(user);
}
public Optional<User> getUser(String id) {
return repository.findById(id);
}
}
🔹 Example 3: Redis Pub/Sub
Publisher:
@Service
public class MessagePublisher {
private final RedisTemplate<String, Object> redisTemplate;
public MessagePublisher(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
public void publish(String channel, String message) {
redisTemplate.convertAndSend(channel, message);
}
}
Subscriber:
@Component
public class MessageSubscriber implements MessageListener {
@Override
public void onMessage(Message message, byte[] pattern) {
System.out.println("Received: " + new String(message.getBody()));
}
}
Config:
@Configuration
public class RedisMessageConfig {
@Bean
public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.addMessageListener(listenerAdapter, new PatternTopic("myChannel"));
return container;
}
@Bean
public MessageListenerAdapter listenerAdapter(MessageSubscriber subscriber) {
return new MessageListenerAdapter(subscriber);
}
}
🔹 Example 4: Redis as Cache
Enable caching:
@SpringBootApplication
@EnableCaching
public class RedisCacheApp {
public static void main(String[] args) {
SpringApplication.run(RedisCacheApp.class, args);
}
}
Usage:
@Service
public class ProductService {
@Cacheable(value = "products", key = "#id")
public String getProductById(String id) {
simulateSlowService();
return "Product " + id;
}
@CacheEvict(value = "products", key = "#id")
public void deleteProduct(String id) {
System.out.println("Deleted from cache: " + id);
}
private void simulateSlowService() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
✅ With this setup, you can use Redis for:
- Key-value storage (
RedisTemplate
) - Repositories & entities (
@RedisHash
) - Pub/Sub messaging
- Caching (
@Cacheable
,@CacheEvict
)