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

Redis基础知识-3

RedisTemplate对多种数据结构的操作

1. String类型

示例代码:
// 保存数据
redisTemplate.opsForValue().set("user:1001", "John Doe"); // 设置键值对,无过期时间
redisTemplate.opsForValue().set("user:1002", "Jane Smith", 10, TimeUnit.MINUTES); // 设置键值对并设置10分钟过期// 获取数据
String user = redisTemplate.opsForValue().get("user:1001");
System.out.println("获取到的用户: " + user); // 输出:John Doe
应用场景:
  • 简单缓存:例如缓存用户的姓名、常量等单项数据。
  • 计数器:结合INCR命令实现原子递增,如统计网站访问量。

2. Hash类型

Redis的Hash数据类型适合存储对象,其中每个字段可以是字符串、数值等。

示例代码:
// 保存数据(保存用户对象的多个字段)
redisTemplate.opsForHash().put("user:profile", "name", "Alice");
redis_TEMPLATE.opsForHash().put("user:profile", "age", 30);// 获取单个字段
Object name = redisTemplate.opsForHash().get("user:profile", "name");
System.out.println("用户名:" + name); // 输出:Alice// 获取所有字段和值(返回Map)
Map<Object, Object> user = redisTemplate.opsForHash().entries("user:profile");
System.out.println("用户资料:" + user); // 输出:{name=Alice, age=30}
应用场景:
  • 对象缓存:存储用户信息(name、age、email等)。
  • 批量更新:通过hashOperations.putAll()一次性设置多个字段。

3. List类型

Redis的List是链表结构,支持从两端插入或弹出元素。

示例代码:
// 左侧插入元素(先进后出,类似栈)
redisTemplate.opsForList().leftPush("messageQueue", "Message1");
redisTemplate.opsForList().leftPush("messageQueue", "Message2");// 获取所有元素(从左到右)
List<String> messages = redisTemplate.opsForList().range("messageQueue", 0, -1);
System.out.println("消息队列:" + messages); // 输出:[Message2, Message1]// 右侧弹出元素(先进先出,类似队列)
String popped = redisTemplate.opsForList().rightPop("messageQueue");
System.out.println("弹出的消息:" + popped); // 输出:Message1
应用场景:
  • 消息队列:实现生产者-消费者模式(如异步处理任务)。
  • 记录日志:按时间或顺序保存数据。

4. Set类型

Set是一种无序、不重复的集合,常用于唯一性存储。

示例代码:
// 添加元素到集合
redisTemplate.opsForSet().add("tags", "Java", "Redis", "Spring");// 获取所有元素
Set<String> tags = redisTemplate.opsForSet().members("tags");
System.out.println("标签集合:" + tags); // 输出:[Java, Redis, Spring]// 判断元素是否存在
Boolean exists = redisTemplate.opsForSet().isMember("tags", "Redis");
System.out.println("Redis标签是否存在?" + exists); // 输出:true
应用场景:
  • 标签系统:统计不重复的用户标签或关键词。
  • 随机推荐:通过S随机获取选择用户。

5. Sorted Set类型

Sorted Set是有序且无重复的集合,每个元素关联一个分数(score)用于排序。

示例代码:
// 添加元素(分数和值)
redisTemplate.opsForZSet().add("leaderboard", "PlayerA", 95.0); // 分数95
redisTemplate.opsForZSet().add("leaderboard", "PlayerB", 88.0); // 分数88// 获取排名前3的用户(按分数降序)
Set<String> topPlayers = redisTemplate.opsForZSet().reverseRange("leaderboard", 0, 2);
System.out.println("排行榜前3名:" + topPlayers); // 输出:[PlayerA, PlayerB]// 获取某个玩家的排名
Long rank = redisTemplate.opsForZSet().reverseRank("leaderboard", "PlayerB");
System.out.println("PlayerB的排名:" + rank); // 输出:1(第2位)
应用场景:
  • 排名系统:如游戏或考试的分数排名。
  • 优先级队列:根据分数动态调整处理顺序。

