当前位置: 首页 > news >正文

RedisTemplate使用

文章目录

  • RedisTemplate使用
    • String类型
    • Hash类型
    • List类型
    • Set类型
    • Zset类型

RedisTemplate使用

String类型

    @Overridepublic void testString() {// t11();String key = "k1";String currentNum;// 用法1:key是否存在Boolean value = client.hasKey(key);log.info("[{}]是否存在[{}]", key, value);// 用法2:添加元素client.opsForValue().set(key, "v1", DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);// 用法3:获取元素String getValue = client.opsForValue().get(key);log.info("getValue : [{}]", getValue);// 用法4:计数String counter = "counter:key";client.opsForValue().set(counter, "0", DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);client.opsForValue().increment(counter);client.opsForValue().increment(counter);currentNum = client.opsForValue().get(counter);log.info("currentNum : [{}]", currentNum);client.opsForValue().decrement(counter);currentNum = client.opsForValue().get(counter);log.info("currentNum : [{}]", currentNum);// 用法5:存储list<map>结构数据List<Map<String, String>> multiMapList = Lists.newArrayList();for (int i = 0; i < 5; i++) {LinkedHashMap<String, String> itemMap = Maps.newLinkedHashMap();itemMap.put("name", "jack" + i);if (i % 2 == 0) {itemMap.put("age", String.valueOf(10 + i));itemMap.put("sex", "男");} else {itemMap.put("age", String.valueOf(11 + i));itemMap.put("sex", "女");}multiMapList.add(itemMap);}String multiMapStr = JSON.toJSONString(multiMapList);client.opsForValue().set("str:multiusers", multiMapStr, DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);String userList = client.opsForValue().get("str:multiusers");List<Map<String, String>> maps = CastBeanUtil.castListMap(JSON.parse(userList), String.class, String.class);log.info("maps : [{}]", maps);// 用法6:存储list<entity>List<TzArea> areaList = Lists.newArrayList();for (int i = 0; i < 10; i++) {TzArea item = new TzArea();item.setAreaId((long) i);item.setAreaName("江苏省");item.setLevel(1);item.setParentId(1L);areaList.add(item);}client.opsForValue().set("str:multiareas", JSON.toJSONString(areaList), DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);String res = client.opsForValue().get("str:multiareas");List<TzArea> tzAreas = JSON.parseArray(res, TzArea.class);log.info("tzAreas : [{}]", JSON.toJSONString(tzAreas));}

Hash类型

@Overridepublic void testHash() {// 用法1:添加一个字段client.opsForHash().put("hash:user:single", "name", "pmb");client.expire("user", DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);Map<Object, Object> result = client.opsForHash().entries("hash:user:single");log.info("result : [{}]", result);// 用法2:添加一个对象信息Map<Object, Object> handleMap = Maps.newLinkedHashMap();handleMap.put("name", "jack");handleMap.put("age", "18");handleMap.put("sex", "男");String key = "hash:user:all";client.opsForHash().putAll(key, handleMap);Map<Object, Object> allElements = client.opsForHash().entries(key);log.info("allElements : [{}]", allElements);// 用法3:只获取map中key集合Set<Object> keyList = client.opsForHash().keys(key);log.info("keyList : [{}]", keyList);// 用法4:只获取map中value集合List<Object> valueList = client.opsForHash().values(key);log.info("valueList : [{}]", valueList);}

List类型

@Overridepublic void testList() {// 用法1:顺序添 加元素1,2,3,4// rightPush 列表右侧添加元素String key = "list:phoneList";client.opsForList().rightPush(key, "16607024161");client.opsForList().rightPush(key, "16607024162");client.opsForList().rightPush(key, "16607024163");client.expire(key, DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);// 删除元素client.opsForList().rightPop(key);// 元素个数Long size = client.opsForList().size(key);assert size !=null;log.info(SIZE_FORMAT, size);// 查找元素// index 查找指定下标的元素 下标从0开始,最后一个size-1String firstItem = client.opsForList().index(key, 0);log.info("firstItem : [{}]", firstItem);String secondItem = client.opsForList().index(key, 1);log.info("secondItem : [{}]", secondItem);String thirdItem = client.opsForList().index(key, 2);log.info("thirdItem : [{}]", thirdItem);// list中所有元素List<String> res = client.opsForList().range(key, 0, size - 1);log.info("res : [{}]", res);// 修改制定位置数据client.opsForList().set(key, 0, "12");// 实现栈 先进后出client.opsForList().leftPush(key, "1");client.opsForList().leftPush(key, "2");client.opsForList().leftPush(key, "3");client.opsForList().leftPop(key);client.opsForList().leftPop(key);client.opsForList().leftPop(key);// 实现队列 先进先出client.opsForList().leftPush(key, "one");client.opsForList().leftPush(key, "two");client.opsForList().rightPop(key);client.opsForList().rightPop(key);}

Set类型

   @Overridepublic void testSet() {String key = "set:nums";// 用法1:添加元素client.opsForSet().add(key, "1", "2", "3");client.expire(key, DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);//用法2:获取集合的元素Set<String> members = client.opsForSet().members(key);log.info("members : [{}]", members);// 用法3:判断某个元素是否存在Boolean member = client.opsForSet().isMember(key, "2");log.info("member : [{}]", member);String intersection = "set:nums:intersection";// 用法4:交集client.opsForSet().add(intersection, "1", "2");client.expire(intersection, DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);Set<String> intersectList = client.opsForSet().intersect(key, intersection);log.info("intersectList : [{}]", intersectList);// 用法5:并集Set<String> unionList = client.opsForSet().union(key, intersection);log.info("unionList : [{}]", unionList);// 用法6:查集Set<String> differenceList = client.opsForSet().difference(key, intersection);log.info("differenceList : [{}]", differenceList);}

Zset类型

  @Overridepublic void testZset() {String key = "zset:nums";// 用法1:添加元素client.opsForZSet().add(key, "one", 1);client.opsForZSet().add(key, "three", 30);client.opsForZSet().add(key, "two", 20);client.opsForZSet().add(key, "four", 44);client.opsForZSet().add(key, "five", 55);client.expire(key, DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);// 用法2:返回指定元素排名Long one = client.opsForZSet().rank(key, "five");log.info("rank : [{}]", one);Long size = client.opsForZSet().size(key);assert size !=null;log.info(SIZE_FORMAT, size);// 用法3:返回指定区间元素Set<String> range = client.opsForZSet().range(key, 0, size - 1);log.info("range : [{}]", range);// 用法4:指定分数区间用户Set<String> userList = client.opsForZSet().rangeByScore(key, 1, 60);log.info("userList : [{}]", userList);// 用法5:移除一个或者多个元素client.opsForZSet().remove(key, "two");log.info(SIZE_FORMAT, client.opsForZSet().size(key));// 用法6:计算指定分数之间用户个数Long count = client.opsForZSet().count(key, 1, 20);log.info("count : [{}]", count);Set<String> invertedOrder = client.opsForZSet().reverseRange(key, 0, -1);log.info("InvertedOrder : [{}]", invertedOrder);// 用法7:显示所有成员score以及对应用户Set<ZSetOperations.TypedTuple<String>> allLis = client.opsForZSet().rangeWithScores(key, 0, -1);assert allLis != null;for (ZSetOperations.TypedTuple<String> next : allLis) {String value = next.getValue();Double score = next.getScore();log.info("通过rangeWithScores(K key, long start, long end)方法获取RedisZSetCommands.Tuples的区间值:[{}],[{}]", value, score);}// 用法8:相同score返回处理,取值第一个String lexKey = "zset:lex";client.delete(lexKey);client.opsForZSet().add(lexKey, "zs", 55);client.opsForZSet().add(lexKey, "ls", 55);client.opsForZSet().add(lexKey, "ww", 54);client.opsForZSet().add(lexKey, "zl", 55);client.expire(lexKey, DateConstant.TIME_OF_DAY, TimeUnit.SECONDS);// 取出score集合Set<ZSetOperations.TypedTuple<String>> typedTuples = client.opsForZSet().rangeWithScores(lexKey, 0, -1);if(Objects.isNull(typedTuples)){throw new IllegalArgumentException("出现异常了");}Map<String, Double> cachedMap = new ConcurrentHashMap<>(16);Iterator<ZSetOperations.TypedTuple<String>> scoreIterator = typedTuples.iterator();String firstUser = null;while (scoreIterator.hasNext()) {ZSetOperations.TypedTuple<String> item = scoreIterator.next();Double score = item.getScore();String value = item.getValue();if (cachedMap.containsValue(score)) {// 找到重复scorefirstUser = value;}cachedMap.put(value, score);}log.info("firstUser : [{}]", firstUser);}

相关文章:

RedisTemplate使用

文章目录 RedisTemplate使用String类型Hash类型List类型Set类型Zset类型 RedisTemplate使用 String类型 Overridepublic void testString() {// t11();String key "k1";String currentNum;// 用法1&#xff1a;key是否存在Boolean value client.hasKey(key);log.i…...

文献解读-多组学-第十八期|《整合 WES 和 RNA-Seq 数据以进行短变异发现》

关键词&#xff1a;多组学&#xff1b;基因测序&#xff1b;变异检测&#xff1b; 文献简介 标题&#xff08;英文&#xff09;&#xff1a;Integrating WES and RNA-Seq Data For Short Variant Discovery标题&#xff08;中文&#xff09;&#xff1a;整合 WES 和 RNA-Seq 数…...

科学技术奖 | 畜禽粪污源头减排关键技术推广与种养循环一体化农业实践

...

【漏洞复现】锐捷校园网自助服务系统 任意文件读取

声明&#xff1a;本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动&#xff0c;将与本文档的作者或发布者无关。 一、漏洞描述 锐捷校园网自助服务系统是用于学校网络管理的一个平台&#xff0c;login_judge.jsf接口存在任意文件读取…...

Centos9安装部署及静态ip配置方案

一、获取centos9的iso镜像 去官网 点击download 官网 点击x86&#xff0c;下载centos9 二、创建虚拟机 1、点击新建虚拟机 2、选择自定义 下一步 3、点击下一步 4、选择稍后安装操作系统 点击下一步 5、选择linux 选择要安装的centos 版本 这里选择centos7 6、设置虚拟…...

利用Altair One 云平台,轻松实现全球企业产品研发创新与优化

在过去的几十年里&#xff0c;工程师和数据科学家引入了大量改变世界的技术&#xff0c;但他们的工作方式却出人意料地停滞不前。技术的革新也带来了效率的不断提升。 面对众多企业的同样难题&#xff0c;Altair整合产品&#xff0c;创造出了用于协作工程、数据工程和分析应用程…...

数据库树状查询

SQL Server 树状查询 -- 创建临时表或者使用CTE WITH OrganizationTree AS (-- 定义递归的终止条件SELECT id, parent_id, name, 1 AS LevelFROM org_structureWHERE parent_id IS NULLUNION ALL-- 定义递归部分&#xff0c;这里的Level是为了记录树的层级SELECT o.id, o.pare…...

【实战场景】@Transactional中使用for update的注意点

【实战场景】Transactional中使用for update的注意点 开篇词&#xff1a;干货篇&#xff1a;知识回顾注意点1.锁的范围和粒度&#xff1a;2.事务的隔离级别&#xff1a;3.死锁&#xff1a;4.性能影响&#xff1a;5.事务的边界&#xff1a;6.异常处理&#xff1a;7. 数据库和存储…...

好用的声音分析的软件和网站

有许多软件和网站可以帮助进行声音分析&#xff0c;从专业级的音频处理软件到在线工具&#xff0c;以下是一些推荐&#xff1a; 专业音频分析软件 Audacity 开源且免费的音频编辑和分析工具。提供基本的音频录制、编辑和分析功能。支持多种插件&#xff0c;扩展其功能。 Adob…...

开发情绪识别人工智能时的道德考量

情绪调节人工智能是机器学习领域的最新技术进步之一。尽管它显示出巨大的潜力&#xff0c;但道德问题将影响其采用率和寿命。人工智能开发人员能克服这些问题吗&#xff1f; 什么是情绪识别人工智能&#xff1f; 情绪识别人工智能是一种机器学习模型。它通常依赖于计算机视觉…...

MongoDB:基础语句及练习

一 基本命令 1.显示所有数据库 show dbs show databases 2.进入某个数据库 use 数据库名称 3.显示当前数据库信息 db.stats() 4.显示当前数据库的所有集合 show collections 5.显示当前数据库 db 在 MongoDB 里&#xff0c;数据库和集合都不用手动创建&#xff1a; 当使用“us…...

百度智能云创新业务部总经理李想:发挥AI企业科技创新优势 助力职业教育人才扬帆远航

前言&#xff1a;百度智能云教育行业解决方案作为百度智能云旗下的创新力量&#xff0c;专注于培养“AI教育”领域的新质生产力人才&#xff0c;一直以来备受职业教育领域的关注。在第六届人工智能“职教百强”院校长论坛开幕之际&#xff0c;中教全媒体对话论坛嘉宾百度智能云…...

了解股票沽空及其风险

什么是股票沽空&#xff1f; 股票沽空是一种投资策略&#xff0c;投资者通过借入股票并在市场上卖出&#xff0c;期望在未来以更低的价格买回股票&#xff0c;以赚取价差收益。这一策略在市场下跌时尤为常见&#xff0c;因为投资者可以从股票价格的下跌中获利​。 股票沽空的…...

【Sql Server修改列类型错误信息:对象名依赖于列】

Sql Server修改列类型错误信息&#xff1a;对象名依赖于列 报错信息解决方法测试sql语句 报错信息 修改表中列类型&#xff0c;发生报错如下&#xff1a; [SQL Server]对象DF__Forecast___isCal__4E746892 依赖于 列isCalcFinished。 (5074) [42000] [Microsoft][ODBC Driver…...

【ACM珠海分会,IEEE Fellow加盟,CPS出版】第四届管理科学和软件工程国际学术会议(ICMSSE 2024,7月19-21)

第四届管理科学和软件工程国际学术会议(ICMSSE 2024)由ACM珠海分会&#xff0c;广州番禺职业技术学院主办&#xff1b;全国区块链行业产教融合共同体&#xff0c;AEIC学术交流中心承办&#xff0c;将于2024年7月19-21日于广州召开。 会议旨在为从事管理与软件工程领域的专家学…...

kmeans.fit_predict 和 kmeans.fit有什么区别

KMeans 是 scikit-learn 库中用于执行 K-means 聚类算法的类。fit_predict 和 fit 是该类中的两个方法&#xff0c;的主要区别在于返回的内容和用途。 kmeans.fit: 用途: 用于训练 K-means 模型。输入: 接受一个特征矩阵&#xff08;通常是二维数组&#xff09;作为输入。输出:…...

香港优才计划续签难吗?一次性说清楚优才续签要求,不在香港居住也能续签成功!

香港优才计划续签难吗&#xff1f;这个问题对考虑申请优才的人来说&#xff0c;还是挺重要的。我们申请优才&#xff0c;最关注的2个问题&#xff0c;一个是获批&#xff0c;还有一个就是续签了。 毕竟我们费那么大功夫申请优才&#xff0c;可不只是为了一个为期3年的香港临时…...

react获取访问过的路由历史记录

看了下&#xff0c;好像没有很好的解决方案&#xff0c;之前的useHistory现在也用不了了&#xff0c; chatgpt说使用useMatch&#xff0c;也报错 看了下浏览器原生的。本来浏览器就会限制这个histroy的读取&#xff0c;只能获取length https://developer.mozilla.org/zh-CN/…...

基于深度学习的点云降噪

基于深度学习的点云降噪是一种利用深度学习模型处理三维点云数据&#xff0c;以去除噪声并恢复点云的原始形状和细节的方法。点云数据广泛应用于自动驾驶、机器人导航、3D扫描和虚拟现实&#xff08;VR&#xff09;等领域&#xff0c;因此高质量的点云数据处理至关重要。以下是…...

数据结构-二叉搜索树与红黑树

4.二叉搜索树 又叫二叉查找树、有序二叉树、排序二叉树。树中任意一个结点&#xff0c;其左子树的每个节点值都要小于该节点&#xff0c;其右子树的每个节点值都要大于该节点 作用&#xff1a;能够进行快速查找、插入、删除操作 4.1 二叉搜索树的时间复杂度 注&#xff1a;二…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

React核心概念:State是什么?如何用useState管理组件自己的数据?

系列回顾&#xff1a; 在上一篇《React入门第一步》中&#xff0c;我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目&#xff0c;并修改了App.jsx组件&#xff0c;让页面显示出我们想要的文字。但是&#xff0c;那个页面是“死”的&#xff0c;它只是静态…...