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
脚本之家等

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL之 InnoDB逻辑存储结构

InnoDB逻辑存储结构 InnoDB将所有数据都存放在表空间中&#xff0c;表空间又由段&#xff08;segment&#xff09;、区&#xff08;extent&#xff09;、页&#xff08;page&#xff09;组成。InnoDB存储引擎的逻辑存储结构大致如下图。下面我们就一个个来看看。 页&#xff08…

WPF实战项目十八(客户端):添加新增、查询、编辑功能

1、ToDoView.xmal添加引用&#xff0c;添加微软的行为类 xmlns:i"http://schemas.microsoft.com/xaml/behaviors" 2、给项目添加行为 <i:Interaction.Triggers><i:EventTrigger EventName"MouseLeftButtonUp"><i:InvokeCommandAction Com…

【漏洞复现】熊海cms 存在sql注入 附poc

漏洞描述 熊海CMS 是由熊海开发的一款可广泛应用于个人博客,个人网站,企业网站的一套网站综合管理系统。 其采用前后端整合设计思路,php,Apache,mysql,前端使用Bootstrap和少许jquery前端框架开发; 网站样式设计简洁大方,整体功能点并不多,但功能正好够用;拥有一个…

【计网 面向连接的传输TCP】 中科大笔记 (十 二)

目录 0 引言1 TCP 的特性1.1 拓展&#xff1a;全双工、单工、半双工通信 2 TCP报文段结构3 TCP如何实现RDT4 TCP 流量控制4.1 题外话&#xff1a;算法感悟 5 TCP连接3次握手、断开连接4次握手5.1 连接5.2 断开连接 6 拥塞控制6.1 拥塞控制原理6.2 TCP拥塞控制 &#x1f64b;‍♂…

Docker容器网络模式

1.none网络 1&#xff09;使用默认网络模式创建一个BusyBox容器&#xff0c;用于对比none网络模式&#xff1b; 测试网络&#xff0c;可以正常连接外网。 2&#xff09;再创建一个none网络模式的BusyBox容器&#xff1b; 测试网络连接&#xff0c;无法连接外网。 总结&#x…

六:Day01_Spring Boot01

一、Spring Boot简介 1. 概念简介 Spring Boot是Spring公司的一个顶级项目&#xff0c;和Spring Framework是一个级别的。 Spring Boot实际上是利用Spring Framework 4 自动配置特性完成。编写项目时不需要编写xml文件。 2. 启动器介绍 Spring Boot的启动器实际上就是一个依赖…

TSINGSEE青犀AI视频智能分析系统的视频接入能力解析

视频智能分析技术是一种先进的人工智能技术&#xff0c;它能够对视频内容进行自动化的分析和理解。这种技术的主要特点包括实时性、自动化、准确性、可解释性等。 1&#xff09;实时性。视频智能分析技术能够在短时间内对大量的视频数据进行快速处理和分析&#xff0c;从而提供…

【网络BSP开发经验】网络流量应用识别技术

文章目录 网络流量应用识别技术背景应用识别基本原理应用识别主流技术方向特征识别技术单报文解析流特征解析 关联识别技术DNS关联识别 行为识别技术 应用识别框架介绍应用特征提取经验tcpdump 抓包方式默认启动监视指定网络接口的数据包监视指定主机的数据包 禁用特征提取加速…

Small Data Transmission (二)具体过程

这篇是SDT相关的具体过程,包括RRC层初始化SDT 的条件,MAC 层初始化SDT过程的判断,CG-SDT的具体过程,TA Validation for CG-SDT, CG-SDT TA 验证的路径损耗参考推导,SDT Uplink Time Alignment,RRC inactive中的CG based PUSCH传输和RA based PUSCH传输,依次看下。 初始…

简历上的工作经历怎么写

通过了简历筛选&#xff0c;后续的面试官会仔细阅读你的简历内容。他们在找什么呢&#xff1f;他们希望搞清楚你在某一段经历中具体干了什么&#xff0c;并且判断你的能力具体达到了什么水平。 简历在线制作下载&#xff1a;百度幻主简历 面试官喜欢具体的经历 越具体&#x…

