【Redis系列】RedisTemplate的使用与注意事项


目录

一.什么是RedisTemplate

二.如何使用RedisTemplate

RedisTemplate的API

序列化

三.StringRedisTemplate


一.什么是RedisTemplate

RedisTemplate 是一个工具类,由 Spring 官方提供的方便操作 Redis 数据库的一个工具类,来源于 org.springframework.data.redis.core 包下。其本质属于 Spring-Data 模块下的 Spring-Data-Redis 部分,它提供了从 Spring 应用程序轻松配置和访问 Redis的功能。

Spring-Data-Redis 是通过整合Lettuce和Jedis这俩种Redis客户端产生的,对外则提供了RedisTemplate这样统一的API来供调用者访问。它既支持Luttuce的响应式编程也支持JDK中集合的实现。

二.如何使用RedisTemplate

首先要导入相关依赖

        <!--Redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
        <!--连接池依赖--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.11.1</version></dependency>

导入相关依赖之后,通过配置文件 application.yml 进行配置,由于 RedisTemplate 是整合的Lettuce和Jedis,因此在配置连接池的时候需要进行选择是使用Lettuce还是Jedis(默认是Lettuce)

spring:data:redis:host: Redis所在主机地址port: Redis对应端口号默认6379password: 密码lettuce:pool:max-active: 最大连接数max-wait: 等待时长max-idle: 最大空闲连接min-idle: 最小空闲连接

