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

文章目录

  • 1. String 命令
    • 1.1 添加缓存
    • 1.2 设置过期时间(单独设置)
    • 1.3 获取缓存值
    • 1.4 删除key
    • 1.5 顺序递增
    • 1.6 顺序递减
    • 1.7 常用的
  • 2. Hash命令
    • 2.1 添加缓存
    • 2.2 设置过期时间(单独设置)
    • 2.3 添加一个Map集合
    • 2.4 提取所有的小key
    • 2.5 提取所有的value值
    • 2.6 根据key提取value值
    • 2.7 获取所有的键值对集合
    • 2.8 删除
    • 2.9 判断Hash中是否含有该值
  • 3. List命令
    • 3.1 添加缓存
    • 3.2 将List放入缓存
    • 3.3 设置过期时间(单独设置)
    • 3.4 获取List缓存全部内容(起始索引,结束索引)
    • 3.5 从左或从右弹出一个元素
    • 3.6 根据索引查询元素
    • 3.7 获取List缓存的长度
    • 3.8 根据索引修改List中的某条数据(key,索引,值)
    • 3.9 移除N个值为value(key,移除个数,值)
  • 4. Set命令
    • 4.1 添加Set缓存(值可以是一个,也可是多个)
    • 4.2 设置过期时间(单独设置)
    • 4.3 根据key获取Set中的所有值
    • 4.4 根据value从一个set中查询,是否存在
    • 4.5 获取Set缓存的长度
    • 4.6 移除指定的元素
    • 4.7 移除指定的key
    • 4.8 交集 并集 差集
  • 5. ZSet命令
    • 5.1 向集合中插入元素,并设置分数
    • 5.2 向集合中插入多个元素,并设置分数
    • 5.3 按照排名先后(从小到大)打印指定区间内的元素, -1为打印全部
    • 5.4 获得指定元素的分数
    • 5.5 返回集合内的成员个数
    • 5.6 返回集合内指定分数范围的成员个数(Double类型)
    • 5.7 返回集合内元素在指定分数范围内的排名(从小到大)
    • 5.8 带偏移量和个数,(key,起始分数,最大分数,偏移量,个数)
    • 5.9 返回集合内元素的排名,以及分数(从小到大)
    • 5.10 返回指定成员的排名
    • 5.11 从集合中删除指定元素
    • 5.12 删除指定索引范围的元素(Long类型)
    • 5.13 删除指定分数范围内的元素(Double类型)
    • 5.14 为指定元素加分(Double类型)


在这里插入图片描述

在这里插入图片描述

RedisTemplateSpring Framework 提供的用于操作 Redis 数据库的模板类。通过 RedisTemplate,开发人员可以方便地使用 Spring 提供的 API 来对 Redis 进行操作,比如设置值、获取值、删除值等。RedisTemplate 封装了 Redis 连接、数据序列化、异常处理等操作,简化了与 Redis 的交互过程。

一般情况下,开发人员需要配置 Redis 连接池、序列化器等信息,并将 RedisTemplate 注入到需要使用 Redis 的 Bean 中,然后就可以通过 RedisTemplate 来进行相应的操作。

需要注意的是,RedisTemplate 是基于 Spring Data Redis 提供的操作 Redis 客户端的功能而构建的,可以通过 RedisTemplate 李进行操作 Redis 数据库的常用数据结构,如字符串、列表、集合、有序集合等。


1. String 命令

1.1 添加缓存

//1、通过redisTemplate设置值
redisTemplate.boundValueOps("StringKey").set("StringValue");
redisTemplate.boundValueOps("StringKey").set("StringValue",1, TimeUnit.MINUTES);//2、通过BoundValueOperations设置值
BoundValueOperations stringKey = redisTemplate.boundValueOps("StringKey");
stringKey.set("StringVaule");
stringKey.set("StringValue",1, TimeUnit.MINUTES);//3、通过ValueOperations设置值
ValueOperations ops = redisTemplate.opsForValue();
ops.set("StringKey", "StringVaule");
ops.set("StringValue","StringVaule",1, TimeUnit.MINUTES);//4(SETNX + SETEX):这个key不存在执行 存在则不执行,多用于互斥锁
ops.setIfAbsent("key", "value", 10, TimeUnit.SECONDS)