通用注意事项:

  1. 序列化配置
    • 默认情况下,RedisTemplate会将Java对象序列化为二进制(如JdkSerializationRedisSerializer),适合存储简单字符串或复杂对象。
    • 若需要存储JSON格式的类,可配置:
      RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
      redisTemplate.setKeySerializer(new StringRedisSerializer());
      redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
      
  2. 过期时间:通过第二个参数为操作设置有效期,例如:
    redisTemplate.opsForValue().set("key", "value", Duration.ofHours(1));
    
  3. 事务与管道:使用multi()exec()opsFor...的批量操作优化性能。

相关文章:

Redis基础知识-3

RedisTemplate对多种数据结构的操作 1. String类型 示例代码&#xff1a; // 保存数据 redisTemplate.opsForValue().set("user:1001", "John Doe"); // 设置键值对&#xff0c;无过期时间 redisTemplate.opsForValue().set("user:1002", &qu…...

Git Rebase 操作中丢失提交的恢复方法

背景介绍 在团队协作中,使用 Git 进行版本控制是常见实践。然而,有时在执行 git rebase 或者其他操作后,我们可能会发现自己的提交记录"消失"了,这往往让开发者感到恐慌。本文将介绍几种在 rebase 后恢复丢失提交的方法。 问题描述 当我们执行以下操作时,可能…...

【diffusers 进阶(十五)】dataset 工具,Parquet和Arrow 数据文件格式,load dataset 方法

系列文章目录 【diffusers 极速入门&#xff08;一&#xff09;】pipeline 实际调用的是什么&#xff1f; call 方法!【diffusers 极速入门&#xff08;二&#xff09;】如何得到扩散去噪的中间结果&#xff1f;Pipeline callbacks 管道回调函数【diffusers极速入门&#xff0…...

unity各个面板说明

游戏开发&#xff0c;unity各个面板说明 提示&#xff1a;帮帮志会陆续更新非常多的IT技术知识&#xff0c;希望分享的内容对您有用。本章分享的是Python基础语法。前后每一小节的内容是存在的有&#xff1a;学习and理解的关联性&#xff0c;希望对您有用~ unity简介-unity基础…...

游戏引擎学习第199天

回顾并发现我们可能破坏了某些东西 目前&#xff0c;我们的调试 UI 运行得相对顺利&#xff0c;可以创建可修改的调试变量&#xff0c;也可以插入分析器&#xff08;profiler&#xff09;等特殊视图组件&#xff0c;并进行一些交互操作。然而&#xff0c;在上一次结束时&#…...

Linux红帽:RHCSA认证知识讲解(十)使用 tar创建归档和压缩文件

Linux红帽&#xff1a;RHCSA认证知识讲解&#xff08;十&#xff09;使用 tar创建归档和压缩文件 前言一、归档与压缩的基本概念1.1 归档与压缩的区别 二、使用tar创建归档文件2.1 tar命令格式2.2 示例操作 三、使用tar进行压缩3.2 命令格式3.3 示例操作 前言 在红帽 Linux 系…...

端到端机器学习流水线(MLflow跟踪实验)

目录 端到端机器学习流水线(MLflow跟踪实验)1. 引言2. 项目背景与意义2.1 端到端机器学习流水线的重要性2.2 MLflow的作用2.3 工业级数据处理需求3. 数据集生成与介绍3.1 数据集构成3.2 数据生成方法4. 机器学习流水线与MLflow跟踪4.1 端到端机器学习流水线4.2 MLflow跟踪实验…...

相平面案例分析爱情故事

动态系统的分析可以分为三个步骤&#xff1a;第一步描述系统&#xff0c;通过语言来描述系统的特性&#xff0c;第一步描述系统&#xff0c;即通过语言来描述系统的特性&#xff1b;第二步数学分析&#xff0c;即使用数学工具对系统进行量化解析&#xff1b;第三步结果与讨论&a…...

《2024年全球DDoS攻击态势分析》

从攻击态势来看&#xff0c;2024年DDoS攻击频次继续呈增长趋势&#xff0c;2024年同步增加1.3倍&#xff1b;超大规模攻击激增&#xff0c;超800Gbps同比增长3.1倍&#xff0c;累计高达771次&#xff0c;且互联网史上最大带宽和最大包速率攻击均被刷新&#xff1b;瞬时泛洪攻击…...

