如何正確配置SpringRedis,提升網站性能

現在很多網站需要處理海量的訪問請求,如何提升網站的性能成為了一個緊迫的問題。使用緩存技術可以顯著地減少對資料庫的訪問,從而有效提高網站響應速度,降低資料庫負載。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/zh-tw/n/313703.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
OQLZJ的頭像OQLZJ
上一篇 2025-01-07 09:44
下一篇 2025-01-07 09:44

相關推薦

  • Python爬蟲可以爬哪些網站

    Python是被廣泛運用於數據處理和分析領域的編程語言之一。它具有易用性、靈活性和成本效益高等特點,因此越來越多的人開始使用它進行網站爬取。本文將從多個方面詳細闡述,Python爬…

    編程 2025-04-29
  • 網站為什麼會被黑客攻擊?

    黑客攻擊是指利用計算機技術手段,入侵或者破壞計算機信息系統的一種行為。網站被黑客攻擊是常見的安全隱患之一,那麼,為什麼網站會被黑客攻擊呢?本文將從不同角度分析這個問題,並且提出相應…

    編程 2025-04-29
  • 如何優化 Git 性能和重構

    本文將提供一些有用的提示和技巧來優化 Git 性能並重構代碼。Git 是一個非常流行的版本控制系統,但是在處理大型代碼倉庫時可能會有一些性能問題。如果你正在處理這樣的問題,本文將會…

    編程 2025-04-29
  • 如何用Python訪問網站

    本文將從以下幾個方面介紹如何使用Python訪問網站:網路請求、POST請求、用戶代理、Cookie、代理IP、API請求。 一、網路請求 Python有三種主流的網路請求庫:ur…

    編程 2025-04-29
  • 如何將Python開發的網站變成APP

    要將Python開發的網站變成APP,可以通過Python的Web框架或者APP框架,將網站封裝為APP的形式。常見的方法有: 一、使用Python的Web框架Django Dja…

    編程 2025-04-28
  • 如何在伺服器上運行網站

    想要在伺服器上運行網站,需要按照以下步驟進行配置和部署。 一、選擇伺服器和域名 想要在伺服器上運行網站,首先需要選擇一台雲伺服器或者自己搭建的伺服器。雲伺服器會提供更好的穩定性和可…

    編程 2025-04-28
  • 使用@Transactional和分表優化數據交易系統的性能和可靠性

    本文將詳細介紹如何使用@Transactional和分表技術來優化數據交易系統的性能和可靠性。 一、@Transactional的作用 @Transactional是Spring框…

    編程 2025-04-28
  • Python網站源碼解析

    本文將從多個方面對Python網站源碼進行詳細解析,包括搭建網站、數據處理、安全性等內容。 一、搭建網站 Python是一種高級編程語言,適用於多種領域。它也可以用於搭建網站。最常…

    編程 2025-04-28
  • 如何正確複製聖誕樹程序代碼?

    複製聖誕樹程序代碼是一項基本的技能,無論是初學者還是前端開發專業人員都需要掌握。本文將從多個方面詳細闡述如何正確地複製聖誕樹程序代碼,讓你能夠安心地應對代碼複製難題。 一、代碼複製…

    編程 2025-04-28
  • Python性能優化方案

    本文將從多個方面介紹Python性能優化方案,並提供相應的示例代碼。 一、使用Cython擴展 Cython是一個Python編譯器,可以將Python代碼轉化為C代碼,可顯著提高…

    編程 2025-04-28

發表回復

登錄後才能評論