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.mzph.cn/news/185993.shtml

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

相关文章

windows启动后直接进入指定程序并且不显示欢迎界面和windows桌面

windows启动后直接进入指定程序并且不显示欢迎界面和windows桌面 前言开机进入指定程序方法问题 浅尝GINA和Credential Providers关闭欢迎屏幕 前言 由于系统需求需要做到电脑开机后显示完windows加载页面就直接进入自己系统的界面&#xff0c;并且不显示登录欢迎页面&#xf…

java操作windows系统功能案例(二)

1、打印指定文件 可以使用Java提供的Runtime类和Process类来打印指定文件。以下是一个示例代码&#xff1a; import java.io.File; import java.io.IOException;public class PrintFile {public static void main(String[] args) {if (args.length ! 1) {System.out.println(…

supermap-iserver激活教程(linux)

本篇只介绍linux临时许可激活教程&#xff0c;windows的原理一摸一样不做赘述。 1.下载许可中心&#xff08;web版&#xff09; SuperMap技术资源中心|为您提供全面的在线技术服务 2.解压 supermap-bslicense-server-3.0.24-linux-x64.tar.gz tar -zxvf supermap-bslicense…

微信小程序 - 开发版、体验版、正式版共享本地缓存

问题描述 最近突然发现一个大问题啊&#xff0c;小程序切换版本环境的时候发现数据被污染了&#xff0c;瞬间就怀疑不同环境版本的小程序本地缓存是否共享的&#xff1f;&#xff01; 果然是&#xff01; 解决方案 我们可能马上想到解决方案就是&#xff1a;给每一个环境版本…

Python字符串大小写转换的函数及用法

Python字符串由内建的str类代表&#xff0c;那么str 类包含哪些方法呢&#xff1f;Python 非常方便&#xff0c;它甚至不需要用户查询文档&#xff0c;Python 是“自带文档”的。 这里需要读者简单掌握两个帮助函数&#xff1a; dir()&#xff1a;列出指定类或模块包含的全部…

万户ezOFFICE wpsservlet任意文件上传漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品&#xff0c;统一的基础管理平台&#xff0c;实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台&#xff0c;将外网信息…

什么是AI PC:人工智能电脑?

大家好啊&#xff0c;我是董董灿。 今天在一个群聊里&#xff0c;聊到了关于 AI PC (人工智能电脑)的话题。 之前看到过关于 AI PC 的新闻&#xff0c;说的是联想集团董事长兼CEO杨元庆在一次演讲中提到了 AI PC 的概念&#xff0c;并且绘声绘色的描绘了AI PC 的发展前景。 下…

希亦、追觅和添可洗地机哪个好?3款热门洗地机测评

洗地机因为自身的超强清洁效果&#xff0c;能大大的降低家务清洁工作&#xff0c;所以近年来以及越来越成为家庭的标配家电。 地机选起来让人眼花缭乱&#xff0c;对于消费者来说&#xff0c;如何选择一台实用性价比高的洗地机已经是一个头疼的问题&#xff0c;看着宣传画面很…

【前端开发】Next.js与Nest.js之间的差异2023

在快节奏的网络开发领域&#xff0c;JavaScript已成为构建可靠且引人入胜的在线应用程序的标准语言。然而&#xff0c;随着对适应性强、高效的在线服务的需求不断增加&#xff0c;开发人员通常不得不从广泛的库和框架中进行选择&#xff0c;以满足其项目的要求。Next.js和Nest.…

【C++ Primer Plus学习记录】嵌套循环和二维数组

for循环是一种处理数组的工具。下面进一步讨论如何使用嵌套for循环中来处理二维数组。 C没有提供二维数组类型&#xff0c;但是用户可以创建每个元素本身都是数组的数组。例如&#xff0c;假设要存储5个城市在4年间的最高温度&#xff0c;可以这样声明数组&#xff1a; int m…

HP1010 | 业界首款图腾柱 PFC 专用数字控制器震撼来袭!