RTC实时时钟M41T11M6F国产替代FRTC4111S

由NYFEA徕飞公司制造的FRTC4111S是一种低功耗的串行实时时钟(RTC)&#xff0c;国产直接替代ST的M41T11M6F,其具有56字节的NVRAM&#xff0c;32.768 kHz振荡器(由外部晶体控制)和RAM的前8字节用于时钟/日历功能并以二进制编码十进制(BCD)格式配置。地址和数据通过两行双向总线串…...

Uni-app PDF Annotation plugin library online API examples

This article introduces the online version of the ElasticPDF API tutorial for the PDF annotation plug-in library in Uni-app projects. The API includes ① Export edited PDF data; ② Export annotations json data; ③ Reload old annotations; ④ Change files; ⑤…...

SpringKafka消息发布:KafkaTemplate与事务支持

文章目录 引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优化总结 引言 在现代分布式系统架构中&#xff0c;Apache Kafka作为高吞吐量的消息系统&#xff0c;被广泛应用于事件驱动应用开发。Spring Kafka为Java开发者提供了与Kafka交互…...

进行性核上性麻痹护理指南,助患者安稳生活

生活细致照料 安全保障&#xff1a;进行性核上性麻痹患者易出现平衡障碍、步态不稳&#xff0c;居家环境需格外留意安全。移除地面障碍物&#xff0c;保持通道畅通&#xff0c;在卫生间、走廊安装扶手&#xff0c;防止患者摔倒受伤。 饮食协助&#xff1a;患者常伴有吞咽困难&…...

提取嘉立创3D封装

嘉立创上元器件基本都有3D封装&#xff0c;当用AD或其他软件画PCB时&#xff0c;需要用到的3D封装可以从嘉立创EDA中提取。 首先新建工程&#xff0c;然后放置要提取3D封装的器件 导出-》3D文件 因为导出的文件中包含器件的3D封装和PCB板&#xff0c;需要把PCB板删除才能使用…...

工作记录 2017-03-24

