当前位置: 首页 > news >正文

SpringBoot 操作Redis、创建Redis文件夹、遍历Redis文件夹

文章目录

  • 前言
  • 依赖
  • 连接 Redis
  • Redis 配置文件
  • Redis 工具类
  • 操作 Redis
    • 创建 Redis 文件夹
    • 查询数据
    • 遍历 Redis 文件夹


前言

Redis 是一种高性能的键值存储数据库,支持网络、可基于内存亦可持久化的日志型,而 Spring Boot 是一个简化了开发过程的 Java 框架。将两者结合,可以轻松地在 Spring Boot 项目中使用 Redis 来实现数据缓存、会话管理和分布式锁等功能。

Redis 本身是一个内存数据库,在应用中可以充当缓存,提高系统数据查询性能。

一般用于在较短的时间段对相同数据频繁读取的场合,将读取频度较高的数据放入缓存,直接从缓存取数据,以提高效率。

使用场景如:实时排名、秒杀系统等等,并可设置数据自动过期,大大提高效率。


依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

连接 Redis

application.yml 配置文件

spring:data:redis:# Redis服务器地址host: localhost# Redis服务器端口,默认为6379port: 6379# Redis连接的数据库,默认为0(Redis默认有16个数据库,0~15)database: 0# Redis服务器连接密码,默认为空password:# 连接超时时间(毫秒)timeout: 2000jedis:pool:# 连接池最大连接数,若为负值则表示没有任何限制max-active: 10# 连接池中的最大空闲连接max-idle: 6# 连接池中的最小空闲连接min-idle: 2# 连接池最大阻塞等待时间,若为负值则表示没有任何限制max-wait: 1000lettuce:# 超时时间关闭shutdown-timeout: 100

Redis 配置文件

新建Redis配置类

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.*;/*** Redis 配置*/
@Configuration
public class RedisConfig {/*** Redis 序列化配置*/@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(connectionFactory);// 使用GenericJackson2JsonRedisSerializer替换默认序列化GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();// 设置 Key 和 Value 的序列化规则redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);// 初始化 RedisTemplate 序列化完成redisTemplate.afterPropertiesSet();return redisTemplate;}}

Redis 工具类

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundSetOperations;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;import java.util.*;
import java.util.concurrent.TimeUnit;/*** spring redis 工具类**/
@SuppressWarnings(value = {"unchecked", "rawtypes"})
@Component
public class RedisCache {@Autowiredpublic RedisTemplate redisTemplate;/*** 缓存基本的对象,Integer、String、实体类等** @param key   缓存的键值* @param value 缓存的值*/public <T> void setCacheObject(final String key, final T value) {redisTemplate.opsForValue().set(key, value);}/*** 缓存基本的对象,Integer、String、实体类等** @param key      缓存的键值* @param value    缓存的值* @param timeout  时间* @param timeUnit 时间颗粒度*/public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) {redisTemplate.opsForValue().set(key, value, timeout, timeUnit);}/*** 设置有效时间** @param key     Redis键* @param timeout 超时时间* @return true=设置成功;false=设置失败*/public boolean expire(final String key, final long timeout) {return expire(key, timeout, TimeUnit.SECONDS);}/*** 设置有效时间** @param key     Redis键* @param timeout 超时时间* @param unit    时间单位* @return true=设置成功;false=设置失败*/public boolean expire(final String key, final long timeout, final TimeUnit unit) {return redisTemplate.expire(key, timeout, unit);}/*** 获取有效时间** @param key Redis键* @return 有效时间*/public long getExpire(final String key) {return redisTemplate.getExpire(key);}/*** 判断 key是否存在** @param key 键* @return true 存在 false不存在*/public Boolean hasKey(String key) {return redisTemplate.hasKey(key);}/*** 获得缓存的基本对象。** @param key 缓存键值* @return 缓存键值对应的数据*/public <T> T getCacheObject(final String key) {ValueOperations<String, T> operation = redisTemplate.opsForValue();return operation.get(key);}/*** 删除单个对象** @param key*/public boolean deleteObject(final String key) {return redisTemplate.delete(key);}/*** 删除集合对象** @param collection 多个对象* @return*/public boolean deleteObject(final Collection collection) {return redisTemplate.delete(collection) > 0;}/*** 缓存List数据** @param key      缓存的键值* @param dataList 待缓存的List数据* @return 缓存的对象*/public <T> long setCacheList(final String key, final List<T> dataList) {Long count = redisTemplate.opsForList().rightPushAll(key, dataList);return count == null ? 0 : count;}/*** 获得缓存的list对象** @param key 缓存的键值* @return 缓存键值对应的数据*/public <T> List<T> getCacheList(final String key) {return redisTemplate.opsForList().range(key, 0, -1);}/*** 缓存Set** @param key     缓存键值* @param dataSet 缓存的数据* @return 缓存数据的对象*/public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet) {BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);Iterator<T> it = dataSet.iterator();while (it.hasNext()) {setOperation.add(it.next());}return setOperation;}/*** 获得缓存的set** @param key* @return*/public <T> Set<T> getCacheSet(final String key) {return redisTemplate.opsForSet().members(key);}/*** 缓存Map** @param key* @param dataMap*/public <T> void setCacheMap(final String key, final Map<String, T> dataMap) {if (dataMap != null) {redisTemplate.opsForHash().putAll(key, dataMap);}}/*** 获得缓存的Map** @param key* @return*/public <T> Map<String, T> getCacheMap(final String key) {return redisTemplate.opsForHash().entries(key);}/*** 往Hash中存入数据** @param key   Redis键* @param hKey  Hash键* @param value 值*/public <T> void setCacheMapValue(final String key, final String hKey, final T value) {redisTemplate.opsForHash().put(key, hKey, value);}/*** 获取Hash中的数据** @param key  Redis键* @param hKey Hash键* @return Hash中的对象*/public <T> T getCacheMapValue(final String key, final String hKey) {HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash();return opsForHash.get(key, hKey);}/*** 获取多个Hash中的数据** @param key   Redis键* @param hKeys Hash键集合* @return Hash对象集合*/public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys) {return redisTemplate.opsForHash().multiGet(key, hKeys);}/*** 删除Hash中的某条数据** @param key  Redis键* @param hKey Hash键* @return 是否成功*/public boolean deleteCacheMapValue(final String key, final String hKey) {return redisTemplate.opsForHash().delete(key, hKey) > 0;}/*** 获得缓存的基本对象列表** @param pattern 字符串前缀* @return 对象列表*/public Collection<String> keys(final String pattern) {return redisTemplate.keys(pattern);}
}