在配置完成后,通过依赖注入就可以直接使用

    @Autowiredprivate RedisTemplate redisTemplate;@Testvoid testCode() {String checheCode = "cheche_code";String code = "168901";//写入RedisredisTemplate.opsForValue().set(checheCode, code);//读出RedisObject o = redisTemplate.opsForValue().get(checheCode);System.out.println("验证码为" + o);}

运行结果:

RedisTemplate的API

RedisTemplate 提供了丰富的方法来实现对 Redis 的各种操作,包括但不限于字符串、哈希、列表、集合和有序集合等数据结构的操作。以下是一些常用的 RedisTemplate API:

字符串操作

  • opsForValue().set(key, value): 设置字符串值。
  • opsForValue().get(key): 获取字符串值。
  • opsForValue().incr(key): 字符串值自增。
  • opsForValue().decr(key): 字符串值自减。

哈希操作

  • opsForHash().getOperations().put(key, hashKey, value): 向哈希中添加键值对。
  • opsForHash().getOperations().get(key, hashKey): 获取哈希中的值。
  • opsForHash().getOperations().entries(key): 获取哈希中的所有键值对。

列表操作

  • opsForList().leftPush(key, value): 从列表左侧添加元素。
  • opsForList().rightPush(key, value): 从列表右侧添加元素。
  • opsForList().leftPop(key): 从列表左侧弹出元素。
  • opsForList().rightPop(key): 从列表右侧弹出元素。

集合操作

  • opsForSet().add(key, value): 向集合中添加元素。
  • opsForSet().members(key): 获取集合中的所有元素。
  • opsForSet().remove(key, value): 从集合中移除元素。

有序集合操作

  • opsForZSet().add(key, value, score): 向有序集合中添加元素,并指定分数。
  • opsForZSet().range(key, start, end): 获取有序集合中指定分数范围内的元素。
  • opsForZSet().removeRangeByScore(key, minScore, maxScore): 按分数范围移除有序集合中的元素。

键操作

  • delete(key): 删除键。
  • hasKey(key): 检查键是否存在。
  • keys(pattern): 根据模式匹配获取所有键。

事务

  • multi(): 开启事务。
  • exec(): 提交事务。

发布/订阅

  • convertAndSend(channel, message): 发布消息。
  • subscribe(RedisMessageListenerContainer, MessageListener): 订阅消息。

连接管理

  • getConnectionFactory(): 获取连接工厂。
  • getExecutor(): 获取执行器。

序列化

  • setKeySerializer(Serializer): 设置键的序列化器。
  • setValueSerializer(Serializer): 设置值的序列化器。

更多操作可以查看官方提供的API文档:RedisTemplate (Spring Data Redis 3.3.2 API)

序列化

我们打开Redis图形化工具查看一下刚才的验证码会发现刚才存入的验证码变成了一堆乱码

这是因为Redis的序列化并没有按照我们预期的进行转化,我们需要自己去重写一个序列化,如下将key设置为String类型、value设置为json类型,最后将这个对象交给Spring管理,之后在调用该对象的时候就会自动选择我们配置的这个

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {//创建RedisTemplate对象RedisTemplate<String, Object> template = new RedisTemplate<>();//设置连接工厂template.setConnectionFactory(connectionFactory);//创建JSON序列化工具GenericJackson2JsonRedisSerializer jsonSerializer = new GenericJackson2JsonRedisSerializer();//设置key的序列化template.setKeySerializer(RedisSerializer.string());template.setHashValueSerializer(RedisSerializer.string());//设置value的序列化template.setValueSerializer(jsonSerializer);template.setHashValueSerializer(jsonSerializer);return template;}
}

对于JSON序列化工具,我们也需要引入依赖:

        <!--jackson依赖--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.17.1</version></dependency>

我们再次打开测试观察结果:

@SpringBootTest
class RedisDemoApplicationTests {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;@Testvoid testCode() {String checheCode = "cheche_code";String code = "168901";//写入RedisredisTemplate.opsForValue().set(checheCode, code);//读出RedisObject o = redisTemplate.opsForValue().get(checheCode);System.out.println("验证码为" + o);}
}

我们可以发现数据已经正常显示出来了

三.StringRedisTemplate

由于存储在 Redis 中的 key 和 value 通常是很常见的 String 类型,Redis模块提供了 RedisConnection 和 RedisTemplate 的扩展,分是 StringRedisConnection 和 StringRedisTemplate,作为字符串操作的解决方案。

打开源码我们可以看见对于Key、Value、HashKey、HashValue都是进行String类型的序列化。

因此对于一些复杂类型,如对象在StringRedisTemplate的时候往往需要自己手动序列化将对象转为JSON再存入Redis。




 本次的分享就到此为止了,希望我的分享能给您带来帮助,创作不易也欢迎大家三连支持,你们的点赞就是博主更新最大的动力!如有不同意见,欢迎评论区积极讨论交流,让我们一起学习进步!有相关问题也可以私信博主,评论区和私信都会认真查看的,我们下次再见

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LLM】-10-部署llama-3-chinese-8b-instruct-v3 大模型

目录 1、模型下载 2、下载项目代码 3、启动模型 4、模型调用 4.1、completion接口 4.2、聊天&#xff08;chat completion&#xff09; 4.3、多轮对话 4.4、文本嵌入向量 5、Java代码实现调用 由于在【LLM】-09-搭建问答系统-对输入Prompt检查-CSDN博客 关于提示词注入…

涉密移动载体智能柜管控系统DW-S404|国产自主可控

东识移动载体管控系统载体柜系统采用RFID识别技术&#xff0c;结合智能载体管理软件&#xff0c;实现了文件载体权限管理、定位管理、智能存取、智能盘点、在线监控等功能&#xff0c;同时对文件载体进行规范化、智能化、自动化管理。工作人员通过授权进行文件、载体、卷宗等存…

C# 简单的单元测试

文章目录 前言参考文档新建控制台项目新建测试项目添加引用添加测试方法测试结果(有错误)测试结果&#xff0c;通过正规的方法抛出异常 总结 前言 听说复杂的项目最好都要单元测试一下。我这里也试试单元测试这个功能。到时候调试起来也方便。 参考文档 C# 单元测试&#xf…

这一文,关于 Java 泛型的点点滴滴 一(泛型基础、类型擦除)

作为一个 Java 程序员&#xff0c;用到泛型最多的&#xff0c;我估计应该就是这一行代码&#xff1a; List<String> list new ArrayList<>();这也是所有 Java 程序员的泛型之路开始的地方啊。 不过本文讲泛型&#xff0c;先不从这里开始讲&#xff0c;而是再往前…

富唯智能转运机器人:高效、智能、未来的选择

在现代工业中&#xff0c;高效的物流和物料处理是提升生产效率的关键。富唯智能转运机器人&#xff0c;以其卓越的技术和智能化的设计&#xff0c;为各行业提供了完美的解决方案。 产品概述 富唯智能转运机器人搭载ICD系列核心控制器&#xff0c;拥有多种移载平台&#xff0c…

dpdk编译安装以及接收udp报文(基于ubuntu)

目录 1、编译 2、设置运行环境 3、使用dpdk接收udp报文 3.1、设置发送端arp信息 3.2、测试 3.3、代码 4、其他 1、编译 代码下载&#xff1a; DPDK 下载版本&#xff1a;DPDK 19.08.2 export RTE_SDK/root/dpdk-stable-19.08.2/ export RTE_TARGETx86_64-native-li…

Python 教程(五):理解条件语句和循环结构

目录 专栏列表前言条件语句if 语句elif 语句else 语句示例 循环结构for 循环while 循环break 和 continue实例演示 循环控制语句range 函数enumerate 函数 模式匹配总结 在前四篇教程中&#xff0c;我们学习了 Python 的基本语法和数据结构。本篇教程&#xff0c;我们将深入探讨…

lua 游戏架构 之 游戏 AI (八)ai_tbl 行为和优先级

定义一系列的AI行为类型和它们的优先级&#xff0c;以及一个映射表ai_tbl来关联每种AI行为类型与对应的脚本文件和优先级。以下是对代码的详细解释&#xff1a; lua 游戏架构 之 游戏 AI &#xff08;一&#xff09;ai_base-CSDN博客https://blog.csdn.net/heyuchang666/artic…

【ACM独立出版,高录用】第四届物联网与机器学习国际学术会议(IoTML 2024,8月23-25)

2024年第四届物联网与机器学习国际学术会议&#xff08;IoTML 2024&#xff09;将于2024年8月23-25日在中国南昌召开。 会议将围绕着物联网和机器学习开展&#xff0c;探讨本领域发展所面临的关键性挑战问题和研究方向&#xff0c;以期推动该领域理论、技术在高校和企业的发展和…

【全国大学生电子设计竞赛】2022年A题

&#x1f970;&#x1f970;全国大学生电子设计大赛学习资料专栏已开启&#xff0c;限时免费&#xff0c;速速收藏~

信息收集总结

关注内容 1. 企业股权架构&#xff1a;了解公司的股权结构&#xff0c;确定控股子公司&#xff0c;收集边缘业务系统资产。 2. 网站备案&#xff1a;获取公司的备案信息&#xff0c;包括根域名及其子域名。 3. 对外发布的产品&#xff1a;收集公司公开发布的产品信息&…

剑指Meta?1230 亿参数,Mistral 发布 Large 2 旗舰 AI 模型

7 月 25 日消息&#xff0c;AI 竞赛日益激烈&#xff0c;Meta 公司昨日推出开源 Llama 3.1 模型之后&#xff0c;法国人工智能初创公司 Mistral 也加入了竞争行列&#xff0c;在今日凌晨推出了新一代旗舰模型 Mistral Large 2。 Mistral AI 发布 Mistral Large 2&#xff0c;1…

[算法题]添加字符

题目链接: 添加字符 因为数据量很小, 所以直接两层遍历暴力求解, 依次将字符串 A 与字符串 B 相同位进行比对, 每轮记录当前轮次不相等的位数是几位, 并与历史上记录的比较取小值, 图示: 经过比较后, 题解就为 1, 空白处不用管, 因为题意是可以在开头和末尾添加字符的, 添加与…

c生万物系列(加减乘除模篇)

为了提高c语言的运行效率&#xff0c;我们需要采用更高效的运算&#xff0c;那么切入点就是随处可见的基本运算符合&#xff0c;从底层架构考虑&#xff0c;加减乘除的效率比位运算低很多&#xff0c;为了能够更好迎合CPU的二进制&#xff0c;有必要取代基本的加减乘除以及求余…

【“微软蓝屏”事件暴露了网络安全哪些问题?】建设安全稳固的网络基础设施

目录 前言一、软件更新流程中的风险管理和质量控制机制&#xff08;一&#xff09;测试流程及风险识别&#xff08;二&#xff09;风险管理策略&#xff08;三&#xff09;质量控制措施 二、预防类似大规模故障的最佳方案或应急响应对策&#xff08;一&#xff09;冗余系统设计…

2024最火的知识付费系统小程序+PC+H5三端数据互通支持采集资源开源版

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 系统含带 裂变模式 可以助力好友来获取资源共享 分站功能 独立后台 会员功能 卡密功能 二级分销功能等 自行研究看 后期有更新新版会在持续发布 目前版本是3.5 是我花三天时间修复的 …

科研论文之Word论文编辑

这篇文章介绍在word中怎么编辑论文&#xff0c;包括论文的模板、论文的字体设置、论文的插图、论文的参考文献等等。 为便利知识传播&#xff0c;我的所有文章都不会设置收费专栏。但文章写作不易&#xff0c;如有可能麻烦打赏一下&#xff0c;金额随意。收款码见下图&#xff…

《程序猿入职必会(5) · CURD 页面细节规范 》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

nodejs - MongoDB 学习笔记

一、简介 1、MongoDB 是什么 MongoDB 是一个基于分布式文件存储的数据库&#xff0c;官方地址 https://www.mongodb.com/ 2、数据看是什么 数据库&#xff08;DataBase&#xff09;是按照数据结构来组织、存储和管理数据的应用程序。 3、数据库的作用 主要作用是 管理数据…

RedHat9 | Ansible 编写循环和条件任务

环境版本说明 RedHat9 [Red Hat Enterprise Linux release 9.0]Ansible [core 2.13.3]Python [3.9.10]jinja [3.1.2] 1. 利用循环迭代任务 通过利用循环&#xff0c;管理员无需编写多个使用同一模块的任务。Ansible支持使用loop关键字对一组项目迭代任务&#xff0c;通过配置…