栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot+mybatis+redis项目示例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot+mybatis+redis项目示例

注意:

这个是基于IDEA之快速搭建SpringBoot+MyBatis项目开发的
只是本人用来入门的学习示例,开发前请安装redis以及启动redis服务

将redis作为缓存组件在项目中使用

  1. 优先查询redis中是否存在该数据
  2. 如果没有,则访问mysql数据库
  3. 若mysql存在查询的数据,则返回数据,并将数据存放到redis中

目录
  • 一、添加依赖
  • 二、配置文件
  • 三、redis操作方式
    • 3.1 RedisTemplate
      • 3.1.1 redis配置类
      • 3.1.2 使用redis
      • 3.1.3 示例
      • 3.1.4 示例结果:

一、添加依赖

            org.springframework.boot
            spring-boot-starter-redis
            1.3.8.RELEASE

二、配置文件

在application.yml中配置redis的一些基础配置

# redis 配置
redis :
  host : 127.0.0.1
  port : 6379
  pool :
    max-active: 100
    max-idle: 10
    max-wait: 100000
  timeout: 0
三、redis操作方式

可以通过RedisTemplate、JedisPool和Jedis操作redis。

3.1 RedisTemplate

SpringBoot为我们操作Redis提供了两个API:

  1. StringRedisTemplate(默认采用的是StringRedisSerializer序列化策略)、对key value都是字符串的数据进行操作
  2. RedisTemplate(默认采用的是JdkSerializationRedisSerializer序列化策略),value可以放对象。

本质上StringRedisTemplate继承的是RedisTemplate

3.1.1 redis配置类

创建配置类用于处理序列化,同时对实体类进行序列化(即实现Serializable 接口)

  1. 什么是序列化?
    将 Java 对象转换成字节流的过程。
  2. 为什么要进行序列化?
    Java 对象需要在网络上传输 或者 持久化存储到文件中时,就需要对 Java 对象进行序列化处理
  3. 实现Serializable接口有什么意义?
    这个接口没有需要实现的方法。实现 Serializable 接口是为了告诉 jvm 这个类的对象可以被序列化。
@Configuration
@AutoConfigureAfter(RedisAutoConfiguration.class)
public class RedisCacheAutoConfiguration {

    public RedisTemplate redisCacheTemplate(LettuceConnectionFactory redisConnectionFactory){
        RedisTemplate template = new RedisTemplate<>();
        //key序列化方式
        template.setKeySerializer(new StringRedisSerializer());
        //value序列化
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        //value hashmap序列化
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }
}
3.1.2 使用redis

StringRedisTemplate和RedisTemplate提供了下面几种访问数据的方法

方法描述
opsForValue()操作只有简单属性的数据
opsForList()操作含有list的数据
opsForSet()操作含有set的数据
opsForZSet()操作含有ZSet的数据
opsForHash()操作含有hash的数据

访问数据后,可以对对应数据使用redis的操作方法,具体操作方法可以看这个Redis入门(一)

3.1.3 示例

根据id查询用户数据

  1. 先到redis中查询时,有则返回用户list,然后再根据id过滤,存在数据则返回,否则进行下一步
  2. 前往数据库中根据用户id查询数据,无则返回空,有则返回数据,并存放到redis中
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    RedisTemplate redisTemplate;//专门操作key-value都是对象的


    @Autowired
    private UserDao userDao;

    @Override
    public String selectById(String id){
        List userBeans =redisTemplate.opsForList().range("redis_user",0,-1);
        if(userBeans.size()>0){
            System.out.println("redis有数据");
            userBeans = userBeans.stream().filter(u->id.equals(u.getId())).collect(Collectors.toList());
            if(userBeans.size()>0){
                return userBeans.get(0).toString();
            }
        }
        System.out.println("redis未找到数据,查询数据库");
        //查询数据库
        UserBean userBean = userDao.getUserById(id);
        if(userBean!=null){
            redisTemplate.opsForList().rightPush("redis_user",userBean);
            return userBean.toString();
        }
        return "当前无该用户";
    }

}
3.1.4 示例结果:

输入:
查询id为admin的用户

第一次查询时:


第二次查询:


其余redis的操作api等以后学到再补充。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/458945.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号