1.2 设置过期时间(单独设置)

redisTemplate.boundValueOps("StringKey").expire(1,TimeUnit.MINUTES);
redisTemplate.expire("StringKey",1,TimeUnit.MINUTES);

不建议使用单独设置过期时间的API, 可以使用 1.1 中的第一个演示,在设置值的同时设置过期时间.

1.3 获取缓存值

//1、通过redisTemplate设置值
String str1 = (String) redisTemplate.boundValueOps("StringKey").get();//2、通过BoundValueOperations获取值
BoundValueOperations stringKey = redisTemplate.boundValueOps("StringKey");
String str2 = (String) stringKey.get();//3、通过ValueOperations获取值
ValueOperations ops = redisTemplate.opsForValue();
String str3 = (String) ops.get("StringKey");

1.4 删除key

Boolean result = redisTemplate.delete("key");

1.5 顺序递增

redisTemplate.boundValueOps("key").increment(1L);

该API会返回递增后的值. 如果KEY对应的值不存在会创建之并返回1

1.6 顺序递减

redisTemplate.boundValueOps("StringKey").increment(-3L);

1.7 常用的

ValueOperations ops = redisTemplate.opsForValue();//	单独设置有效期(不推荐单独用)
ops.expire("StringKey",1,TimeUnit.MINUTES);//	设置值 and 有效期(推荐这种)
ops.set("key", "value", 1, TimeUnit.MINUTES);//	操作数值 增加 减少(INCR INCRBY)
ops.increment("key", 1);
ops.increment("key", -1);//	(SETNX + SETEX):这个key不存在执行 存在则不执行,多用于互斥锁
ops.setIfAbsent("key", "value", 10, TimeUnit.SECONDS)//	获取缓存值
ops.get("StringKey");

2. Hash命令

2.1 添加缓存

//1、通过redisTemplate设置值
redisTemplate.boundHashOps("HashKey").put("SmallKey", "HashVaue");//2、通过BoundValueOperations设置值
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
hashKey.put("SmallKey", "HashVaue");//3、通过ValueOperations设置值
HashOperations hashOps = redisTemplate.opsForHash();
hashOps.put("HashKey", "SmallKey", "HashVaue");

2.2 设置过期时间(单独设置)

HashMap<String, String> hashMap = new HashMap<>();
redisTemplate.boundHashOps("HashKey").putAll(hashMap );

注意:只能给大 KEY 设置过期时间, 小 KEY 不能拥有独立的过期时间.

2.3 添加一个Map集合

HashMap<String, String> hashMap = new HashMap<>();
redisTemplate.boundHashOps("HashKey").putAll(hashMap );

2.4 提取所有的小key

//1、通过redisTemplate获取值
Set keys1 = redisTemplate.boundHashOps("HashKey").keys();//2、通过BoundValueOperations获取值
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
Set keys2 = hashKey.keys();//3、通过ValueOperations获取值
HashOperations hashOps = redisTemplate.opsForHash();
Set keys3 = hashOps.keys("HashKey");

2.5 提取所有的value值

//1、通过redisTemplate获取值
List values1 = redisTemplate.boundHashOps("HashKey").values();//2、通过BoundValueOperations获取值
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
List values2 = hashKey.values();//3、通过ValueOperations获取值
HashOperations hashOps = redisTemplate.opsForHash();
List values3 = hashOps.values("HashKey");

2.6 根据key提取value值

//1、通过redisTemplate获取
String value1 = (String) redisTemplate.boundHashOps("HashKey").get("SmallKey");//2、通过BoundValueOperations获取值
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
String value2 = (String) hashKey.get("SmallKey");//3、通过ValueOperations获取值
HashOperations hashOps = redisTemplate.opsForHash();
String value3 = (String) hashOps.get("HashKey", "SmallKey");