工作记录 2017-03-24 序号 工作 相关人员 1 修改了邮件上的问题。 更新RD服务器。 郝 更新的问题 1、修改了New User时 init的保存。 2、文件的查询加了ID。 3、加了 patient insurance secondary 4、修改了payment detail的处理。 识别引擎监控 Ps (iCDA LOG :剔除…...

chromium魔改——修改 navigator.webdriver 检测

chromium源码官网 https://source.chromium.org/chromium/chromium/src 说下修改的chromium源码思路&#xff1a; 首先在修改源码过检测之前&#xff0c;我们要知道它是怎么检测的&#xff0c;找到他通过哪个JS的API来做的检测&#xff0c;只有知道了如何检测&#xff0c;我们…...

Qt 信号量使用方法

Qt 信号量使用方法 QSemaphore 类 常用函数介绍 函数名称函数功能QSemaphore()构造并初始化对象acquire()尝试获取n个资源&#xff0c;如果没有那么多资源&#xff0c;线程将阻塞直到有n个资源可用available()返回当前信号量可用的资源个数&#xff0c;这个数永远不可能为负…...

训练或微调以生成新组合结构

能通过训练或者微调&#xff0c;产生其它没有的组合的结构&#xff0c;比如有化学组成和空年组&#xff0c;想要生成指定化学成分指定空间组的结构&#xff0c;以下是针对需求的详细分析与实现思路&#xff0c;同时给出相应的 Python 代码示例。 1. 训练或微调以生成新组合结构…...

【通俗易懂说模型】生成对抗网络·GAN

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;《深度学习理论直觉三十讲》_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目…...

容器适配器-stack栈

C标准库不只是包含了顺序容器&#xff0c;还包含一些为满足特殊需求而设计的容器&#xff0c;它们提供简单的接口。 这些容器可被归类为容器适配器(container adapter)&#xff0c;它们是改造别的标准顺序容器&#xff0c;使之满足特殊需求的新容器。 适配器:也称配置器,把一…...

7-6 混合类型数据格式化输入

本题要求编写程序&#xff0c;顺序读入浮点数1、整数、字符、浮点数2&#xff0c;再按照字符、整数、浮点数1、浮点数2的顺序输出。 输入格式&#xff1a; 输入在一行中顺序给出浮点数1、整数、字符、浮点数2&#xff0c;其间以1个空格分隔。 输出格式&#xff1a; 在一行中…...

【UE5 C++课程系列笔记】31——创建Json并保存为文件

目录 方式一&#xff08;不推荐&#xff09; 方式二&#xff08;推荐&#xff09; 一、生成普通Json对象 二、对象嵌套对象 三、对象嵌套数组 四、对象嵌套数组再嵌套对象 方式一&#xff08;不推荐&#xff09; 如下代码实现了把JSON字符串保存到文件中 #include &qu…...

Photoshop 2025 Mac中文 Ps图像编辑软件

Photoshop 2025 Mac中文 Ps图像编辑软件 文章目录 Photoshop 2025 Mac中文 Ps图像编辑软件一、介绍二、效果三、下载 一、介绍 Adobe Photoshop 2025 Mac版集成了多种强大的图像编辑、处理和创作功能。①强化了Adobe Sensei AI的应用&#xff0c;通过智能抠图、自动修复、图像…...

linux文件上传下载lrzsz

lrzsz 是一个在 Linux 系统中用于通过串行端口(如 ZMODEM、XMODEM、YMODEM 等协议)进行文件上传和下载的工具集。它通常用于在终端环境中通过串口或 SSH 连接传输文件。 安装 lrzsz 在大多数 Linux 发行版中,你可以使用包管理器来安装 lrzsz。 Debian/Ubuntu: sudo apt-ge…...

MySQL超全笔记

1、初识SQL 什么是数据库 数据库 ( DataBase , 简称DB ) 概念 : 长期存放在计算机内,有组织,可共享的大量数据的集合,是一个数据 “仓库” 作用 : 保存,并能安全管理数据(如:增删改查等),减少冗余… 数据库总览 : 关系型数据库 ( SQL ) MySQL , Oracle , SQL Server , SQ…...

使用Redis构架你自己的私有大模型

使用Redis构架你自己的私有大模型--楼兰 ​ Redis你通常用来做什么?缓存?分布式锁?数据过滤器?不够不够,这远远不够。之前给大家分享过基于Redis Stack提供的一系列插件,完全可以把Redis作为一个类似于Elastic Search的JSON数据库使用。不光可以存储并操作JSON格式的数据…...

2.4路径问题专题:LeeCode 931.下降路径最小和

动态规划解决最小下降路径和问题 1. 题目链接 LeetCode 931. 最小下降路径和 2. 题目描述 给定一个 n x n 的整数矩阵 matrix&#xff0c;找到一条从第一行到最后一行的下降路径&#xff0c;使得路径上的数字和最小。下降路径可以从第一行的任意元素出发&#xff0c;每一步…...

从内核到应用层:Linux缓冲机制与语言缓冲区的协同解析

系列文章目录 文章目录 系列文章目录前言一、缓冲区1.1 示例11.2 缓冲区的概念 二、缓冲区刷新方案三、缓冲区的作用及存储 前言 上篇我们介绍了&#xff0c;文件的重定向操作以及文件描述符的概念&#xff0c;今天我们再来学习一个和文件相关的知识-----------用户缓冲区。 在…...

【AI News | 20250403】每日AI进展

AI Repos 1、llm-server-docs 项目提供了一份基于Debian系统的本地语言模型服务器搭建指南&#xff0c;适用于Linux初学者。教程涵盖驱动安装、GPU功耗设置、自动登录配置及开机自启脚本部署等关键步骤&#xff0c;支持Ollama/vLLM等多种OpenAI兼容方案。方案设计强调四大原则…...

深入理解SQL中的<>运算符:不等于的灵活运用

在SQL的世界里&#xff0c;数据的筛选与查询是最常见的操作之一。在编写查询语句时&#xff0c;比较运算符是我们不可忽视的工具&#xff0c;其中&#xff0c;<> 运算符作为 不等于 的代表&#xff0c;起着至关重要的作用。它不仅能够帮助我们筛选出符合特定条件的数据&a…...