现在很多网站需要处理海量的访问请求,如何提升网站的性能成为了一个紧迫的问题。使用缓存技术可以显著地减少对数据库的访问,从而有效提高网站响应速度,降低数据库负载。SpringRedis是一种流行的缓存框架,它提供了丰富的API和配置选项,下面将介绍如何正确配置SpringRedis,帮助你提升网站的性能。
一、安装和配置SpringRedis
1、安装Redis
$ wget http://download.redis.io/releases/redis-5.0.6.tar.gz $ tar xzf redis-5.0.6.tar.gz $ cd redis-5.0.6 $ make $ make install
2、添加SpringRedis依赖
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>2.3.2.RELEASE</version> </dependency>
3、配置RedisTemplate
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
}
二、使用SpringRedis
1、添加缓存注解
@Service
@CacheConfig(cacheNames = "books")
public class BookService {
@Autowired
private BookRepository bookRepository;
@Cacheable
public Book getById(Long id) {
return bookRepository.findById(id).orElse(null);
}
@Cacheable
public Book getByTitle(String title) {
return bookRepository.findByTitle(title).orElse(null);
}
@CachePut(key = "#book.id")
public Book save(Book book) {
bookRepository.save(book);
return book;
}
@CacheEvict(key = "#id")
public void deleteById(Long id) {
bookRepository.deleteById(id);
}
}
2、使用缓存
@Service
public class BookServiceImpl implements BookService {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
private final BookRepository bookRepository;
public BookServiceImpl(BookRepository bookRepository) {
this.bookRepository = bookRepository;
}
public Book getById(Long id) {
String key = "book_" + id;
ValueOperations<String, Object> operations = redisTemplate.opsForValue();
Book book = (Book) operations.get(key);
if (book == null) {
book = bookRepository.findById(id).orElse(null);
if (book != null) {
operations.set(key, book);
}
}
return book;
}
}
三、优化SpringRedis性能
1、缓存预热
public class CacheListener implements ApplicationListener<ContextRefreshedEvent> {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
ValueOperations<String, Object> operations = redisTemplate.opsForValue();
List<Book> books = bookRepository.findAll();
for (Book book : books) {
String key = "book_" + book.getId();
operations.set(key, book);
}
}
}
2、注解优化
@Service
@CacheConfig(cacheNames = "books")
public class BookService {
@Autowired
private BookRepository bookRepository;
@Cacheable(key = "#id", unless="#result == null")
public Book getById(Long id) {
return bookRepository.findById(id).orElse(null);
}
@Cacheable(key = "#title", unless="#result == null")
public Book getByTitle(String title) {
return bookRepository.findByTitle(title).orElse(null);
}
@CachePut(key = "#book.id", condition="#book.price > 0")
public Book save(Book book) {
bookRepository.save(book);
return book;
}
@CacheEvict(key = "#id")
public void deleteById(Long id) {
bookRepository.deleteById(id);
}
}
3、哨兵配置
spring.redis.sentinel.master = mymaster spring.redis.sentinel.nodes = 127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381 spring.redis.sentinel.password = password
四、总结
本文介绍了如何正确配置SpringRedis以及如何使用和优化SpringRedis。通过使用SpringRedis缓存框架,可以有效地提高网站的性能,减少数据库负载。同时,合理的设置缓存注解和缓存策略也可以进一步提高SpringRedis的性能。
原创文章,作者:OQLZJ,如若转载,请注明出处:https://www.506064.com/n/313703.html
微信扫一扫
支付宝扫一扫