2.7 获取所有的键值对集合

//1、通过redisTemplate获取
Map entries = redisTemplate.boundHashOps("HashKey").entries();//2、通过BoundValueOperations获取值
BoundHashOperations hashKey = redisTemplate.boundHashOps("HashKey");
Map entries1 = hashKey.entries();//3、通过ValueOperations获取值
HashOperations hashOps = redisTemplate.opsForHash();
Map entries2 = hashOps.entries("HashKey");

2.8 删除

//删除小key
redisTemplate.boundHashOps("HashKey").delete("SmallKey");
//删除大key
redisTemplate.delete("HashKey");

2.9 判断Hash中是否含有该值

Boolean isEmpty = redisTemplate.boundHashOps("HashKey").hasKey("SmallKey");

3. List命令

3.1 添加缓存

//1、通过redisTemplate设置值
redisTemplate.boundListOps("listKey").leftPush("listLeftValue1");
redisTemplate.boundListOps("listKey").rightPush("listRightValue2");//2、通过BoundValueOperations设置值
BoundListOperations listKey = redisTemplate.boundListOps("listKey");
listKey.leftPush("listLeftValue3");
listKey.rightPush("listRightValue4");//3、通过ValueOperations设置值
ListOperations opsList = redisTemplate.opsForList();
opsList.leftPush("listKey", "listLeftValue5");
opsList.rightPush("listKey", "listRightValue6");

3.2 将List放入缓存

ArrayList<String> list = new ArrayList<>();
//	left
redisTemplate.boundListOps("listKey").leftPushAll(list);
//	right
redisTemplate.boundListOps("listKey").rightPushAll(list);

3.3 设置过期时间(单独设置)

redisTemplate.boundValueOps("listKey").expire(1,TimeUnit.MINUTES);
redisTemplate.expire("listKey",1,TimeUnit.MINUTES);

3.4 获取List缓存全部内容(起始索引,结束索引)

List listKey1 = redisTemplate.boundListOps("listKey").range(0, 10); 

3.5 从左或从右弹出一个元素

//从左侧弹出一个元素
String listKey2 = (String) redisTemplate.boundListOps("listKey").leftPop();  
//从右侧弹出一个元素
String listKey3 = (String) redisTemplate.boundListOps("listKey").rightPop(); 

3.6 根据索引查询元素

String listKey4 = (String) redisTemplate.boundListOps("listKey").index(1);

3.7 获取List缓存的长度

Long size = redisTemplate.boundListOps("listKey").size();

3.8 根据索引修改List中的某条数据(key,索引,值)

redisTemplate.boundListOps("listKey").set(3L,"listLeftValue3");

3.9 移除N个值为value(key,移除个数,值)

redisTemplate.boundListOps("listKey").remove(3L,"value");

4. Set命令

4.1 添加Set缓存(值可以是一个,也可是多个)

//1、通过redisTemplate设置值
redisTemplate.boundSetOps("setKey").add("setValue1", "setValue2", "setValue3");//2、通过BoundValueOperations设置值
BoundSetOperations setKey = redisTemplate.boundSetOps("setKey");
setKey.add("setValue1", "setValue2", "setValue3");//3、通过ValueOperations设置值
SetOperations setOps = redisTemplate.opsForSet();
setOps.add("setKey", "SetValue1", "setValue2", "setValue3");

4.2 设置过期时间(单独设置)

redisTemplate.boundValueOps("setKey").expire(1,TimeUnit.MINUTES);
redisTemplate.expire("setKey",1,TimeUnit.MINUTES);

4.3 根据key获取Set中的所有值

//1、通过redisTemplate获取值
Set set1 = redisTemplate.boundSetOps("setKey").members();//2、通过BoundValueOperations获取值
BoundSetOperations setKey = redisTemplate.boundSetOps("setKey");
Set set2 = setKey.members();//3、通过ValueOperations获取值
SetOperations setOps = redisTemplate.opsForSet();
Set set3 = setOps.members("setKey");

