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

相关文章

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

sqlite3 命令行工具使用指南

《sqlite3命令行工具使用指南》本文系统介绍sqlite3CLI的启动、数据库操作、元数据查询、数据导入导出及输出格式化命令,涵盖文件管理、备份恢复、性能统计等实用功能,并说明命令分类、SQL语... 目录一、启动与退出二、数据库与文件操作三、元数据查询四、数据操作与导入导出五、查询输出格式化六、实用功

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

Redis的持久化之RDB和AOF机制详解

《Redis的持久化之RDB和AOF机制详解》:本文主要介绍Redis的持久化之RDB和AOF机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述RDB(Redis Database)核心原理触发方式手动触发自动触发AOF(Append-Only File)核

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例