Redis最简单的实践---建立缓存

建立最基础缓存

本文仅示例展示最基本建立缓存的方式,其他一概不论哦。至于缓存更新策略,甚至是分布式缓存建立,更不会涉及其他穿透或是雪崩等问题。

仅仅是博主的一次小实践,其他问题以后慢慢更新吧

如果你也想揭开redis神秘的面纱,就跟着步骤一起敲起来吧

项目准备


  • Maven项目管理
  • Springboot
  • Mybatis-plus


1.导入依赖

导入spring和redis整合的依赖

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

1.经典POJO--User类

大家是不是老生常谈了,对于经典拥有姓名和年龄的实体类User。当然对应数据库中也要建立好相关映射嗷~这里采用MP的@TableName注解完成映射,省去写xml映射文件的步骤了。

@Data
@TableName("user")
public class User {

    private Integer id;

    private String name;

    private Integer age;
}

 再往数据库里手动来点小数据吧

 

2.修改Springboot项目配置文件

这个没啥好说的,我们在application.yml或者是application.properties中修改项目配置,得把redis的基础设置添加进去。

spring:
  #mysql数据库链接配置
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/csdn?useUnicode=true&characterEncoding=utf8&useSSL=false
    username: root
    password: 123456
  redis:
    host: 127.0.0.1  #redis安装的服务器地址,这里因为是本机就是127.0.0.1
    port: 6385    #redis端口号
    password: Re45@6   #redis密码
    database: 0    #选择数据库

3.模拟正常三层架构查询用户信息

Dao层:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cn.shydemo.pojo.User;

public interface UserDao extends BaseMapper<User> {
}

Service:

import com.baomidou.mybatisplus.extension.service.IService;
import com.cn.shydemo.pojo.User;

import java.util.List;

public interface IUserService extends IService<User> {

    /**
     * 获取用户列表
     * @return
     */
    List<User> selectUserList();
}
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cn.shydemo.dao.UserDao;
import com.cn.shydemo.pojo.User;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl extends ServiceImpl<UserDao, User> implements IUserService {
    @Override
    public List<User> selectUserList() {
        //采用Mybatis-plus封装好的方法直接获取列表
        List<User> users = query().list();
        return users;
    }
}

Controller:

import com.cn.shydemo.pojo.User;
import com.cn.shydemo.service.user.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class UserController {

    @Autowired
    private IUserService userService;

    @GetMapping("/get_user_list")
    public List<User> selectUserList(){
        return userService.selectUserList();
    }
}

----------------------------------------------------------直接开弄--------------------------------------------------------

 确实查到了。再来看控制台。

因为此前调整过打印sql的配置,所以控制台也是打印了sql。此时说明该访问是直接访问数据库的,并没有经过缓存。

4.改进方法,将查到的列表放进缓存

4.1 修改查询方法,增加存入redis逻辑

@Service
public class UserServiceImpl extends ServiceImpl<UserDao, User> implements IUserService {

    @Resource
    private StringRedisTemplate stringRedisTemplate;

    @Override
    public List<User> selectUserList() {
        //首先从缓存获取数据,如果没有再访问数据库
        //这里假设key为users
        String value = stringRedisTemplate.opsForValue().get("users");
        if (StringUtils.isNotBlank(value)){
            //将Json字符串进行反序列化为存放User对象的列表
            JSONArray jsonArray = JSON.parseArray(value);
            //通过fastJson的方法直接将Json数组转换为User对象集合
            List<User> users = jsonArray.toJavaList(User.class);
            return users;
        }
        //采用Mybatis-plus封装好的方法直接获取列表
        List<User> users = query().list();
        //将查到的结果存到redis中
        //先转换成json字符串
        String usersJson = JSON.toJSONString(users);
        stringRedisTemplate.opsForValue().set("users",usersJson);
        return users;
    }
}

 这里直接使用spring整合的关于redis使用-----StringRedisTemplate

方法tips:

根据key取出相应的value

stringRedisTemplate.opsForValue().get("users")

 

设置以String为key和String为value的键值对stringRedisTemplate.opsForValue().set("users",usersJson)

4.2 再次运行程序看看

我们同样看控制台是否打印sql来判断查询有没有直接到数据库

4.2.1 第一次运行

结果:依然200完美运行hhh

 

控制台:

 4.2.2 第二次运行

结果:

 控制台:由于我刚刚clear一下,现在依旧没有sql语句嗷

 不确定的话,我们还可以通过redis可视化界面工具查看下结果

 

 总结

怎么样?是不是很奇妙hhh

以此篇作为笔者redis学习记录的开端篇章吧,一些redis的基础使用和实战应用后续慢慢更新记录吧!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值