4.4 根据value从一个set中查询,是否存在

Boolean isEmpty = redisTemplate.boundSetOps("setKey").isMember("setValue2");

4.5 获取Set缓存的长度

Long size = redisTemplate.boundSetOps("setKey").size();

4.6 移除指定的元素

Long result1 = redisTemplate.boundSetOps("setKey").remove("setValue1");

4.7 移除指定的key

Boolean result2 = redisTemplate.delete("setKey");

4.8 交集 并集 差集

//	交集 返回存储在 “key1” 和 “key2” 中的集合的交集。
Set<Object> intersect = redisTemplate.opsForSet().intersect("key1", "key2");
//	并集 返回存储在 “key1” 和 “key2” 中的集合的并集。
Set<Object> union = redisTemplate.opsForSet().union("key1", "key2");
//	差集 返回存储在 “key1” 中但不在 “key2” 中的集合,即差集。
Set<Object> difference = redisTemplate.opsForSet().difference("key1", "key2");

5. ZSet命令

5.1 向集合中插入元素,并设置分数

//1、通过redisTemplate设置值
redisTemplate.boundZSetOps("zSetKey").add("zSetVaule", 100D);//2、通过BoundValueOperations设置值
BoundZSetOperations zSetKey = redisTemplate.boundZSetOps("zSetKey");
zSetKey.add("zSetVaule", 100D);//3、通过ValueOperations设置值
ZSetOperations zSetOps = redisTemplate.opsForZSet();
zSetOps.add("zSetKey", "zSetVaule", 100D);

5.2 向集合中插入多个元素,并设置分数

DefaultTypedTuple<String> p1 = new DefaultTypedTuple<>("zSetVaule1", 2.1D);
DefaultTypedTuple<String> p2 = new DefaultTypedTuple<>("zSetVaule2", 3.3D);
redisTemplate.boundZSetOps("zSetKey").add(new HashSet<>(Arrays.asList(p1,p2)));

5.3 按照排名先后(从小到大)打印指定区间内的元素, -1为打印全部

Set<String> range = redisTemplate.boundZSetOps("zSetKey").range(0, -1);

5.4 获得指定元素的分数

Double score = redisTemplate.boundZSetOps("zSetKey").score("zSetVaule");

5.5 返回集合内的成员个数

Long size = redisTemplate.boundZSetOps("zSetKey").size();

5.6 返回集合内指定分数范围的成员个数(Double类型)

Long COUNT = redisTemplate.boundZSetOps("zSetKey").count(0D, 2.2D);

5.7 返回集合内元素在指定分数范围内的排名(从小到大)

Set byScore = redisTemplate.boundZSetOps("zSetKey").rangeByScore(0D, 2.2D);

5.8 带偏移量和个数,(key,起始分数,最大分数,偏移量,个数)

Set<String> ranking2 = redisTemplate.opsForZSet().rangeByScore("zSetKey", 0D, 2.2D 1, 3);

5.9 返回集合内元素的排名,以及分数(从小到大)

Set<TypedTuple<String>> tuples = redisTemplate.boundZSetOps("zSetKey").rangeWithScores(0L, 3L);for (TypedTuple<String> tuple : tuples) {System.out.println(tuple.getValue() + " : " + tuple.getScore());}

5.10 返回指定成员的排名

//从小到大
Long startRank = redisTemplate.boundZSetOps("zSetKey").rank("zSetVaule");
//从大到小
Long endRank = redisTemplate.boundZSetOps("zSetKey").reverseRank("zSetVaule");

5.11 从集合中删除指定元素

redisTemplate.boundZSetOps("zSetKey").remove("zSetVaule");

5.12 删除指定索引范围的元素(Long类型)

redisTemplate.boundZSetOps("zSetKey").removeRange(0L,3L);

5.13 删除指定分数范围内的元素(Double类型)

redisTemplate.boundZSetOps("zSetKey").removeRangeByScorssse(0D,2.2D);

