spring RedisTemplate RedisLockRegistry opsForXxx 基本使用总结以及介绍

一、基本介绍

RedisTemplatespring 对 redis 操作的高度封装,基本已经满足所有使用场景。
若存在其他拓展使用我们可以自行封装工具类对基本操作进行组装。

RedisLockRegistry 对 redis 锁的一些封装

二、不同环境下依赖以及基本配置

2.1 spring-boot 下依赖

(版本按需替换)

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

可通过 @Autowired 直接注入

@Autowired
private RedisTemplate redisTemplate

配置该类的序列化和反序列化类(可选,存在默认值)

@Configuration
public class RedisConfig { // 设置Redis序列化方式 默认使用的JDKSerializer序列化 即转为字节存储 在redis 客户端中没有可读性 一般使用 StringRedisSerializer 或 FastJsonRedisSerializer@Bean public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory redisConnectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();// key序列化redisTemplate.setKeySerializer(new StringRedisSerializer()); // value序列化redisTemplate.setValueSerializer(new FastJsonRedisSerializer<>(Object.class));// Hash key序列化redisTemplate.setHashKeySerializer(new StringRedisSerializer()); // Hash value序列化redisTemplate.setHashValueSerializer(new StringRedisSerializer());redisTemplate.setConnectionFactory(redisConnectionFactory);return redisTemplate;}
}

若使用 FastJsonRedisSerializer 做反序列化需要引入 fastJson 依赖
(版本按需替换)

    <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.76</version></dependency>
2.2 一般 spring,spring-mvc 环境

核心依赖为
(版本按需替换)

    <dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>2.7.0</version></dependency>

但如果使用
(版本按需替换)

	<dependency><groupId>org.springframework.integration</groupId><artifactId>spring-integration-redis</artifactId><version>4.3.19.RELEASE</version></dependency>

该包内部也包含了 spring-data-redis 依赖

若引用jedispool 则还需引入
(版本按需替换)此包也是redis 最基础的依赖,但由于更名 所以也叫 jedis

        <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.10.2</version></dependency>

此类 redisTemplate 初始化动作 以及基本封装
实际内部数据可以通过读取配置文件或者 静态utils 工具类来设置,来获取

import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.integration.redis.util.RedisLockRegistry;
import redis.clients.jedis.JedisPoolConfig;public class RedisReg {private static RedisTemplate<String, String> redisTemplate;private static RedisLockRegistry redisLockRegistry;// 静态代码块做初始化static {JedisPoolConfig poolConfig = new JedisPoolConfig();JedisConnectionFactory factory = new JedisConnectionFactory();factory.setHostName(redis地址);factory.setPort(redis端口);factory.setPassword(若存在密码则复制);factory.setPoolConfig(redis 连接池);// 在 spring bean初始化完成后执行factory.afterPropertiesSet();RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(factory);// key 序列化redisTemplate.setKeySerializer(new StringRedisSerializer());// value 序列化redisTemplate.setValueSerializer(new StringRedisSerializer());// 在 spring bean初始化完成后执行redisTemplate.afterPropertiesSet();RedisReg.redisTemplate = redisTemplate;RedisReg.redisLockRegistry =new RedisLockRegistry(factory, "redis-lock(任意不重复即可)", 超时时间-毫秒);}public static RedisTemplate<String, String> getRedisTemplate() {return redisTemplate;}public static RedisLockRegistry getRedisLockRegistry() {return redisLockRegistry;}
}

三、redisTemplate 基本使用

redisTemplate初始化完成并获取到 redisTemplate 后即可执行一些基本操作

根据 redis 的基本类型redisTemplate提供了对应的各种操作方式

3.1 Spring提供的Redis数据结构的操作类

ops 即 英文 Operations 操作缩写,For 后跟对应的操作对象类型
在这里插入图片描述
常用的一般为前四个,即 Stirng,List,Set, Zset, Hash
Hash 常用来存储和对象类型 Map 类型

3.3 string 类基本操作

set一类在这里插入图片描述
补充说明

第一个 携带 offset 偏移量的为:用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始

setIfAbsent: 如果不存在则赋值 并返回true ,相对的如果已经存在key 则返回false 也意味着赋值失败 ifPresent 则相反
setBit: 将二进制第offset位值变为value

get一类在这里插入图片描述

// 在指定key 的value 后追加内容
redisTemplate.opsForValue().append(key, value)// 获取字符串长度
redisTemplate.opsForValue().size(key)

递增
在这里插入图片描述
递减
在这里插入图片描述

3.4 list 类基本操作

push 加入操作
在这里插入图片描述
rightPopAndLeftPush: 为从一个key 对应的list 队尾获取一个元素,并将该元素放到 目的队列的最左边

获取操作

// 获取列表指定范围内的元素(start开始位置, 0是开始位置,end 结束位置, -1返回所有)
redisTemplate.opsForList().range(key, start, end);

