Redis当中用StringRedisTemplate封装好的工具类

2024-05-11 14:28

本文主要是介绍Redis当中用StringRedisTemplate封装好的工具类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1、工具类的功能

2、导入依赖

2、具体代码


1、工具类的功能

  • 将字符串存入到redis当中
  • 将对象存入到redis当中
  • 将对象转化为HashMap存入到redis当中
  • 将对象转化为Set存入到redis当中
  • 将集合存入到redis当中
  • 取出各种存入到redis当中的数据 并做各种数据转换
  • 删除redis当中的数据
  • 设置过期时间和不设置过期时间

2、导入依赖

<!-- Hutool工具类 -->
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.17</version>
</dependency><!-- redis 缓存操作 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- pool 对象池 -->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId>
</dependency>

配置文件

spring:redis:host: 自己的ipport: 6379password: 自己的密码lettuce:pool:max-active: 8 # 最大连接数max-idle: 8   # 最大空闲连接min-idle: 0   # 最小空闲连接max-wait: 100 # 连接等待时间

 

2、具体代码

package com.hyh.ad.common.core.redis;import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;@Component
@Slf4j
public class CacheClient {@Autowiredprivate StringRedisTemplate stringRedisTemplate;/*** 存放不含过期时间的key** @param key*/public void setWithoutTime(String key, Object value) {stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(value));}/*** redis的set方法是一个字符串的存储方法** @param key:redis当中的唯一key,value:存储的值 类型为Object,time:过期时间,unit:时间单位*/public void setObject(String key, Object value, Long time, TimeUnit unit) {stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(value), time, unit);}/*** 获取key** @param key*/public String getObject(String key) {if (key == null) {throw new RuntimeException("key不能为空");}return stringRedisTemplate.opsForValue().get(key);}/*** 删除key** @param key*/public void delete(String key) {stringRedisTemplate.delete(key);}/*** 用map的形式存储数据 加上过期时间** @param key* @param value* @param time* @param unit*/public void setMap(String key, Object value, Long time, TimeUnit unit) {// 将对象转换为mapMap<String, Object> map = BeanUtil.beanToMap(value, new HashMap<>(),CopyOptions.create().setIgnoreNullValue(true).setFieldValueEditor((fieldName, fieldValue) -> {if (fieldValue == null)return null;return fieldValue.toString();}));// 存储mapstringRedisTemplate.opsForHash().putAll(key, map);// 设置过期时间stringRedisTemplate.expire(key, time, unit);}/*** 用map的形式存储数据** @param* @return*/public void setMapWithoutTime(String key, Object value) {// 将对象转换为mapMap<String, Object> map = BeanUtil.beanToMap(value, new HashMap<>(),CopyOptions.create().setIgnoreNullValue(true).setFieldValueEditor((fieldName, fieldValue) -> {if (fieldValue == null)return null;return fieldValue.toString();}));// 存储mapstringRedisTemplate.opsForHash().putAll(key, map);}/*** 获取map的数据** @param key* @param bean*/public <T> T getMap(String key, T bean) {if (key == null) {throw new RuntimeException("key不能为空");}Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries(key);// 将map转为beanreturn BeanUtil.fillBeanWithMap(entries, bean, false);}/*** 将list存储到redis当中 并且设置过期时间** @param key* @param list* @param time* @param unit*/public void setList(String key, List<?> list, Long time, TimeUnit unit) {ListOperations<String, String> opsForList = stringRedisTemplate.opsForList();for (Object o : list) {opsForList.rightPush(key, JSONUtil.toJsonStr(o));}stringRedisTemplate.expire(key, time, unit);}/*** 将list存储到redis当中** @param key* @param list*/public void setListWithoutTime(String key, List<?> list) {ListOperations<String, String> opsForList = stringRedisTemplate.opsForList();for (Object o : list) {opsForList.rightPush(key, JSONUtil.toJsonStr(o));}}/*** 获取list** @param key* @param clazz* @return*/public <T> List<T> getList(String key, Class<T> clazz) {if (key == null) {throw new RuntimeException("key不能为空");}ListOperations<String, String> opsForList = stringRedisTemplate.opsForList();List<String> range = opsForList.range(key, 0, -1);return BeanUtil.copyToList(range, clazz);}/*** 将对象存入到redis set集合中 并且设置过期时间** @param key* @param value* @param time* @param unit*/public void setSetWithoutTime(String key, Object value, Long time, TimeUnit unit) {stringRedisTemplate.opsForSet().add(key, JSONUtil.toJsonStr(value));stringRedisTemplate.expire(key, time, unit);}/*** 将对象存入到redis set集合中** @param key* @param value*/public void setSet(String key, Object value) {stringRedisTemplate.opsForSet().add(key, JSONUtil.toJsonStr(value));}/*** 获取set集合** @param key* @param clazz* @return*/public <T> List<T> getSet(String key, Class<T> clazz) {if (key == null) {throw new RuntimeException("key不能为空");}return BeanUtil.copyToList(stringRedisTemplate.opsForSet().members(key), clazz);}
}

这篇关于Redis当中用StringRedisTemplate封装好的工具类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/979794

相关文章

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Redis MCP 安装与配置指南

《RedisMCP安装与配置指南》本文将详细介绍如何安装和配置RedisMCP,包括快速启动、源码安装、Docker安装、以及相关的配置参数和环境变量设置,感兴趣的朋友一起看看吧... 目录一、Redis MCP 简介二、安www.chinasem.cn装 Redis MCP 服务2.1 快速启动(推荐)2.

基于Python实现简易视频剪辑工具

《基于Python实现简易视频剪辑工具》这篇文章主要为大家详细介绍了如何用Python打造一个功能完备的简易视频剪辑工具,包括视频文件导入与格式转换,基础剪辑操作,音频处理等功能,感兴趣的小伙伴可以了... 目录一、技术选型与环境搭建二、核心功能模块实现1. 视频基础操作2. 音频处理3. 特效与转场三、高

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核