springBoot整合redis使用案例详解

作者:伏加特遇上西柚 时间:2022-07-02 10:51:33 

一、创建springboot项目(采用骨架方式)

springBoot整合redis使用案例详解
springBoot整合redis使用案例详解
springBoot整合redis使用案例详解
springBoot整合redis使用案例详解
springBoot整合redis使用案例详解
springBoot整合redis使用案例详解

创建完成;
我们分析下pom文件中内容:
所使用到的关键依赖:


<!--springBoot集成redis-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-data-redis</artifactId>
           <version>2.5.4</version>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
           <version>2.5.4</version>
       </dependency>

<dependency>
           <groupId>org.projectlombok</groupId>
           <artifactId>lombok</artifactId>
           <version>1.18.20</version>
           <optional>true</optional>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-test</artifactId>
           <version>2.5.4</version>
           <scope>test</scope>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-autoconfigure</artifactId>
           <version>2.5.4</version>
       </dependency>
       <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>fastjson</artifactId>
           <version>1.2.75</version>
       </dependency>

二、配置文件


server.port=8088
spring.redis.host=127.0.0.1
#Redis服务器连接端口
spring.redis.port=6379
#Redis服务器连接密码(默认为空)
spring.redis.password=123456
#连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
#连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.pool.max-idle=8
#连接池中的最小空闲连接
spring.redis.pool.min-idle=0
#连接超时时间(毫秒)
spring.redis.timeout=30000

三、使用redis


package com.example.redis.cache;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
* @author wxl
* @date 2021-08-15 18:44
*/
@Slf4j
@Component
public class CacheService {
   @Autowired
   private StringRedisTemplate redisTemplate;

private final String DEFAULT_KEY_PREFIX = "";
   private final int EXPIRE_TIME = 1;
   private final TimeUnit EXPIRE_TIME_TYPE = TimeUnit.DAYS;

/**
    * 数据缓存至redis
    *
    * @param key
    * @param value
    * @return
    */
   public <K, V> void add(K key, V value) {
       try {
           if (value != null) {
               redisTemplate
                       .opsForValue()
                       .set(DEFAULT_KEY_PREFIX + key, JSON.toJSONString(value));
           }
       } catch (Exception e) {
           log.error(e.getMessage(), e);
           throw new RuntimeException("数据缓存至redis失败");
       }
   }

/**
    * 数据缓存至redis并设置过期时间
    *
    * @param key
    * @param value
    * @return
    */
   public <K, V> void add(K key, V value, long timeout, TimeUnit unit) {
       try {
           if (value != null) {
               redisTemplate
                       .opsForValue()
                       .set(DEFAULT_KEY_PREFIX + key, JSON.toJSONString(value), timeout, unit);
           }
       } catch (Exception e) {
           log.error(e.getMessage(), e);
           throw new RuntimeException("数据缓存至redis失败");
       }
   }

/**
    * 写入 hash-set,已经是key-value的键值,不能再写入为hash-set
    *
    * @param key    must not be {@literal null}.
    * @param subKey must not be {@literal null}.
    * @param value  写入的值
    */
   public <K, SK, V> void addHashCache(K key, SK subKey, V value) {
       redisTemplate.opsForHash().put(DEFAULT_KEY_PREFIX + key, subKey, value);
   }

/**
    * 写入 hash-set,并设置过期时间
    *
    * @param key    must not be {@literal null}.
    * @param subKey must not be {@literal null}.
    * @param value  写入的值
    */
   public <K, SK, V> void addHashCache(K key, SK subKey, V value, long timeout, TimeUnit unit) {
       redisTemplate.opsForHash().put(DEFAULT_KEY_PREFIX + key, subKey, value);
       redisTemplate.expire(DEFAULT_KEY_PREFIX + key, timeout, unit);
   }

/**
    * 获取 hash-setvalue
    *
    * @param key    must not be {@literal null}.
    * @param subKey must not be {@literal null}.
    */
   public <K, SK> Object getHashCache(K key, SK subKey) {
       return  redisTemplate.opsForHash().get(DEFAULT_KEY_PREFIX + key, subKey);
   }

/**
    * 从redis中获取缓存数据,转成对象
    *
    * @param key   must not be {@literal null}.
    * @param clazz 对象类型
    * @return
    */
   public <K, V> V getObject(K key, Class<V> clazz) {
       String value = this.get(key);
       V result = null;
       if (!StringUtils.isEmpty(value)) {
           result = JSONObject.parseObject(value, clazz);
       }
       return result;
   }

/**
    * 从redis中获取缓存数据,转成list
    *
    * @param key   must not be {@literal null}.
    * @param clazz 对象类型
    * @return
    */
   public <K, V> List<V> getList(K key, Class<V> clazz) {
       String value = this.get(key);
       List<V> result = Collections.emptyList();
       if (!StringUtils.isEmpty(value)) {
           result = JSONArray.parseArray(value, clazz);
       }
       return result;
   }

/**
    * 功能描述:Get the value of {@code key}.
    *
    * @param key must not be {@literal null}.
    * @return java.lang.String
    * @date 2021/9/19
    **/
   public <K> String get(K key) {
       String value;
       try {
           value = redisTemplate.opsForValue().get(DEFAULT_KEY_PREFIX + key);
       } catch (Exception e) {
           log.error(e.getMessage(), e);
           throw new RuntimeException("从redis缓存中获取缓存数据失败");
       }
       return value;
   }

/**
    * 删除key
    */
   public void delete(String key) {
       redisTemplate.delete(key);
   }

/**
    * 批量删除key
    */
   public void delete(Collection<String> keys) {
       redisTemplate.delete(keys);
   }

/**
    * 序列化key
    */
   public byte[] dump(String key) {
       return redisTemplate.dump(key);
   }

/**
    * 是否存在key
    */
   public Boolean hasKey(String key) {
       return redisTemplate.hasKey(key);
   }

/**
    * 设置过期时间
    */
   public Boolean expire(String key, long timeout, TimeUnit unit) {
       return redisTemplate.expire(key, timeout, unit);
   }

/**
    * 设置过期时间
    */
   public Boolean expireAt(String key, Date date) {
       return redisTemplate.expireAt(key, date);
   }

/**
    * 移除 key 的过期时间,key 将持久保持
    */
   public Boolean persist(String key) {
       return redisTemplate.persist(key);
   }

/**
    * 返回 key 的剩余的过期时间
    */
   public Long getExpire(String key, TimeUnit unit) {
       return redisTemplate.getExpire(key, unit);
   }

/**
    * 返回 key 的剩余的过期时间
    */
   public Long getExpire(String key) {
       return redisTemplate.getExpire(key);
   }
}