指定获取 index 一类
在这里插入图片描述
pop 取出动作
在这里插入图片描述
从左侧或者右侧移除一个元素并取出,若没有元素时阻塞队列等待到超时或者直到出现可以移除并取出的元素

// 在指定索引处插入值
redisTemplate.opsForList().set(key, index, value)
// 指定 key 下存储的list 的值的长度
redisTemplate.opsForList().size(key)
// 删除集合中值等于value的元素(index=0, 删除所有值等于value的元素; index>0, 从头部开始删除第一个值等于value的元素; index<0, 从尾部开始删除第一个值等于value的元素)
redisTemplate.opsForList().remove(key, index, value)
// 将List列表进行剪裁
redisTemplate.opsForList().trim(key, start, end)
3.5 set 类基本操作

差集
在这里插入图片描述
交集
在这里插入图片描述
并集
在这里插入图片描述
结果获取(count 表个数)
在这里插入图片描述

// 添加元素
redisTemplate.opsForSet().add(key, values)
// 删除单个或多个值
redisTemplate.opsForSet().remove(key, values....)
// 移除并返回一个随机元素
redisTemplate.opsForSet().pop(key)
// 集合长度
redisTemplate.opsForSet().size(key)
// 是否包含某一个值
redisTemplate.opsForSet().isMember(key, value)
// 遍历set类似于Interator(ScanOptions.NONE为显示所有的)
redisTemplate.opsForSet().scan(key, options)Cursor<String> dwa = redisTemplate.opsForSet().scan("dwa", ScanOptions.NONE);while (dwa.hasNext()) {}
3.6 hash 类基本操作

基本用于存储对象类型,或map

// 获取指定key 下,对象的某一个属性,有则返回无则为null
redisTemplate.opsForHash().get(key, field)
// 获取所有键值对
redisTemplate.opsForHash().entries(key)
// 获取所有hashkey
redisTemplate.opsForHash().keys(key)
// 获取所有hashkey 下的值
redisTemplate.opsForHash().values(key)
// 获取hash 中所有字段数量
redisTemplate.opsForHash().size(key)
// 删除一个或多个hashkey
redisTemplate.opsForHash().delete(key, fields....)
// 是否存在hasKey
redisTemplate.opsForHash().hasKey(key, field)
// 获取可遍历键值对 ScanOptions.NONE为获取全部键对
redisTemplate.opsForHash().scan(key, options)
// 为指定hash key 对应整数字段做自增
redisTemplate.opsForHash().increment(key, field, increment)

在这里插入图片描述
补充:hashKey 不存在时增加

3.7 zSet类型

有序集合

// 添加元素(有序集合是按照元素的score值由小到大进行排列)
redisTemplate.opsForZSet().add(key, value, score)// 删除对应的value,value可以为多个值
redisTemplate.opsForZSet().remove(key, values)// 增加元素的score值,并返回增加后的值
redisTemplate.opsForZSet().incrementScore(key, value, delta)// 返回元素在集合的排名,有序集合是按照元素的score值由小到大排列
redisTemplate.opsForZSet().rank(key, value)// 返回元素在集合的排名,按元素的score值由大到小排列
redisTemplate.opsForZSet().reverseRank(key, value)// 获取集合中给定区间的元素(start 开始位置,end 结束位置, -1查询所有)
redisTemplate.opsForZSet().reverseRangeWithScores(key, start,end)// 按照Score值查询集合中的元素,结果从小到大排序
redisTemplate.opsForZSet().reverseRangeByScore(key, min, max) 
redisTemplate.opsForZSet().reverseRangeByScoreWithScores(key, min, max)// 返回值为:Set<ZSetOperations.TypedTuple<V>>
// 从高到低的排序集中获取分数在最小和最大值之间的元素
redisTemplate.opsForZSet().reverseRangeByScore(key, min, max, start, end)// 根据score值获取集合元素数量
redisTemplate.opsForZSet().count(key, min, max)// 获取集合的大小
redisTemplate.opsForZSet().size(key)
redisTemplate.opsForZSet().zCard(key)// 获取集合中key、value元素对应的score值
redisTemplate.opsForZSet().score(key, value)// 移除指定索引位置处的成员
redisTemplate.opsForZSet().removeRange(key, start, end)// 移除指定score范围的集合成员
redisTemplate.opsForZSet().removeRangeByScore(key, min, max)// 获取key和otherKey的并集并存储在destKey中(其中otherKeys可以为单个字符串或者字符串集合)
redisTemplate.opsForZSet().unionAndStore(key, otherKey, destKey)// 获取key和otherKey的交集并存储在destKey中(其中otherKeys可以为单个字符串或者字符串集合)
redisTemplate.opsForZSet().intersectAndStore(key, otherKey, destKey)// 遍历集合 类似迭代器 iterator
Cursor<TypedTuple<Object>> scan = opsForZSet.scan("hahaha", ScanOptions.NONE);while (scan.hasNext()){ZSetOperations.TypedTuple<Object> item = scan.next();System.out.println(item.getValue() + ":" + item.getScore());}

