Redis集成搜索功能(简单例子)

本文介绍了如何在Spring Boot应用中集成Redis,通过配置依赖、YAML文件和RedisTemplate,实现在查询固定数据时直接从Redis获取,从而提高查询效率。实现步骤包括添加Spring Data Redis依赖、设置Redis连接配置、调整RedisTemplate并修改Service层实现。最终效果是减少了数据库查询,数据从Redis缓存中读取。
摘要由CSDN通过智能技术生成

Redis集成搜索功能

前言

有时候想着,你要是查询一些固定的数据,是不是能从数据库里面查询一次后,就直接可以从redis里面拿啊?下面就是例子的实现

1.添加依赖

 <!--        Spring data redis 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!--        commons-pool2 对象池依赖-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

2.编写yml文件

 spring:
 	Redis:
      # 超时时间
      timeout: 10000ms
    # 服务器地址
      host: 127.0.0.1
    # 服务器端口
      port: 6379
    # 数据库
      database: 0
      #密码默认为空
      password:
      lettuce:
        pool:
          # 最大连接数,默认8
          max-active: 1024
          # 最大连接阻塞等待时间 ,默认-1
          max-wait: 10000ms
          #最大空闲连接
          max-idle: 200
          #最小空闲连接
          min-idle: 5

3.编写配置文件

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> redistemplate = new RedisTemplate<>();
        // String类型 Key序列器
        redistemplate.setKeySerializer(new StringRedisSerializer());
        //Hash类型 Key序列器
        redistemplate.setHashKeySerializer(new StringRedisSerializer());
        // String类型 value序列器
        redistemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        // Hash类型 value序列器
        redistemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        redistemplate.setConnectionFactory(factory);
        return redistemplate;
    }
}

4.Impl层改写一下

1.以前的Impl层是这样的

	@Override
    public List<MedicineVo> findAllMedicineSort(MedicineSortVo medicineSortVo) {
        return medicineMapper.findAllMedicineSort(medicineSortVo);
    }

2.现在的impl层加了一些redis的东西

 
 	@Autowired
    RedisTemplate redisTemplate;
/**
     * 查询medicine表中(药品类型为***)的所有数据
     * @return 查询的数据
     */
    @Override
    public List<MedicineVo> findAllMedicineSort(MedicineSortVo medicineSortVo) {
        String medicineSort = medicineSortVo.getMedicineSort();
        ValueOperations<String,Object> valueOperations= redisTemplate.opsForValue();
        //从redis获取数据
        List<MedicineVo> medicineVos = (List<MedicineVo>)valueOperations.get("medicinsort" + medicineSort);
        //如果为空,去数据库获取
        if (CollectionUtils.isEmpty(medicineVos)){
            medicineVos = medicineMapper.findAllMedicineSort(medicineSortVo);
            valueOperations.set("medicinsort"+medicineSort,medicineVos);
        }
        return medicineVos;
    }

5.结果为

1.没运行前Redis里面什么都没有

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xrTMkmJp-1613998497416)(Redis集成搜索功能.assets/image-20210222204749459.png)]

2.运行之后
在这里插入图片描述

3.我再运行一次后,我的Mybatis Log打印SQL数据就不打印了,就证明没有从数据库里面再去查询了,而是从Redis里面查询的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值