随着节能标准和客户需求的不断提高&#xff0c;电源解决方案的效率和尺寸也在不断优化&#xff0c;设计紧凑高效的 PFC 电源是一个复杂的开发挑战。随着第三代半导体器件氮化镓和碳化硅的大范围应用&#xff0c;图腾柱无桥 PFC&#xff08;TPPFC&#xff09;应用获得极大的拓展…

Kubernetes(K8s)_15_CNI

Kubernetes&#xff08;K8s&#xff09;_15_CNI CNI网络模型UnderlayMAC VLANIP VLANDirect Route OverlayVXLAN CNI插件FlannelCalico CNI配置内置实现 CNI CNI(Container Network Interface): 实现容器网络连接的规范 Kubernetes将网络通信可分为: Pod内容器、Pod、Pod与Se…

SOT23-3封装的设计与应用:220V转5V芯片电路

SOT23-3封装的设计与应用&#xff1a;220V转5V电路 AH8100介绍了一种基于SOT23-3封装的220V转5V电路l32*4761*OOO1设计方案&#xff0c;该方案具有简单、高效、稳定的特点&#xff0c;适用于各种电子设备。 一、引言 随着科技的发展&#xff0c;电子设备越来越多地应用于我们…

滴滴2023.11.27P0级故障技术复盘回顾(k8s的的错?)

本文从滴滴官方恢复及技术公众号带大家从技术角度复盘这次事故 目录 1. 背景 2. 滴滴官方消息 3. 问题分析及定位 4.网传的k8s及解析 5.k8s引发的思考&#xff1a;举一反三&#xff0c;怎么避免再次出现 6.近段时间其他平台崩溃回顾 1. 背景 11 月 27 晚约 10 点&#xf…

TCP解帧解码、并发送有效数据到FPGA

TCP解帧解码、并发送有效数据到FPGA 工程的功能&#xff1a;使用TCP协议接收到网络调试助手发来的指令&#xff0c;将指令进行解帧&#xff0c;提取出帧头、有限数据、帧尾&#xff1b;再将有效数据发送到FPGA端的BRAM上&#xff0c;实现信息传递。 参考&#xff1a;正点原子启…

Apache Hive3.1.3 遇到DATE_FORMAT转换2021年12月格式的问题

比如&#xff1a;需要将时间2021-12-28 00:00:00转换成2021-12的格式&#xff0c;用date_format会将2021-12转换成2022-12的问题。 解决方法&#xff1a; 方式一&#xff1a;大写的‘Y’换成‘y’ 方式二&#xff1a;字符串截取&#xff0c;substr 本博主推荐方式一&#xf…

Linux地址空间随机化

ASLR(Address Space Layout Randomization)在2005年被引入到Linux的内核 kernel 2.6.12 中&#xff0c;早在2004年就以补丁的形式引入。内存地址的随机化&#xff0c;意味着同一应用多次执行所使用内存空间完全不同&#xff0c;也意味着简单的缓冲区溢出攻击无法达到目的。 1.…

Oracle(2-8)Configuring the Database Archiving Mode

文章目录 一、基础知识1、Redo Log History2、NOARCHIVELOG Mode 非归档模式3、ARCHIVELOG Mode 归档模式4、Changing the Archiving Mode 更改归档模式![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d6a09f9a6de24de7bbcdad90b8d6b9ca.png)5、Auto and Manual Ar…

MybtisPlus快速开发(从controller到mapper)

创建新项目 写好配置文件 server:port: 8905#配置MP控制台打印日志 mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplspring:datasource:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:m…

联想M7400W激光打印机加粉清零方法

基本参数 产品定位&#xff1a;多功能商用一体机 产品类型&#xff1a;黑白激光多功能一体机 涵盖功能&#xff1a;打印、复印、扫描 最大处理幅面&#xff1a;A4 耗材类型&#xff1a;鼓粉分离 耗材容量&#xff1a;硒鼓LD2451 12000页&#xff0c;墨粉LT2451 1500页、L…