1、添加字符串到redis


/**
    * 功能描述:添加字符串到redis
    */
   @Test
   void add() {
       cacheService.add("test", 1234);
   }

结果:

springBoot整合redis使用案例详解

2、将对象转换成jsonString并存入redis


/**
    * 功能描述:添加对象至redis
    */
   @Test
   void addObject() {
       User user = User.builder()
               .id(ID)
               .name("小萌")
               .age(AGE)
               .build();
       cacheService.add(user.getId(), user);
   }

结果:

springBoot整合redis使用案例详解

3、将对象集合转换成jsonString,并设置过期时间存入至redis


/**
    * 功能描述:添加对象集合至redis
    */
   @Test
   void addObjects() {
       ArrayList<User> users = new ArrayList<>();
       User user = User.builder()
               .id(ID)
               .name("小萌")
               .age(AGE)
               .build();
       users.add(user);
       cacheService.add("key", users, 1, TimeUnit.HOURS);
   }

结果:

springBoot整合redis使用案例详解

4、获取对象


/**
    * 功能描述:获取对象
    */
   @Test
   void getObject() {
       User object = cacheService.getObject(ID, User.class);
       System.out.println("object = " + object);
   }

结果:

object = User(id=123, name=小萌, age=12)

5、获取对象集合


/**
    * 功能描述:获取对象集合
    */
   @Test
   void getObjects() {
       List<User> users = cacheService.getList("key", User.class);
       System.out.println("users = " + users);
   }

结果:

users = [User(id=123, name=小萌, age=12)]

6、添加 hash-set


/**
    * 功能描述:添加 hash-set
    */
   @Test
   void addHashCache() {
       cacheService.addHashCache("hashKey", "key", "value");
   }

结果:

springBoot整合redis使用案例详解

7、获取 hash-setvalue


/**
    * 获取 hash-setvalue
    *
    * @param key    must not be {@literal null}.
    * @param subKey must not be {@literal null}.
    */
   public <K, SK> Object getHashCache(K key, SK subKey) {
       return  redisTemplate.opsForHash().get(DEFAULT_KEY_PREFIX + key, subKey);
   }

结果:

hashCache = value

来源:https://blog.csdn.net/weixin_43811057/article/details/120382906

标签:springBoot,整合,redis
0
投稿

猜你喜欢

  • C#引用类型和值类型的介绍与实例

    2022-08-11 16:24:34
  • SpringBoot如何读取xml配置bean(@ImportResource)

    2021-08-03 22:33:44
  • C# 获取IP及判断IP是否在区间

    2021-10-06 23:44:50
  • java中利用List的subList方法实现对List分页(简单易学)

    2022-06-18 23:33:09
  • java volatile关键字的含义详细介绍

    2021-11-01 16:52:17
  • 基于使用BeginInvoke,EndInvoke异步调用委托的实现代码

    2023-04-29 09:46:49
  • Spring自定义注解配置简单日志示例

    2023-01-25 09:31:08
  • Windows系统安装JDK小结

    2022-07-16 02:49:57
  • 解决Javaweb 提交表单到servlet时出现空白页面,但网站不报错问题

    2021-06-21 20:26:48
  • Java OkHttp框架源码深入解析

    2023-11-29 03:22:50
  • Vue3源码解读effectScope API及实现原理

    2023-12-11 19:28:49
  • 浅谈Java编程中的synthetic关键字

    2022-01-27 18:48:41
  • 详解Java 中 RMI 的使用

    2023-10-12 08:31:27
  • C#读取txt文件数据的方法实例

    2022-12-08 15:25:41
  • C#实现一键清空控件值的示例代码

    2021-11-12 12:10:15
  • Android自定义顶部导航栏控件实例代码

    2022-02-11 13:43:16
  • 解决Android studio3.6安装后gradle Download失败(构建不成功)

    2021-07-20 15:38:42
  • JAVA反射机制实例详解

    2021-11-08 13:39:34
  • springboot中validator数据校验功能的实现

    2021-07-31 17:43:50
  • JavaSE-面向对象(方法重写)

    2023-01-27 10:51:09
  • asp之家 软件编程 m.aspxhome.com