RedisTemplate用法详解

RedisTemplate操作Redis, 看这一篇文章就够了 RedisTemplate 是 Spring Framework 提供的用于操作 Redis 数据库的模板类。通过 RedisTemplate,开发人员可以方便地使用 Spring 提供的 API 来对 Redis 进行操作,比如设置值、获取值、删除值等。RedisTemplate 封装了 Redis 连接、数据序列化、异常处理等操作,简化了与 Redis 的交互过程。 一般情况下,开发人员需要配置 Redis 连接池、序列化器等信息,并将 RedisTemplate 注入到需要使用 Redis 的 Be 阅读详情
前言

Redis可以存储键与5种不同的数据结构类型之间的映射,这5种数据结构类型为 String(字符串)、List(列表)、Set(集合)、Hash(散列)和Zset(有序集合)。

Spring-data-redis

Spring-data-redis是spring大家族的一部分,提供了在spring应用中通过简单的配置访问redis服务,对redis底层开发包(Jedis,JRedis,and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。
官网:http://projects.spring.io/spring-data-redis/
项目地址:https://github.com/spring-projects/spring-data-redis

Spring-data-redis功能介绍

jedis客户端在编程实施方面存在如下不足:
1、connection管理缺乏自动化,connection-pool的设计缺少必要的容器支持。
2、数据操作需要关注“序列化”/“反序列化”,因为jedis的客户端API接受的数据类型为string和byte,对结构化数据(json,xml,pojo等)操作需要额外的支持。
3、事务操作纯粹为硬编码。
4、pub/sub功能,缺乏必要的设计模式支持,对于开发者而言需要关注的太多。

spring-data-redis针对jedis提供了如下功能:

1、连接池自动管理,提供了一个高度封装的“RedisTemplate”类

2、针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口

  • ValueOperations:简单K-V操作
  • SetOperations:set类型数据操作
  • ZSetOperations:zset类型数据操作
  • HashOperations:针对map类型的数据操作
  • ListOperations:针对list类型的数据操作

3、提供了对key的“bound”(绑定)便捷化操作API,可以通过bound封装指定的key,然后进行一系列的操作而无须“显式”的再次指定Key,即BoundKeyOperations:
BoundValueOperations
BoundSetOperations
BoundListOperations
BoundSetOperations
BoundHashOperations
4、将事务操作封装,有容器控制。
5、针对数据的“序列化/反序列化”,提供了多种可选择策略(RedisSerializer)。

JdkSerializationRedisSerializer:POJO对象的存取场景,使用JDK本身序列化机制,将pojo类通过ObjectInputStream/ObjectOutputStream进行序列化操作,最终redis-server中将存储字节序列。是目前最常用的序列化策略。

StringRedisSerializer:Key或者value为字符串的场景,根据指定的charset对数据的字节序列编码成string,是“new String(bytes, charset)”和“string.getBytes(charset)”的直接封装。是最轻量级和高效的策略。

JacksonJsonRedisSerializer:jackson-json工具提供了javabean与json之间的转换能力,可以将pojo实例序列化成json格式存储在redis中,也可以将json格式的数据转换成pojo实例。因为jackson工具在序列化和反序列化时,需要明确指定Class类型,因此此策略封装起来稍微复杂。【需要jackson-mapper-asl工具支持】

OxmSerializer:提供了将javabean与xml之间的转换能力,目前可用的三方支持包括jaxb,apache-xmlbeans;redis存储的数据将是xml工具。不过使用此策略,编程将会有些难度,而且效率最低;不建议使用。【需要spring-oxm模块的支持】

5、 针对“序列化和发序列化”中JdkSerializationRedisSerializer和StringRedisSerializer是最基础的策略,原则上,我们可以将数据存储为任何格式以便应用程序存取和解析(其中应用包括app,hadoop等其他工具),不过在设计时仍然不推荐直接使用
“JacksonJsonRedisSerializer”和“OxmSerializer”,因为无论是json还是xml,他们本身仍然是String。如果你的数据需要被第三方工具解析,那么数据应该使用StringRedisSerializer而不是JdkSerializationRedisSerializer。如果你的数据格式必须为json或者xml,那么在编程级别,在redisTemplate配置中仍然使用StringRedisSerializer,在存储之前或者读取之后,使用“SerializationUtils”工具转换转换成json或者xml

6、.基于设计模式,和JMS开发思路,将pub/sub的API设计进行了封装,使开发更加便捷。

7、spring-data-redis中,并没有对sharding提供良好的封装,如果你的架构是基于sharding,那么你需要自己去实现,这也是sdr和jedis相比,唯一缺少的特性。

以下都省略了redisTemplate

Redis的String数据结构

redisTemplate.opsForValue().set("num","123");
redisTemplate.opsForValue().set("num","123",10, TimeUnit.SECONDS);
//偏移量
template.opsForValue().set("key","redis", 6);
redisTemplate.opsForValue().get("num")
//设置键的字符串值并返回其旧值
template.opsForValue().set("getSetTest","test");
template.opsForValue().size("key")
Redis的List数据结构

1、Long size(K key);
返回存储在键中的列表的长度。如果键不存在,则将其解释为空列表,并返回0。当key存储的值不是列表时返回错误。
2、Long leftPush(K key, V value);
将所有指定的值插入存储在键的列表的头部。如果键不存在,则在执行推送操作之前将其创建为空列表。(从左边插入)
3、Long leftPushAll(K key, V… values);
批量把一个数组插入到列表中
4、Long rightPush(K key, V value);
将所有指定的值插入存储在键的列表的头部。如果键不存在,则在执行推送操作之前将其创建为空列表。(从右边插入)

5、Long rightPushAll(K key, V… values);
6、void set(K key, long index, V value);
在列表中index的位置设置value值
7、Long remove(K key, long count, Object value);
从存储在键中的列表中删除等于值的元素的第一个计数事件。
计数参数以下列方式影响操作:
count> 0:删除等于从头到尾移动的值的元素。
count <0:删除等于从尾到头移动的值的元素。
count = 0:删除等于value的所有元素。
8、V index(K key, long index);
根据下表获取列表中的值,下标是从0开始的
9、V leftPop(K key);
弹出最左边的元素,弹出之后该值在列表中将不复存在
10、V rightPop(K key);
弹出最右边的元素,弹出之后该值在列表中将不复存在

Redis的Hash数据机构

1、Long delete(H key, Object… hashKeys);
删除给定的哈希hashKeys
2、Boolean hasKey(H key, Object hashKey);
确定哈希hashKey是否存在
3、HV get(H key, Object hashKey);
从键中的哈希获取给定hashKey的值
4、 Set keys(H key);
获取key所对应的散列表的key
5、Long size(H key);
获取key所对应的散列表的大小个数
6、 void putAll(H key, Map<? extends HK, ? extends HV> m);
使用m中提供的多个散列字段设置到key对应的散列表中
7、 void put(H key, HK hashKey, HV value);
设置散列hashKey的值
8、 List values(H key);
获取整个哈希存储的值根据密钥
9、 Map<HK, HV> entries(H key);
获取整个哈希存储根据密钥
10、 Cursor<Map.Entry<HK, HV>> scan(H key, ScanOptions options);
使用Cursor在key的hash中迭代,相当于迭代器。

Redis的Set数据结构

1、Long add(K key, V… values);
无序集合中添加元素,返回添加个数
也可以直接在add里面添加多个值 如:template.opsForSet().add(“setTest”,“aaa”,“bbb”)
2、 Long remove(K key, Object… values);
移除集合中一个或多个成员
3、 V pop(K key);
移除并返回集合中的一个随机元素
4、 Boolean move(K key, V value, K destKey);
将 member 元素从 source 集合移动到 destination 集合
5、 Long size(K key);
无序集合的大小长度
6、Set members(K key);
返回集合中的所有成员
7、 Cursor scan(K key, ScanOptions options);
遍历set

Redis的ZSet数据结构

1、Boolean add(K key, V value, double score);
新增一个有序集合,存在的话为false,不存在的话为true 2、Long add(K key, Set<TypedTuple> tuples);
新增一个有序集合
3、Long remove(K key, Object… values);
从有序集合中移除一个或者多个元素
4、 Long rank(K key, Object o);
返回有序集中指定成员的排名,其中有序集成员按分数值递增(从小到大)顺序排列
5、Set range(K key, long start, long end);
通过索引区间返回有序集合成指定区间内的成员,其中有序集成员按分数值递增(从小到大)顺序排列
6、Long count(K key, double min, double max);
通过分数返回有序集合指定区间内的成员个数
7、Long size(K key);
获取有序集合的成员数,内部调用的就是zCard方法
8、 Double score(K key, Object o);
获取指定成员的score值
9、Long removeRange(K key, long start, long end);
移除指定索引位置的成员,其中有序集成员按分数值递增(从小到大)顺序排列
10、Cursor<TypedTuple> scan(K key, ScanOptions options);
遍历zset

BoundValueOps( )方法的使用
//在原来的值得末尾添加值
boundValueOperations.append("a");
//获取指定区间位置的值
get(long start, long end)
//获取字符串所有值
boundValueOperations.get()
//给绑定键重新设置值
boundValueOperations.set("f");
//在指定时间后重新设置值
set(V value, long timeout, TimeUnit unit)
//截取原有值的指定长度后添加新值在后面
boundValueOperations.set("nnnnnn",3);
//没有值存在则添加
boundValueOperations.setIfAbsent("mmm");
// 获取原来的值并重新赋新值
Object object = boundValueOperations.getAndSet("yyy");
//获取绑定值的长度
boundValueOperations.size()
//自增长键值,前提是绑定值的类型是doule或long类型
//自增长只能在为数字类型的时候才可以
boundValueOperations.increment(1);
RedisTemplate操作Redis详解之连接Redis及自定义序列化 大多数用户可能会使用RedisTemplate及其相应的软件包org.springframework.data.redis.core。实际上,由于模版具有丰富的功能集,因此它是Redis模块的中心类。该模板为Redis交互提供了高级抽象,虽然RedisConnection提供了接受和返回二进制值(byte数组)的低级方法,但是模板负责序列化和连接管理,使用户无需处理此类细节。界面描述按键类型操作Redis的地理空间操作的,比如GEOADD,GEORADIUS...Redis哈希操作。 阅读详情

相关推荐

RedisTemplate使用详解

一、Spring Data Redis ​Spring-data-redis提供了在Spring应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,封装了 RedisTemplate 对象来进行对Redis的各种操作、异常处理及序列化,支持发布订阅,并对Spring 3.1 cache进行了实现,它支持所有的Redis原生的 API。 Spring-data-redis 针对 Jedis 提供了如下功能: 1、连接池自动管理,提

threelifeadv的博客 2万+

RedisTemplate操作Redis,这一篇文章就够了(一)

RedisTemplate操作Redis,这一篇文章就够了(一) StringRedisTemplate和RedisTemplate的区别(二) StringRedisTemplate的一个小案例(三)

lydms的博客 30万+

RedisTemplate和Redisson的区别

一、功能方面:Redisson: java代码解读复制代码上述代码首先创建了 Redisson 的配置对象,将 Redis 服务地址添加进去,接着创建 Redisson 客户端。通过 方法获取一个锁对象,使用 方法加锁,执行完操作后用 方法解锁。这样就实现了分布式锁的操作,而且 Redisson 的锁支持可重入、公平锁等高级特性,能很好地处理分布式环境下的并发问题。支持异步操作,可利用 接口来实现异步调用,提高系统的并发性能。例如,获取锁时可以使用 方法,后续可对 进行相应处理,充分利用异

sc35262的博客 1510

//基于redisTemplate工具类RedisHelper

package com.tgb.util.redis;import java.util.List;import java.util.Map;import java.util.Set;import java.util.concurrent.TimeUnit;import org.springframework.data.redis.core.RedisTemplate;import org.spri...

一名系统架构师的征途 2813

S7-1200与KINCO伺服通信实战:CM CANopen模块配置避坑指南(附完整PDO映射表)

本文详细解析了西门子S7-1200 PLC通过CM CANopen模块与KINCO伺服驱动器的通信配置全流程,重点解决PDO映射混乱、心跳报文配置错误等常见问题。提供硬件组态、参数设置、PDO映射模板及故障排查方案,助力工业自动化系统实现稳定高效的多轴运动控制。

2y3u4i5o6p的博客 1099

Dify插件离线部署全攻略:从下载到安装的完整流程

本文详细介绍了Dify插件离线部署的完整流程,针对企业内网等无网络环境需求。核心步骤包括在联网环境下载插件包、在特定Python 3.12.9环境下使用专用工具进行离线重打包,以及最终在离线Dify环境中安装验证。重点解决了离线安装的核心难题,并提供了环境配置、批量处理和故障排查等实用技巧,帮助用户实现Dify插件的顺利离线部署。

seed的博客 656

RedisTemplate常用方法总结

本文总结了RedisTemplate常用方法,涵盖String和Hash两大数据类型操作。String类型包含键值判断、获取/设置值、过期时间管理、批量操作、增量计数等功能;Hash类型提供字段级操作,如获取/设置字段值、批量操作、存在性检查、数值增减等功能。这些方法封装为工具类可简化Redis操作,提升开发效率。文章适合需要快速查找RedisTemplate API的开发者参考。

热爱技术、喜欢学习、乐于分享 11万+

6.5 构网型储能系统的协同控制策略

本文系统阐述了构网型储能系统的协同控制策略,重点分析了多机组群协同运行面临的功率分配不均、动态响应失配等挑战。研究提出了改进型下垂控制与虚拟阻抗法、基于一致性算法的分布式协同控制等解决方案,探讨了构网型储能与同步发电机在惯性响应、一次调频等方面的协同机制,以及与跟网型电源在电压支撑、阻抗重塑等方面的互补作用。文章构建了分层控制架构,为实现多类型电源的全局优化运行提供了技术路径,对提升高比例新能源电力系统的稳定性具有重要意义。

技术工作者 1000

RedisTemplate 详细解析

问题 & 方案 1.1 问题 RedisTemplate 是 Spring Boot 访问 Redis 的核心组件,底层通过 RedisConnectionFactory 对多种 Redis 驱动进行集成,上层通过 XXXOperations 提供丰富的 API ,并结合 Spring4 基于泛型的 bean 注入,极大的提供了便利,成为日常开发的一大利器。 但美中不足的是,需要...

LMAKE_nbsp的博客 1万+

【入门篇】第五章 第一次与 AI Agent 交互

本文介绍了OpenClaw中最基本的用户与AI Agent交互方式,剖析了Agent和Gateway两个核心组件的作用,通过简单示例展示了从用户请求到结果返回的完整执行流程,说明了最小交互过程对验证系统可用性的重要意义,为后续学习复杂任务执行机制奠定基础。

lanyv的博客 512

多传感器融合SLAM指南:如何结合视觉与激光雷达提升建图精度

本文深入探讨了多传感器融合SLAM技术,详细解析了如何将视觉传感器与激光雷达(特别是3D激光雷达)进行深度融合以提升建图精度与鲁棒性。文章从传感器特性分析、数据同步标定、前端融合策略(松耦合与紧耦合)到后端优化与地图构建,提供了完整的实战指南,并重点介绍了V-LOAM等经典融合框架的核心思想,旨在帮助开发者构建适应复杂动态环境的高精度SLAM系统。

weixin_29056145的博客 535

RedisTemplate 用法

如何使用RedisTemplate访问Redis数据结构 Redis 数据结构简介 Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。 下面来对这5种数据结构类型作简单的介绍: 结构类型 结构存储的值 结构的读写能

Ruby_One的博客 8万+

解决 maven编译项目-Fatal error compiling: 无效的目标发行版: 21 -> [Help 1]

惊奇的发现,maven没有用环境变量中设置好的JAVA_HOME目录,至此发现错误原因,原来执行java -version默认使用系统环境变量JAVA_HOME,而maven优先使用了windows的用户变量JAVA_HOME(这里之前忘记修改,仍然指向java8路径),修改用户变量JAVA_HOME指向java21或删除该用户变量JAVA_HOME(如无它用)后即可。打开maven包所在的目录,在maven的配置文件 mvn.cmd 文件中,设置java_home的目录。

litlit023的专栏 1799

RedisTemplate方法详解

maven依赖 <!--redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <!--<version>2.1.4.RELEASE</ve

lanfeng_lan的博客 3万+

SAP 交货成本(运费)

交货成本: 业务场景: 有些产品或供应商,会产生交货成本(运费、关税等) 业务模拟(以运费为例): 1、运费在采购订单体现:计划运费 ME21N创建采购订单,并且包含运费: MIGO收货时: 由上可知,MIGO时运费最终体现在库存(存货)科目中(V),或者价格差异中(S计价时)。 MIRO发票校验: 运费最终体现在单独科目中: 后台配置: 运费在发票时候...

willieyuan的博客 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

RedisTemplate用法

神奇的号的博客 247

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

RedisTemplate详解

实际上。如果我们的value如果想用自定义序列化成的方式进行存储在实际开发中可能会遇到很多问题。其中问题主要在序列化本身上。仔细想想上面使用StringRedisTemplate本质上和自定义没有区别。实际都是转化为String类型进行存储的,只不过,一个是在程序本身使用ObjectMapper这个工具手动序列化好在给redisTemplate。后者是将对象传入,在RedisTemplate内部通过一系列自定义的配置将其序列化为json字符串存入redis.

baixian110的博客 1717

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

整合 RedisTemplate

config配置包,并添加配置类/*** @author: 犬小哈* @description: RedisTemplate 配置**/@Bean// 设置 RedisTemplate 的连接工厂// 使用 StringRedisSerializer 来序列化和反序列化 redis 的 key 值,确保 key 是可读的字符串。

七禾页话的博客 763

RedisTemplate 常用用法

RedisTemplate 常用用法

suk_java的博客 943

redistemplate文档用法_RedisTemplate Api总结

RedisTemplate 使用总结最近在做一个项目,考虑到有累计,排行,缓存等功能;而Redis是一个基于内存的数据库,而且提供了 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等多种数据类型;因此考虑使用Redis.最终决定使用Spring-data-redis 的RedisTemplate来实现Redis的访问操作。一...

weixin_39669629的博客 932

redisTemplate 总结

依赖jar包 jackson <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <vers...

qq_39971139的博客 283

RedisTemplate中opsForValue的使用

Spring 封装了 RedisTemplate 对象来进行对redis的各种操作,它支持所有的 redis 原生的 api。查阅点资料下面总结看下Redis中opsForValue()方法的使用介绍: 1、set(Kkey,Vvalue) 新增一个字符串类型的值,key是键,value是值。 //新增一个字符串类型的值,key是键,value是值。 redisTe......

进击的Coder菜鸟 4万+
上一篇: Java之StringUtils的常用方法
下一篇: Quartz的基本使用之入门(2.3.0版本)
It_sharp
博客等级 码龄10年 51粉丝 231原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值