SpringBoot整合redis与缓存使用

目录

Redis简介

springboot整合redis

redis的存在形式

 springboot操作redis实现技术切换

lettcus(默认)与jedis区别

整合第三方技术

缓存的简单介绍

简易的自定义缓存

 SpringBoot中的缓存


Redis简介

window下载地址windows版的redis下载地址

SpringBoot整合redis与缓存使用_第1张图片

SpringBoot整合redis与缓存使用_第2张图片

开启运行redis 

SpringBoot整合redis与缓存使用_第3张图片

redis简单使用

redis是键值对的形式,即设置一个值,就可以得到那个值,通过set和get值,若没有值则会输出nil(null)

SpringBoot整合redis与缓存使用_第4张图片

SpringBoot整合redis与缓存使用_第5张图片

keys *查看有多少个值被设置。

服务端启动的命令(启动redis的命令)

redis-server.exe redis.windows.conf

客户端启动命令

redis-cli.exe

springboot整合redis

导入依赖


            org.springframework.boot
            spring-boot-starter-data-redis
        

test类下

@SpringBootTest
class SpringbootNosqlApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void setOne() {
        ValueOperations ops = redisTemplate.opsForValue();
        ops.set("name1", "zhangsan");
    }

    @Test
    void getOne() {
        ValueOperations ops = redisTemplate.opsForValue();
        System.out.println(ops.get("name1"));
    }

}

 运行结果

SpringBoot整合redis与缓存使用_第6张图片

 测试hash数据

    @Test
    void hsetOne() {
        HashOperations ops =redisTemplate.opsForHash();
        ops.put("kc","a1","aa");
    }

    @Test
    void hgetOne() {
        HashOperations ops = redisTemplate.opsForHash();
        System.out.println(ops.get("kc","a1"));
    }

小结:

RedisTemplate提供操作各种数据存储类型的接口API

SpringBoot整合redis与缓存使用_第7张图片

redis的存在形式

之前使用的redisTemplate

SpringBoot整合redis与缓存使用_第8张图片

在使用RedisTemplate在库中都是以对象的形式,而在redis客服端中的操作是以字符串的形式

可以获取在客服端的操作值

@SpringBootTest
public class redisTest {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @Test
    public void test1(){
        ValueOperations ops = stringRedisTemplate.opsForValue();
        System.out.println(ops.get("name"));

    }
}

运行结果 

SpringBoot整合redis与缓存使用_第9张图片

 RedisTemplate一对象作为key和value,内部对数据进行序列化

StringRedisTemplate以字符串作为key和value,与Redis客服端操作等效

 springboot操作redis实现技术切换

  • jedis
  • lettuce(默认)

 客户端选择:jedis

导入

  
            jedis.clients
            jedis
        

配置客服端 

spring:
  redis:
    client-type: jedis
    host: localhost
    port: 6379

lettcus(默认)与jedis区别

jedis连接Redis服务器是直连模式,当多线程模式下使用jedis会存在线程安全问题,解决方案可以通过配置连接池是每个连接专用,这样整体性能就大受影响。

lettcus基于Netty框架进行与Redis服务器连接,底层设计中采用StatefulRedisConnection。StatefulRedisConnection自身是线程安全的,可以保障并发访问安全,所以一个连接可以被多线程复用,当lettcus也支持多连接示例一起工作。

整合第三方技术

缓存的简单介绍

SpringBoot整合redis与缓存使用_第10张图片

 缓存是一种介于数据永久存储介质数据应用之间的数据临时存储介质

使用缓存可以有效的较少低速读取过程的次数(如磁盘的IO),提高系统性能

缓存主要作用是减少访问数据库的次数,从而高效读取到数据且降低了数据库的压力

缓存也可以存储临时数据。

简易的自定义缓存

核心的代码

 serviceImpl下



@Service
public class PersonServiceImpl extends ServiceImpl implements PersonService {

    @Autowired
    private PersonDao personDao;

    private HashMap catchMess=new HashMap<>();
@Override
  public Person getById(Integer id){
    Person person = catchMess.get(id);
    //如果当前缓存中没有本次数据,则进行查询,否则直接返回
    if(person==null){
        System.out.println("新的查询");
        Person queryPerson = personDao.selectById(id);
        catchMess.put(id, queryPerson);
       return queryPerson;
    }
    System.out.println("已经存在,不查询");
    return person;
  }
}

controller下 



@RestController
@RequestMapping("/persons")
public class PersonController {

    @Autowired
    private PersonService personService;
    @GetMapping("/{id}")
public Person testById(@PathVariable int id){

    return personService.getById(id);
}

}

 Postman下

SpringBoot整合redis与缓存使用_第11张图片

 控制台中

SpringBoot整合redis与缓存使用_第12张图片

 SpringBoot中的缓存

导入依赖



        
            org.springframework.boot
            spring-boot-starter-cache
        

启动类中开启缓存

@SpringBootApplication
@MapperScan( basePackages = "com.dao")//扫描dao的包,扫描到mapper
@EnableCaching//启用缓存
public class SpringbootCatchTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootCatchTestApplication.class, args);
    }

}

在要测试的方法中

@Override
@Cacheable(value = "cacheSpace",key = "#id")//value是起的名字,key表示以什么关键字存储
  public Person getById(Integer id){
   return personDao.selectById(id);
  }

运行之后也是可以得到一次结果

SpringBoot整合redis与缓存使用_第13张图片

你可能感兴趣的:(SpringBoot,redis,java,缓存,spring,boot)