计算机网络(二)

&#xff08;八&#xff09;客户端软件设计的细节 A、解析协议号 客户端可能会需要通过协议名指定协议&#xff0c;但是Socket接口是用协议号指定的&#xff0c;这时候我们就需要使用getprotobyname()函数实现协议名到协议号的转换&#xff0c;该函数会返回一个指向protoent的…

第三方实验室LIMS管理系统源码,asp.net LIMS源码

LIMS实验室信息管理系统源码 LIMS系统的功能根据实验室的规模和任务而有所不同&#xff0c;其系统主要功能包括:系统维护、基础数据编码管理&#xff0c;样品管理、数据管理、报告管理、报表打印、实验材料管理、设备管理等。它可以取代传统的手工管理模式而给检测实验室带来巨…

基于SSM框架的餐馆点餐系统的设计

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

什么是Anaconda?作用是?使用python必须要安装嘛?

一、什么是Anaconda以及其作用&#xff1f; 通俗来讲&#xff0c;Anaconda算是一个环境容器&#xff0c;也可以叫环境管理器。 作用&#xff1a;可以在Anaconda容器中为python项目创建不同的环境。在各个不同环境中可以安装不同版本的包并且各个环境互不影响。可以在使用不同项…

唯品会年度特卖大会㊙内购清单㊙

唯品会年度特卖大会㊙内购清单㊙ 内部员工亲友专享&#xff0c;实实在在省钱&#xff0c;❌抢完不补! 今晚8点开抢&#xff0c;提前收藏>> https://t.vip.com/Im3KlTnDSJ8 2023年唯品会年度特卖大会热门会场推荐 1.唯品会年度特卖大会 限时加码!瓜分百万津贴!抢海量…

java论坛数据以及搜索接口实现

一. 内容简介 java论坛数据以及搜索接口实现 二. 软件环境 2.1 java 1.8 2.2 mysql Ver 8.0.13 for Win64 on x86_64 (MySQL Community Server - GPL) 2.3 IDEA ULTIMATE 2019.3 2.4d代码地址 三.主要流程 3.1 创建数据库,创建数据表 3.2 开始编写接口&#xff0c;并测…

字节大佬整理测试用例编写规范

目录 1.1目的 1.2使用范围 二 测试用例编写原则 2.1系统性 2.2连贯性 2.3全面性 2.4正确性 2.5符合正常业务惯例 2.6仿真性 2.7容错性&#xff08;健壮性&#xff09; 三 测试用例设计方法 3.1 等价类划分法&#xff1a; 3.2 边界值分析法&#xff1a; 3.3 因果图…

拼多多工作制;奥特曼回归;拼多多市值;雷军回应组装厂;| 每日科技小评

今日科技圈速览 马斯克称人工智能比核弹更危险奥特曼完整备忘录曝光 &#xff1a;未来发展有三大优先事项AI&#xff08;人工智能&#xff09;新锐巨头OpenAI的新董事会或许没有给投资者留下一席之地阿里巴巴市值又反超拼多多&#xff0c;长远来看拼多多和阿里巴巴哪个市值高&…

YOLO改进系列之ParNetAttention注意力机制

ParNet注意力是一种用于自然语言处理任务的注意力机制&#xff0c;它是由谷歌在2019年提出的。ParNet注意力旨在解决传统注意力机制在处理长序列时的效率问题。传统的注意力机制在计算注意力权重时&#xff0c;需要对所有输入序列的位置进行逐一计算&#xff0c;这导致了在长序…

JS中的类型转换

该节会全面介绍强制类型转换的优缺点 1、值类型转换 将值从一种类型转换为另一种类型通常称为类型转换&#xff0c;这是显式的情况&#xff1b;隐式的情况称为强制类型转换 JS中的强制类型转换总是返回标量基本类型值&#xff08;参见第 2 章&#xff09;&#xff0c;如字符…