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

相关文章

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

redis+lua实现分布式限流的示例

《redis+lua实现分布式限流的示例》本文主要介绍了redis+lua实现分布式限流的示例,可以实现复杂的限流逻辑,如滑动窗口限流,并且避免了多步操作导致的并发问题,具有一定的参考价值,感兴趣的可... 目录为什么使用Redis+Lua实现分布式限流使用ZSET也可以实现限流,为什么选择lua的方式实现

Redis中管道操作pipeline的实现

《Redis中管道操作pipeline的实现》RedisPipeline是一种优化客户端与服务器通信的技术,通过批量发送和接收命令减少网络往返次数,提高命令执行效率,本文就来介绍一下Redis中管道操... 目录什么是pipeline场景一:我要向Redis新增大批量的数据分批处理事务( MULTI/EXE

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

jvm调优常用命令行工具详解

《jvm调优常用命令行工具详解》:本文主要介绍jvm调优常用命令行工具的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一 jinfo命令查看参数1.1 查看jvm参数二 jstack命令2.1 查看现场堆栈信息三 jstat 实时查看堆内存,gc情况3.1