5.14 为指定元素加分(Double类型)

Double score = redisTemplate.boundZSetOps("zSetKey").incrementScore("zSetVaule",1.1D);



在这里插入图片描述



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

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

相关文章

C语言-牛客-实现四舍五入

欢迎来到Harper.Lee的学习小世界&#xff01; 博主主页传送门&#xff1a;Harper.Lee的博客主页 想要一起进步的uu欢迎来后台找我哦&#xff01; 本篇博客总结C语言刷题的相关笔记~~~~ #牛客–实现四舍五入 题目描述&#xff1a;随机输入浮点数&#xff0c;输出四舍五入后的整数…

vue中数据已经改变了,但是table里面内容没更新渲染!

解决方案&#xff1a; 给table或者el-table标签上添加一个动态key值&#xff0c;只要数据发生改变&#xff0c;key值变动一下即可 标签上&#xff1a; :key“timeStamp” 初始data&#xff1a;timeStamp:0, 更新数据&#xff1a;this.timeStamp 这样每次更新数据&#xff…

【B站 heima】小兔鲜Vue3 项目学习笔记Day03

文章目录 Home1.Home整体结构搭建和分类实现2. banner轮播图功能3. Home 面板组件封装4.新鲜好物和人气推荐实现5. 图片懒加载指令实现6. Home- product产品列表实现7. Home-GoodsItem 组件封装 一级路由1. 整体认识和路由配置2. 面包屑导航3. 一级分类 - 轮播图的实现4. 激活状…

2024年5月天润融通JAVA二面15-20K

二面 1、聊项目 2、举例说明你在上家公司职级晋升的原因 3、开发者和管理者的区别&#xff0c;你怎么做管理者 4、对sass的理解&#xff0c;包括流程&#xff0c;技术选型 5、springboot如何把bean加载到ioc容器中&#xff0c;ioc容器的理解 6、一万个任务同时执行&#…

内网安全之搭建ADCS证书服务

在域控上安装ADCS服务时&#xff0c;默认会自动配置完LDAPS&#xff0c;如果不是在域控上安装ADCS服务&#xff0c;需要手动配置LDAPS 安装证书服务ADCS 打开服务器管理器——>添加角色和功能 选择“基于角色或基于功能的安装”选项&#xff0c;然后点击下一步 选择“从…

网络协议——Modbus-RTU

目录 1、简介 2、消息格式 3、Modbus寄存器种类说明 4、功能码01H 5、功能码02H 6、功能码03H 7、功能码04H 8、功能码05H 9、功能码06H 10、功能码0FH 11、功能码10H 1、简介 Modbus-RTU&#xff08;Remote Terminal Unit&#xff09;是一种串行通信协议&#xff0…

云和恩墨海外首秀在吉隆坡召开的2024中国智能科技与文化展览会

作为中马建交50周年官方重点推荐的活动之一&#xff0c;2024中国智能科技与文化展览会&#xff08;第四届&#xff09;于5月20至21日在毗邻吉隆坡双子塔的吉隆坡国际会展中心举办。本次展览会获得马来西亚科学技术创新部、马来西亚通讯部、中国驻马来西亚大使馆和马来西亚中华总…

使用Unsloth微调Llama3-Chinese-8B-Instruct中文开源大模型

使用Unsloth微调Llama3-Chinese-8B-Instruct中文开源大模型 微调Llama3-Chinese-8B-InstructLlama-3-Chinese-8B-InstructUnsloth环境设置下载预训练模型加载model、tokenizer设置LoRA训练参数准备数据集数据处理训练超参数配置开始训练模型推理保存LoRA模型加载模型保存完整模…

OpsManage基于docker的部署与使用

前言 自动化运维管理工具OpsManagerhttp://mp.weixin.qq.com/s?__bizMzk0NTQ3OTk3MQ&mid2247487736&idx1&snefef3a930b88649033f61942a77f42d2&chksmc31598b4f46211a240ffc5360ae238b27d0f495fcbe8dc18abdbd79bc25c00726f74a7312dd0&scene21#wechat_redi…