操作 Redis

创建 Redis 文件夹

编写测试用例

: 分割字符串即可创建文件夹,示例如下:

import com.chh.api.utils.redis.RedisCache;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class RedisTest {@Autowiredprivate RedisCache redisCache;@Testvoid contextLoads() {redisCache.setCacheObject(getCacheKey("test"), "测试");}/*** 设置cache key** @param configKey 参数键* @return 缓存键key*/public static String getCacheKey(String configKey) {return "chh-api:data:" + configKey;}
}

运行测试用例,效果如图:

在这里插入图片描述

只有一条数据的时候,不显示文件夹

再写入一条数据,key命名为test2

    @Testvoid contextLoads() {redisCache.setCacheObject(getCacheKey("test2"), "测试2");}

运行测试用例,效果如图:

在这里插入图片描述

查询数据

    @Testvoid getData() {// 判断键是否存在if (redisCache.hasKey("chh-api:data:test")) {Object object = redisCache.getCacheObject("chh-api:data:test");System.out.println(object);} else {System.out.println("不存在");}}

运行测试用例,效果如图:

在这里插入图片描述

遍历 Redis 文件夹

    @Testvoid getAllData() {Collection<String> keys = redisCache.keys("chh-api:data:*");for (String key : keys) {Object object = redisCache.getCacheObject(key);System.out.println(object);}}

运行测试用例,效果如图:

在这里插入图片描述

http://www.lryc.cn/news/128287.html

相关文章:

  • c++11 标准模板(STL)(std::basic_stringbuf)(六)
  • iceberg系列之 hadoop catalog 小文件合并实战
  • 神经网络基础-神经网络补充概念-25-深层神经网络
  • MySQL— 基础语法大全及操作演示!!!(上)
  • [golang gin框架] 46.Gin商城项目-微服务实战之后台Rbac客户端调用微服务权限验证以及Rbac微服务数据库抽离
  • 域名和ip的关系
  • excel日期函数篇1
  • Leetcode151 翻转字符串中的单词
  • PHP FTP的相关函数及简单使用示例
  • 高光谱 | 矿物识别和分类标签数据制作、农作物病虫害数据分类、土壤有机质含量回归与制图、木材含水量评估和制图
  • 【数据结构】二叉树篇| 纲领思路01+刷题
  • 系统架构设计师---计算机基础知识之数据库系统结构与规范化
  • PyCharm连接Docker中的容器(ubuntu)
  • 安防视频汇聚平台EasyCVR视频监控综合管理平台H.265转码功能更新,新增分辨率配置的具体步骤
  • 全平台数据(数据库)管理工具 DataCap 管理 Rainbond 上的所有数据库
  • “深入探究JVM内部机制:从字节码到实际执行“
  • C++写文件,直接写入结构体
  • 【Spring专题】Spring之Bean的生命周期源码解析——阶段二(二)(IOC之属性填充/依赖注入)
  • 线程|线程的使用、四种实现方式
  • Facebook 应用未启用:这款应用目前无法使用,应用开发者已得知这个问题。
  • (十八)大数据实战——Hive的metastore元数据服务安装
  • ubuntu 22.04 LTS 在 llvm release/17.x 分支上编译 cookbook llvm example Chapter 02
  • 【仿写tomcat】三、通过socket读取http请求信息
  • Hive的窗口函数与行列转换函数及JSON解析函数
  • CSS中的z-index属性有什么作用?如何控制元素在层叠上下文中的显示顺序?
  • c语言——字符转ASCLL码
  • ardupilot开发 --- 安装与调参篇
  • BC108 矩阵交换
  • 如何发现系统改进点,优化点,提高点,新系统 边界感不要太强
  • 5G无人露天矿山解决方案