部分参考:
参考连接1
参考连接2
脚本之家等

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

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

相关文章

反欺诈指南:东南亚数字经济反欺诈注意事项

目录 东南亚各类网络欺诈肆虐 科技助力东南亚反欺诈 东南亚做反欺诈需要注意四个方面 据谷歌、淡马锡和贝恩公司发布的一份报告显示&#xff0c;尽管东南亚地区的经济增长有所放缓&#xff0c;但2023年数字经济仍预计创造约100亿美元的收入&#xff0c;数字支付占该地区总交易额…

T-Rex:检测一切 | 基于视觉提示的开集检测器,检测并计数

图1. 我们引入了一个交互式对象计数模型T-Rex。给定参考图像上指定的框或点&#xff0c;T-Rex 可以检测目标图像上的所有与指定对象表现出相似模式的实例&#xff0c;然后将其相加得到计数结果。我们先通过T-Rex生成检测到框提示&#xff0c;再使用SAM得到mask&#xff0c;以获…

np.random.uniform() 采样得到的是一个高维立方体,而不是球体,为什么?

在代码中&#xff0c;采样是通过以下方式完成的&#xff1a; samples self.center np.random.uniform(-self.radius, self.radius, (num_samples, len(self.center))) 这里&#xff0c;np.random.uniform函数在每个维度独立地生成了一个介于-self.radius和self.radius之间的…

恋上数据结构与算法之二叉堆

文章目录 需求分析Top K 问题堆堆的基本接口设计二叉堆(Binary Heap)最大堆添加思路交换位置的优化实现 删除思路流程图解实现 replace批量建堆自上而下的上滤自下而上的下滤效率对比复杂度计算实现 完整代码 最小堆比较器解析Top K 问题问题分析代码实现内部方法分析问题 2 堆…

vr智慧党建展厅超强参与感增强党员群众认同感、归属感

党建教育与VR虚拟现实技术的结合&#xff0c;是顺应现代信息化发展趋势的要求&#xff0c;不仅打破了传统党建教育的束缚&#xff0c;还丰富了党建宣传教育的渠道&#xff0c;党建教育VR云课堂平台是基于深圳华锐视点自主研发的VR云课堂平台中去体验各种VR党建教育软件或者视频…

主机的容器化技术介绍

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、什么是容器 容器是一个标准化的单元&#xff0c;是一种轻量级、可移植的软件打包技术&#xff0c;容器将软件代码及其相关依赖打包&#xff0c;使应用程序可以在任何计算介质运行。例如开发人员在自己的…

龙芯loongarch64服务器编译安装pyarrow

1、简介 pyarrow是一个高效的Python库,用于在Python应用程序和Apache Arrow之间进行交互。Arrow是一种跨语言的内存格式,可以快速高效地转移大型数据集合。它提供了一种通用的数据格式,将数据在内存中表示为表格,并支持诸如序列化和分布式读取等功能。 龙芯的Python仓库安…

openGauss学习笔记-136 openGauss 数据库运维-例行维护-检查数据库性能

文章目录 openGauss学习笔记-136 openGauss 数据库运维-例行维护-检查数据库性能136.1 检查办法136.2 异常处理 openGauss学习笔记-136 openGauss 数据库运维-例行维护-检查数据库性能 136.1 检查办法 通过openGauss提供的性能统计工具gs_checkperf可以对硬件性能进行检查。 …

SpringBoot监控Redis事件通知

Redis的事件通知 Redis事件通过 Redis 的订阅与发布功能&#xff08;pub/sub&#xff09;来进行分发&#xff0c; 因此所有支持订阅与发布功能的客户端都可以在无须做任何修改的情况下&#xff0c; 使用键空间通知功能。 因为 Redis 目前的订阅与发布功能采取的是发送即忘&am…

时间序列预测实战(二十一)PyTorch实现TCN卷积进行时间序列预测(专为新手编写的自研架构)

一、本文介绍 本篇文章给大家带来的是利用我个人编写的架构进行TCN时间序列卷积进行时间序列建模&#xff08;专门为了时间序列领域新人编写的架构&#xff0c;简单不同于市面上大家用GPT写的代码&#xff09;&#xff0c;包括结果可视化、支持单元预测、多元预测、模型拟合效…

公众号公司数量限制

一般可以申请多少个公众号&#xff1f;目前企业主体只能申请2个公众号&#xff0c;这也意味着想做矩阵公众号的难度提升了。有些公司靠着诸多不同分工的公众号形成一个个矩阵&#xff0c;获取不同领域的粉丝。比如&#xff0c;目前主体为xx旗下公众号&#xff0c;共有30个&…

shell循环

目录 1.循环 循环的三种语句 2.for循环 99乘法口诀 ​编辑​编辑新建用户 将文件下所有.xtx结尾的文件&#xff0c;改名为以.yy结尾 ping存活主机 3.while循环 1100的和 猜数字小游戏 4.until循环 求和 1.循环 已知循环的次数未知循环的次数&#xff0c;但是有一个…