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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 全面预算管理——财务实操到SAP BPC 系统实现

    全面预算管理——财务实操到SAP BPC 系统实现引言 从实务操作的角度介绍了全面预算为何做 如何编 如何管以及结果如何用等内容 如何从财务管理实现到 SAPBPC 系统落地 也就是梳理从财务管控概念目标到结合系统流程固化 End2EndSolut 搭建以服务客户为中心 通过流程化数字化管控的新型组织体系 从实务操作的角度介绍了全面预算为何做 如何编 如何管以及结果如何用等内容 如何从财务管理实现到 SAPBPC 系统落地 也就是梳理从财务管控概念目标到结合系统流程固化 End2EndSolut 搭建以服务客户为中心 通过流程化

    2025年10月13日
    3
  • Virus.Win32.Tc专杀方案[通俗易懂]

    Virus.Win32.Tc专杀方案[通俗易懂]Virus.Win32.Tc.bat恶意病毒专杀处理方案

    2022年7月25日
    9
  • python的缩进通常使用_python缩进格式

    python的缩进通常使用_python缩进格式Python中的缩进(Indentation)决定了代码的作用域范围。这一点和传统的c/c有很大的不同(传统的c/c使用花括号花括号{}符决定作用域的范围;python使用缩进空格来表示作用域的范围,相同缩进行的代码是处于同一范围)。每行代码中开头的空格数(whitespace)用于计算该行代码的缩进级别(Indentationlevel),注意一个Tab会被替换为1~8个Space(具…

    2022年10月10日
    1
  • java冒泡排序经典代码_Java 8大经典排序算法(含源代码),必须收藏!

    java冒泡排序经典代码_Java 8大经典排序算法(含源代码),必须收藏!原标题:Java8大经典排序算法(含源代码),必须收藏!今天小编帮大家整理了Java的8种经典算法。不论是笔试还是面试,都是非常实用的干货。不论你是菜鸟还是高手,非常值得一看!不转发也是挺可惜的~8种排序之间的关系:1,直接插入排序(1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2]个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此…

    2022年7月9日
    20
  • 微信朋友圈分享接口使用总结

    微信朋友圈分享接口使用总结微信朋友圈分享接口是非常细节的,而且不好调试,所以在此总结一下,以帮助大家首先应该遵循微信开发者文档介绍,用接口调试工具将你需要的接口的权限确定一下(这里得去申请接口权限)?然后将这个网址用手机端微信打开测试一下接口是否可用?http://203.195.235.76/jssdk/在保证所有的接口可用的前提下,下面我们正式进入主题我用的是java的struts框架写的后台vartimestam

    2022年5月30日
    40
  • 突破思维的障碍

    突破思维的障碍译者的话   在众多的讲述思维及创造性的书中,这是一本普通的小册子,但它却是吸引人的。作者用妙趣横生而又日常可见的素材向我们娓娓叙说了人人都会关心的问题,即我们是否意识到自己的思维障碍,怎样克服它,让自己变得更富有创造活力。   这本书在美国一版再版,风靡一时,拥有广泛的读者,无论是从事研究工作的高级学者、研究人员,还是从事行政、工商和管理活动的人士或普通学生。相信本书与中国读者的见面

    2022年5月5日
    35

发表回复

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

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