首页 > 数据库 >spring boot中redis的使用

spring boot中redis的使用

时间:2023-11-02 15:24:34浏览次数:43  
标签:redis return spring boot Redis value 缓存 key RedisTemplate

1. 添加Redis依赖 首先,需要在pom.xml文件中添加Redis依赖:   <dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 这个依赖包含了Spring Data Redis,以及Jedis和Lettuce这两种Redis客户端的实现。   2. 配置Redis连接 在SpringBoot项目中,可以通过在application.properties或application.yml文件中配置Redis连接信息。以下是一个示例:   spring:   redis:     host: localhost     port: 6379     password: mypassword     timeout: 3000     database: 0 其中,host和port分别是Redis服务器的地址和端口号,password是Redis的密码(如果没有密码,可以不填),timeout是Redis连接超时时间,jedis.pool是连接池的相关设置。   3. 创建RedisTemplate 使用Spring Data Redis操作Redis,通常会使用RedisTemplate类。为了方便起见,我们可以创建一个工具类来管理RedisTemplate的创建和使用。以下是一个示例:   package com.redisTest.system.utils;   import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Component;   import javax.annotation.Resource; import java.util.Set; import java.util.concurrent.TimeUnit;   /**  * @author luft-mensch  */ @Component public class RedisUtils {       /**      * 如果使用 @Autowired 注解完成自动装配 那么      * RedisTemplate要么不指定泛型,要么泛型 为<Stirng,String> 或者<Object,Object>      * 如果你使用其他类型的 比如RedisTemplate<String,Object>      * 那么请使用 @Resource 注解      * */     @Resource     private RedisTemplate<String,Object> redisTemplate;       private Logger logger = LoggerFactory.getLogger(this.getClass());       /**      * 缓存value      *      * @param key      * @param value      * @param time      * @return      */     public boolean cacheValue(String key, Object value, long time) {         try {             ValueOperations<String, Object> valueOperations = redisTemplate.opsForValue();             valueOperations.set(key, value);             if (time > 0) {                 // 如果有设置超时时间的话                 redisTemplate.expire(key, time, TimeUnit.SECONDS);             }             return true;         } catch (Throwable e) {             logger.error("缓存[" + key + "]失败, value[" + value + "] " + e.getMessage());         }         return false;     }       /**      * 缓存value,没有设置超时时间      *      * @param key      * @param value      * @return      */     public boolean cacheValue(String key, Object value) {         return cacheValue(key, value, -1);     }       /**      * 判断缓存是否存在      *      * @param key      * @return      */     public boolean containsKey(String key) {         try {             return redisTemplate.hasKey(key);         } catch (Throwable e) {             logger.error("判断缓存是否存在时失败key[" + key + "]", "err[" + e.getMessage() + "]");         }         return false;     }       /**      * 根据key,获取缓存      *      * @param key      * @return      */     public Object getValue(String key) {         try {             ValueOperations<String, Object> valueOperations = redisTemplate.opsForValue();             return valueOperations.get(key);         } catch (Throwable e) {             logger.error("获取缓存时失败key[" + key + "]", "err[" + e.getMessage() + "]");         }         return null;     }       /**      * 移除缓存      *      * @param key      * @return      */     public boolean removeValue(String key) {         try {             redisTemplate.delete(key);             return true;         } catch (Throwable e) {             logger.error("移除缓存时失败key[" + key + "]", "err[" + e.getMessage() + "]");         }         return false;     }       /**      * 根据前缀移除所有以传入前缀开头的key-value      *      * @param pattern      * @return      */     public boolean removeKeys(String pattern) {         try {             Set<String> keySet = redisTemplate.keys(pattern + "*");             redisTemplate.delete(keySet);             return true;         } catch (Throwable e) {             logger.error("移除key[" + pattern + "]前缀的缓存时失败", "err[" + e.getMessage() + "]");         }         return false;     }   } 在这个示例中,我们使用@Resource注解自动注入了一个RedisTemplate<String, Object>对象。然后,我们提供了三个方法来对Redis进行操作:cacheValue方法用于缓存数据,getValue方法用于获取缓存数据,removeValue方法用于删除缓存数据。这些方法都是通过redisTemplate对象来实现的。   需要注意的是,在使用RedisTemplate时,需要指定键值对的类型。在这个示例中,我们指定了键的类型为String,值的类型为Object。   注意:    * 如果使用 @Autowired 注解完成自动装配     * 那么 RedisTemplate要么不指定泛型,要么泛型 为<Stirng,String> 或者<Object,Object>    * 如果你使用其他类型的 比如RedisTemplate<String,Object>    * 那么请使用 @Resource 注解,否则会报以下错误:RedisTemplate 注入失败   Description:   Field redisTemplate in com.redisTest.system.utils.RedisUtils required a bean of type 'org.springframework.data.redis.core.RedisTemplate' that could not be found.   The injection point has the following annotations: - @org.springframework.beans.factory.annotation.Autowired(required=true)   Action:   Consider defining a bean of type 'org.springframework.data.redis.core.RedisTemplate' in your configuration.   进程已结束,退出代码1 4. 使用RedisTemplate 在上面的示例中,我们已经创建了一个RedisTemplate对象,并提供了一些方法来对Redis进行操作。现在,我们可以在SpringBoot项目中的任何地方使用这个工具类来进行缓存操作。以下是一个示例   @RestController public class UserController {       @Autowired     private RedisUtils redisUtils;       @Autowired     private UserService userService;     @GetMapping("/users/{id}")   public User getUserById(@PathVariable Long id) {          String key = "user_" + id;       User user = (User) redisUtils.getValue(key);         if (user == null) {               user = userService.getUserById(id);             redisUtils.cacheValue(key, user);          }         return user;     } } 在这个示例中,我们创建了一个UserController类,用于处理HTTP请求。在getUserById方法中,我们首先构造了一个缓存的key,然后使用redisUtils.getValue方法从Redis中获取缓存数据。如果缓存中没有数据,我们调用userService.getUserById方法从数据库中获取数据,并使用redisUtils.cacheValue方法将数据存入Redis缓存中。最后,返回获取到的数据。   通过这个示例,我们可以看到,在SpringBoot项目中使用Redis作为缓存的流程。我们首先需要添加Redis依赖,然后在配置文件中配置Redis连接信息。接着,我们创建了一个RedisUtils工具类来管理RedisTemplate的创建和使用。最后,我们在控制器中使用RedisUtils来对Redis进行缓存操作。   5. 乱码解决 Redis 使用过程中可能会遇到 key 和 value 乱码的现象存在,具体解决方法见: ———————————————— 版权声明:本文为CSDN博主「要成为大V的小v」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_44220970/article/details/130399327

标签:redis,return,spring,boot,Redis,value,缓存,key,RedisTemplate
From: https://www.cnblogs.com/csjoz/p/17805490.html

相关文章

  • SpringBoot自动装配原理(一)
    基本概念SpringBoot是一个基于SpringFramework的快速应用开发框架,它通过自动装配(AutoConfiguration)实现了对Spring应用的自动化配置。自动装配能够大幅减少开发者的配置工作,提高了开发效率。step1.starter依赖介绍SpringBoot的Starter是一种依赖描述符,用于封装相关功能的依赖,......
  • 【虹科分享】Redis 不仅仅是内存数据库
    Redis难道仅仅是内存数据库吗?No!加速金融交易!让视频游戏云服务快得令人难以置信!实现实时在线购买!让我们从这些例子开始,探索一些Redis可以实现的其他可能性!文章速览:基于实时分析和库存管理做出更明智的决策实现数据和视频的流畅播放提供关键数据的故障转移服务实时批准数字......
  • Spring、Spring5、Spring MVC、 Spring boot、Spring Cloud的区别
    官方解释Spring:是一个开源框架,用于创建Java应用程序的企业级框架。Spring5:是Spring框架的最新版本,增加了一些新特性,如响应式编程支持等。其核心是控制反转(IOC)和面向切面(AOP),针对于开发的WEB层(springMVC)、业务层(IOC)、持久层(jdbcTemplate)等都提供了多种配置解决方案。S......
  • 报错 org.springframework.dao.DataIntegrityViolationException: Error attempting t
       原因是持久化层的字段属性 跟数据库的没有对应上,类型不对dao.DataIntegrityViolationException:Errorattemptingtogetcolumn'STATUS'fromresultset.<iftest="record.status!=null">'STATUS'=#{record.status,jdbcType=......
  • Springboot Cache @Cacheable 类内部调用时不生效,解决办法
    出现问题的原因:Springcache的实现原理是基于AOP的动态代理实现的:即都在方法调用前后去获取方法的名称、参数、返回值,然后根据方法名称、参数生成缓存的key(自定义的key例外),进行缓存。this调用不是代理对象的调用,所以aop失效,注解失效。解决办法就是,我们获取当前Bean,由它来调......
  • Spring byName和byType两种注入方式;@Resource和@Autowired
    Spring控制翻转IOC可以理解为一个类,依赖注入可以理解为一个对象控制反转(IoC)是一个通用的概念,它可以用许多不同的方式去表达,依赖注入仅仅是控制反转的一个具体的例子。依赖注入的2种方法:1、构造函数依赖注入2、setter方法依赖注入自动装配分为3种:(Spring的byType、byName......
  • springboot post请求的content-type
    content-type是http请求的响应头和请求头的字段。当作为响应头时,告诉客户端实际返回的内容的内容类型。作为请求头时(post或者put),客户端告诉服务器实际发送的数据类型。在前端开发过程中,通常需要跟后端工程师对接接口的数据格式,不同的数据类型对于服务器来说有不同的处理方式,因此......
  • Redis【Sentinel 哨兵机制】
    一、简介        二、作用    哨兵是Redis集群架构中一个非常重要的组件,主要功能如下:集群监控。即时刻监控着redis的master和slave进程是否是在正常工作。消息通知。就是说当它发现有redis实例有故障的话,就会发送消息给管理员。自动故障转移。如果redi......
  • in org.springframework.cache.annotation.ProxyCachingConfiguration required a be
    我的项目是springboot项目,在启动过程中报错如何下Parameter0ofmethodcacheAdvisorinorg.springframework.cache.annotation.ProxyCachingConfigurationrequiredabeanoftype'org.springframework.cache.interceptor.CacheOperationSource'thatcouldnotbefound......
  • springboot正常启动的时候,@Configuration的@Bean属于初始化就得加载的,当该springboot
      ......