[IMX6ULL驱动开发]-Linux对中断的处理(一)

目录 中断概念的引入 ARM架构中断的流程 异常向量表 Linux系统对中断的处理 ARM对程序和中断的处理 Linux进程中断处理 中断概念的引入 如何理解中断&#xff0c;我们可以进行如下抽象。把CPU看做一个母亲&#xff0c;当它正在执行任务的时候&#xff0c;可以看为是一个母…

【css】引入背景图时候,路径写入@会报错

看报错信息 我的写法 解决办法 在前面加个~

ThreadLocal原理及使用

一、引言 在Java多线程编程中&#xff0c;ThreadLocal是一个非常有用的工具&#xff0c;它提供了一种将对象与线程关联起来的机制&#xff0c;使得每个线程都可以拥有自己独立的对象副本&#xff0c;从而避免了线程安全问题。然而&#xff0c;使用不当会导致内存泄漏问题。 二…

【VTKExamples::Texture】第六期 TextureThreshold

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例TextureThreshold,并解析接口vtkTexture,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~Y…

python使用base加密解密

原理 base编码是一种加密解密措施&#xff0c;目前常用的有base16、base32和base64。其大致原理比较简单。 以base64为例&#xff0c;base64加密后共有64中字符。其加密过程是编码后将每3个字节作为一组&#xff0c;这样每组就有3*824位。将每6位作为一个单位进行编码&#xf…

MySQL主从复制+读写分离(ShardingJDBC)

MySQL主从复制读写分离 MySQL主从复制介绍二进制日志&#xff1a; MySQL的主从复制原理如下搭建主从复制准备工作主库配置从库配置 测试 读写分离案例ShardingJDBC介绍数据库环境初始工程导入读写分离配置测试1). 保存数据2). 修改数据3). 查询数据4). 删除数据 MySQL主从复制 …

vue3结合element-plus之如何优雅的使用表格

背景 表格组件的使用在后台管理系统中是非常常见的,但是如果每次使用表格我们都去一次一次地从 element-plus 官网去 复制、粘贴和修改成自己想要的表格。 这样一来也说得过去,但是如果我们静下来细想不难发现,表格的使用都是大同小异的,每次都去复制粘贴,对于有很多表格…

【日记】跟奇安信斗智斗勇,败下阵来(416 字)

正文 今天一个客户都没有&#xff0c;让我快怀疑我们银行是不是要倒闭了…… 因为内外网 u 盘不知所踪&#xff0c;所以重新制了一个。深刻体会到了奇安信有多烂。有两个 u 盘&#xff0c;奇安信似乎把主控写坏了&#xff0c;插上电脑有反应&#xff0c;但是看不见盘符&#xf…

Linux中vim的基本使用

目录 vim中的三种模式以及基本操作命令模式(默认模式)插入模式底行模式 命令模式下的命令底行模式下的命令 vim是Linux和Unix环境下最基本的文本编辑器&#xff0c;类似于windows上的记事本 vim和Visual studio相比&#xff0c;vim并不集成&#xff0c;vim只能用来写代码 VS把写…

CopyOnWriteArrayList原理分析

1.简介 JDK1.5之前&#xff0c;由于那个版本尚未退出专门运行在并发环境下的集合&#xff0c;对于List类型&#xff0c;我明只能选择Vector或者Stack这种老古董&#xff0c;但是它们效率太低(全部的增删改方法均被synchronized修饰着&#xff0c;那个时候的synchronized由于还…

【有手就行】使用你自己的声音做语音合成,CPU都能跑,亲测有效

此文介绍在百度飞桨上一个公开的案例&#xff0c;亲测有效。 厌倦了前篇一律的TTS音色了吗&#xff1f;打开短视频听来听去就是那几个声音&#xff0c;快来试试使用你自己的声音来做语音合成吧&#xff01;本教程非常简单&#xff0c;只需要你能够上传自己的音频数据就可以(建议…