当前位置: 首页 > 知识库问答 >
问题:

redisSpring靴

胡修伟
2023-03-14

我使用spring boot和redis进行缓存。我可以使用@cacheable(key=“{#input,#page,#size}”,value=“on_test”)缓存从数据库(oracle)获取的数据。当我尝试用redisTemplate从键(“on_test::0,0,10”)获取数据时,结果是0为什么??

Redis配置:

@Configuration
public class RedisConfig {

    @Bean
    JedisConnectionFactory jedisConnectionFactory() {
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration("localhost", 6379);
        redisStandaloneConfiguration.setPassword(RedisPassword.of("admin@123"));
        return new JedisConnectionFactory(redisStandaloneConfiguration);
    }

    @Bean
    public RedisTemplate<String,Objects> redisTemplate() {
        RedisTemplate<String,Objects> template = new RedisTemplate<>();
        template.setStringSerializer(new StringRedisSerializer());
        template.setValueSerializer(new StringRedisSerializer());
        template.setConnectionFactory(jedisConnectionFactory());
        return template;
    }

//service

 @Override
    @Cacheable(key = "{#input,#page,#size}",value = "on_test")
    public Page<?> getAllByZikaConfirmedClinicIs(Integer input,int page,int size) {

        try {
            Pageable newPage = PageRequest.of(page, size);
            String fromCache = controlledCacheService.getFromCache();
            if (fromCache == null && input!=null) {
                log.info("cache is empty lets initials it!!!");
                Page<DataSet> all = dataSetRepository.getAllByZikaConfirmedClinicIs(input,newPage);

                List<DataSet> d = redisTemplate.opsForHash().values("on_test::0,0,10");
                System.out.print(d);
                return all;
            }
            return null;

共有1个答案

雷骁
2023-03-14

使用@cacheable的全部意义在于,您不需要直接使用redistemplate。您只需调用getAllByZikaConfirmedClinicis()(从定义它的类之外),Spring将首先自动检查缓存的结果是否可用,并返回该结果,而不是调用函数。

如果这不起作用,您是否用@enablechaching注释了某个Spring Boot配置类以启用缓存?

您可能还需要在application.properties中设置Spring.cache.type=Redis,或者在application.yml中设置Spring.cache.type:Redis,以确保Spring使用的是Redis,而不是其他缓存提供程序。

 类似资料:
  • 我在SpringCloudAPI网关中使用redis实现了ratelimit。下面是: 我通过postman调用了GETAPI并检查了响应头。 费率限制不起作用。为什么我得到负值的?这是什么意思?我要怎么修?

  • 问题内容: 我有一个简单的服务在调用数据库的端口上暴露的容器中运行。 当我击中我回来 当我直接在浏览器中点击它时,它的工作就很好。但是,当我尝试使用它时,我就变得正常了。 这是我的春季启动服务: 这是我的: 但我仍然收到此错误: 我曾尝试这种通过添加到方法和我在类级别都试过了。我也查看了此内容,因为我在port上运行了UI 。但是那个联系不是特定于春天的。 编辑 添加我的请求标头: 网络标签(Ch

  • 我正在使用keycloak来保护我的rest服务。我引用的是这里给出的教程。我创建了其余部分和前端。现在,当我在后端添加keycloak时,当我的前端调用api时,我会得到CORS错误。 我调用的示例REST API 前端keycloak.json属性包括 我得到的CORS错误

  • 一定有一些方法来使用执行器的endpoint,但我不能电线他们。 我有一个JavaConfig类,如下所示 但此配置在部署过程中引发错误。 没有Spring Boot应用程序,这种布线可以完成吗?

  • 我想在Spring引导中使用hibernate拦截器,以便在提交事务后使用方法执行某些操作。 我遵循如何在Spring Boot中使用Spring管理的Hibernate拦截器进行配置(我只是在中添加) 拦截器可以工作,但当我尝试在方法中获取事务状态时,仍然存在问题,它总是(我希望它可以): 我试着调试它,发现在调用之前, 在扩展了,方法调用方法,该方法调用以设置事务状态: 有人能帮我解决这个问题

  • 有一个简单的代理: 预过滤器: 和属性: 总的来说,一切正常。 但是代理发送的网页具有以下链接 必须采用如下形式: 如何配置服务器以发送正确的链接? 案例: 1.直接从Internet访问myserver时,例如: 服务器发送带有如下链接的页面: 2.从Internet访问代理时,如: 代理服务器发送带有以下链接的页面: