Springboot集成Redis做数据库缓存(原生版)

Springboot集成Redis做数据库缓存(原生版)

redis做缓存简单来说就是:系统把表中经常访问的记录放在了Redis中,然后用户查询时先去查询Redis再去查询MySQL,由于缓存在内存中,所以查询会很快,起到提高性能的作用。

先来看效果吧~

测试案例是把一个查询重复99999次,根据时间来判断性能的好坏。

使用redis时:

不使用redis时:

可以看出使用redis大概快了两秒钟,确实实现了优化。但是redis可以实现的优化效果作者并不是很了解,这里感觉效果不算特别明显,可能和代码有关系。

本文所用的方法是原生的redis操作,没有用到springboot自带的缓存机制(不会,下次再更)。本文代码基于之前的文章进行添加,需要源码的同学可以去原文下载。

maven配置

添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

application配置

redis默认是没有密码的,所以如果你没有设置密码就不需要写密码啦

spring:redis:host: localhost
    port:6379

Java代码

  • 首先在项目文件夹下新建config文件夹(放配置类)和util文件夹(放工具类)

  • 在config文件夹下新建RedisConfig类

@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport{
    @Resource
    private RedisTemplate redisTemplate;

    @Bean
    public RedisTemplate redisTemplateInit(){
        //序列化key的实例化对象
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //序列化value的实例化对象
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return redisTemplate;
    }
}

RedisTemplate是Spring Data Redis提供给用户的最高级的抽象客户端,用户可直接通过RedisTemplate进行多种操作,例如set、get

  • (非必须)可以在config文件夹下新建一个RedisConstant类来存储redis的key

public class RedisConstant{
    public static String USER_KEY="User";
}

到时候使用时直接调用参数即可

  • 在util文件夹下新建RedisUtil类,里面的内容是封装好的redis操作,网上有很多大佬写的工具类,通用性比较高,找到合适的可以直接拿来用

我找到的工具类有很多功能,代码比较长,放在文章的最后

  • 在serverimpl中添加redis的相关代码

主要逻辑是查询前先在redis中寻找有没有要查找的内容,如果没有再去数据库中查找,数据库返回的值顺便存入redis,这样下次再访问时就可以从redis中读到数据了。

@Service
public class UserServiceImpl implements UserService{
    @Autowired
    UserMapper userMapper;

    @Autowired
    RedisUtil redisUtil;
    @Override
    publicList<User> queryAll(){//试图从redis获取
        List<User> users =(List<User>) redisUtil.get(RedisConstant.USER_KEY);//获取失败则去数据库查找
        if(CollectionUtils.isEmpty(users)){
            users=userMapper.queryAll();//返回的数据存入redis
            redisUtil.set(RedisConstant.USER_KEY,users);
        }
        return users;
    }

    @Override
    public void changePassword(String username,String password){//为了防止数据不一致,在数据库数据改变时先清楚之前redis的相关缓存
        redisUtil.del(RedisConstant.USER_KEY);
        userMapper.changePassword(username,password);
        System.out.println("修改成功");
    }
}

代码部分就到此结束了~

运行代码

首先你的电脑要先启动redis服务器端才可以。

redis官方是没有Windows版的,不过已经有大佬开发出了Windows版,安装起来比较简单,没什么需要注意的。大家跟着菜鸟教程先在自己电脑上安装redis吧!

安装好了,有的同学就要问了,redis现在只能在它自己的目录下运行,这可怎么办捏?

很简单,我们把redis的路径添加到环境变量中,就可以在任意位置启动redis了

耗,现在我们打开cmd,输入redis-server,就可以启动redis服务端了(默认的端口6379)

不要关闭服务端界面,再打开一个cmd,输入redis-cli,就可以启动客户端了(默认的端口6379)

现在,来运行我们写好的程序吧

进入localhost:8084,点击获取,我们会从数据库查到数据,同时把数据存入redis,这时我们在redis客户端就可以查到数据了~

如果你想不起来你的键叫什么,又不想去看代码,那么查询现在redis中存有的键:keys *

现在你可以自己写一个测试用例来看看效果如何了。

虽然在大项目中redis肯定不是这么用的,但是对于作者来说,起码算是用起来了,后面再学习正确的简洁的使用方式,学会了来给大噶更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值