gpt4 book ai didi

spring - 在 Spring Boot 中理解 Redis

转载 作者:可可西里 更新时间:2023-11-01 11:23:19 27 4
gpt4 key购买 nike

我有一个 Spring Boot 应用程序,我需要在应用程序初始化时从表中获取数据。

我有一个包含以下代码的存储库:

@Repository
public interface Bookepository extends JpaRepository<Book, Integer> {

Proveedor findByName(String name);
@Cacheable("books")
List<Proveedor> findAll();
}

然后从我的服务:

@Service 
public class ServiceBooks {

public void findAll(){
booksRepo.findAll();
}
public void findByName(String name){
booksRepo.findByName(name);
}
}

然后我有一个实现 CommandLineRunner 的类:

@Component
public class AppRunner implements CommandLineRunner {
private final BookRepository bookRepository;

public AppRunner(BookRepository bookRepository) {
this.bookRepository = bookRepository;
}

@Override
public void run(String... args) throws Exception {
bookRepository.findAll());
}
}

所以在这里,当应用程序初始化时,它查询 Books 表并缓存结果。在应用程序内部,每次调用 find.all() 时,缓存都在工作,并且我从缓存中获取数据。所以这是我的 2 个问题:

  1. 关于Redis,我没有用Redis,做数据库缓存没有问题。那么,Redis 在哪里适合这种方法呢?我不明白为什么每个人都在缓存工作时使用 Redis 而不需要其他库。

  2. 当我调用 findByName(name) 时,是否有机会对我已经缓存的数据执行该查询?我知道我可以在那个方法上有一个缓存,但缓存会在我每次搜索特定名称时保存数据。如果第一次搜索某个名称,它将转到数据库以获取该值。我不希望那样,我希望 Spring 使用我拥有所有书籍的第一个缓存中的数据执行查询。

最佳答案

问题的答案

  1. Redis 避免了数据库调用,因为它将您的响应存储在内存中。你甚至可以在 Controller 或服务中使用@cacheable。如果你在 Controller 中使用@cacheable,你的请求甚至不会执行 Controller 方法,如果它已经被缓存。

  2. 对于 FindByName,Redis 提供了一种基于键存储数据的好方法。引用链接 Cache Keys .一旦你用Name请求,它会从DB中获取数据,下次你用同名请求时,它会根据key从缓存中获取。回到你的问题,你不应该对你的缓存数据进行搜索,因为缓存非常不稳定,你不能相信缓存中的数据。搜索缓存数据也可能会影响性能,您可能需要编写多行不需要的额外代码。

关于spring - 在 Spring Boot 中理解 Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57381806/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com