springBoot整合redis使用介绍(详细案例)

springBoot整合redis使用介绍(详细案例)文章预览 一 创建 springboot 项目 采用骨架方式 二 配置文件三 使用 redis1 添加字符串到 redis2 将对象转换成 jsonString 并存入 redis3 将对象集合转换成 jsonString 并设置过期时间存入至 redis4 获取对象 5 获取对象集合 6 添加 hash set7 获取 hash setvalue 一 创建 springboot 项目 采用骨架方式 创建完成 我们分析下 pom 文件中内容 所使用到的关键依赖 springBoot 集成 redis

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建完成;
我们分析下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= #连接池最大连接数(使用负值表示没有限制) 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); } 

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

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

结果:在这里插入图片描述

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); } 

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"); } 

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://javaforall.net/232627.html原文链接:https://javaforall.net

(0)
上一篇 2025年9月26日 下午5:01
下一篇 2025年9月26日 下午5:22


相关推荐

  • 特征融合 & FFM(Feature Fusion Module) 特征融合模块

    特征融合 & FFM(Feature Fusion Module) 特征融合模块FFM(FeatureFusionModule)特征融合模块

    2022年5月4日
    265
  • RPC接口简介「建议收藏」

    RPC接口简介「建议收藏」什么是RPCRPC(RemoteProcedureCallProtocol)远程过程调用协议。一个通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。比较正式的描述是:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC的特点:RPC是协议。只是协议,而非实现。RPC实现包括:Dubbo、Thri…

    2022年10月13日
    5
  • edgeR基因表达差异分析

    edgeR基因表达差异分析edgeR 基因表达差异分析文章目录 edgeR 基因表达差异分析官方文档总结读取 read 数 DGEList 对象 构建分组过滤 删除低表达基因 CPM 标度转换手动过滤自动过滤归一化测序深度有效库大小 GC 含量基因长度 MDS 图形展示样本无监督聚类负二项式模型计算生物变异系数计算差异基因广义线性模型 Glm 计算离散度计算 DE 基因如果没有重复样本 输出结果查看统计参考 一个比较详细的例子 http www iwhgao com edger E7 AE 80 E5 8D 95 E4 BD BF E7 94 A8

    2026年3月19日
    3
  • mysql筛选包含某个字符_mysql判断某个字符串是否包含某个字符串的3种方法

    mysql筛选包含某个字符_mysql判断某个字符串是否包含某个字符串的3种方法总结下在 MySQL 里判断某个字符串是否包含某个字符串的 3 种方法 先举个简单的场景 比如要查询 user 表中爱好中有 yanggb 的记录 方法 1 使用通配符 通配符也就是模糊匹配 可以分为前导模糊查询 后导模糊查询和全导匹配查询 适用于查询某个字符串中是否包含另一个模糊查询的场景 select fromuserwher yanggb 使用的场景局限于找到 hobb

    2026年3月20日
    1
  • yarn详细入门教程「建议收藏」

    yarn详细入门教程「建议收藏」简介Yarn是Facebook,Google,Exponent和Tilde开发的一款新的JavaScript包管理工具。就像我们可以从官方文档了解那样,它的目的是解决这些团队使用npm面临的少数问题,即:1.安装的时候无法保证速度/一致性2.安全问题,因为npm安装时允许运行代码Yarn同样是一个从npm注册源获取模块的新的CLI客户端。注册的方

    2022年6月5日
    40
  • GridLayout详解

    GridLayout详解GridLayoutGridLayout是一个非常强大的布局管理器,它可以实现很多复杂的布局,名字中暗示它将所有控件放置在类似网格的布局中.^__^GridLayout有两个构造函数.GridLayout的构造函数构造函数描述publicGridLayout()建立一个默认的GridLayout布局.publicGridLayout(intnumCo…

    2022年6月6日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号