小言_互联网的博客

SpringBoot整合redis与缓存使用

342人阅读  评论(0)

目录

Redis简介

springboot整合redis

redis的存在形式

 springboot操作redis实现技术切换

lettcus(默认)与jedis区别

整合第三方技术

缓存的简单介绍

简易的自定义缓存

 SpringBoot中的缓存


Redis简介

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

开启运行redis 

redis简单使用

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

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

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

redis-server.exe redis.windows.conf

客户端启动命令

redis-cli.exe

springboot整合redis

导入依赖


  
  1. <dependency>
  2. <groupId>org.springframework.boot </groupId>
  3. <artifactId>spring-boot-starter-data-redis </artifactId>
  4. </dependency>

test类下


  
  1. @SpringBootTest
  2. class SpringbootNosqlApplicationTests {
  3. @Autowired
  4. private RedisTemplate redisTemplate;
  5. @Test
  6. void setOne () {
  7. ValueOperations ops = redisTemplate.opsForValue();
  8. ops.set( "name1", "zhangsan");
  9. }
  10. @Test
  11. void getOne () {
  12. ValueOperations ops = redisTemplate.opsForValue();
  13. System.out.println(ops.get( "name1"));
  14. }
  15. }

 运行结果

 测试hash数据


  
  1. @Test
  2. void hsetOne () {
  3. HashOperations ops =redisTemplate.opsForHash();
  4. ops.put( "kc", "a1", "aa");
  5. }
  6. @Test
  7. void hgetOne () {
  8. HashOperations ops = redisTemplate.opsForHash();
  9. System.out.println(ops.get( "kc", "a1"));
  10. }

小结:

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

redis的存在形式

之前使用的redisTemplate

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

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


  
  1. @SpringBootTest
  2. public class redisTest {
  3. @Autowired
  4. private StringRedisTemplate stringRedisTemplate;
  5. @Test
  6. public void test1 (){
  7. ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();
  8. System.out.println(ops.get( "name"));
  9. }
  10. }

运行结果 

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

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

 springboot操作redis实现技术切换

  • jedis
  • lettuce(默认)

 客户端选择:jedis

导入


  
  1. <dependency>
  2. <groupId>jedis.clients </groupId>
  3. <artifactId>jedis </artifactId>
  4. </dependency>

配置客服端 


  
  1. spring:
  2. redis:
  3. client -type: jedis
  4. host: localhost
  5. port: 6379

lettcus(默认)与jedis区别

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

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

整合第三方技术

缓存的简单介绍

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

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

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

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

简易的自定义缓存

核心的代码

 serviceImpl下


  
  1. @Service
  2. public class PersonServiceImpl extends ServiceImpl<PersonDao, Person> implements PersonService {
  3. @Autowired
  4. private PersonDao personDao;
  5. private HashMap<Integer,Person> catchMess= new HashMap<>();
  6. @Override
  7. public Person getById (Integer id){
  8. Person person = catchMess.get(id);
  9. //如果当前缓存中没有本次数据,则进行查询,否则直接返回
  10. if(person== null){
  11. System.out.println( "新的查询");
  12. Person queryPerson = personDao.selectById(id);
  13. catchMess.put(id, queryPerson);
  14. return queryPerson;
  15. }
  16. System.out.println( "已经存在,不查询");
  17. return person;
  18. }
  19. }

controller下 


  
  1. @RestController
  2. @RequestMapping("/persons")
  3. public class PersonController {
  4. @Autowired
  5. private PersonService personService;
  6. @GetMapping("/{id}")
  7. public Person testById (@PathVariable int id){
  8. return personService.getById(id);
  9. }
  10. }

 Postman下

 控制台中

 SpringBoot中的缓存

导入依赖


  
  1. <!-- 导入缓存对应的starter-->
  2. <dependency>
  3. <groupId>org.springframework.boot </groupId>
  4. <artifactId>spring-boot-starter-cache </artifactId>
  5. </dependency>

启动类中开启缓存


  
  1. @SpringBootApplication
  2. @MapperScan( basePackages = "com.dao") //扫描dao的包,扫描到mapper
  3. @EnableCaching //启用缓存
  4. public class SpringbootCatchTestApplication {
  5. public static void main (String[] args) {
  6. SpringApplication.run(SpringbootCatchTestApplication.class, args);
  7. }
  8. }

在要测试的方法中


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

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


转载:https://blog.csdn.net/weixin_60719453/article/details/127462355
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场