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:key是否存在Boolean value client.hasKey(key);log.i…...
文献解读-多组学-第十八期|《整合 WES 和 RNA-Seq 数据以进行短变异发现》
关键词:多组学;基因测序;变异检测; 文献简介 标题(英文):Integrating WES and RNA-Seq Data For Short Variant Discovery标题(中文):整合 WES 和 RNA-Seq 数…...
【漏洞复现】锐捷校园网自助服务系统 任意文件读取
声明:本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动,将与本文档的作者或发布者无关。 一、漏洞描述 锐捷校园网自助服务系统是用于学校网络管理的一个平台,login_judge.jsf接口存在任意文件读取…...
Centos9安装部署及静态ip配置方案
一、获取centos9的iso镜像 去官网 点击download 官网 点击x86,下载centos9 二、创建虚拟机 1、点击新建虚拟机 2、选择自定义 下一步 3、点击下一步 4、选择稍后安装操作系统 点击下一步 5、选择linux 选择要安装的centos 版本 这里选择centos7 6、设置虚拟…...
利用Altair One 云平台,轻松实现全球企业产品研发创新与优化
在过去的几十年里,工程师和数据科学家引入了大量改变世界的技术,但他们的工作方式却出人意料地停滞不前。技术的革新也带来了效率的不断提升。 面对众多企业的同样难题,Altair整合产品,创造出了用于协作工程、数据工程和分析应用程…...
数据库树状查询
SQL Server 树状查询 -- 创建临时表或者使用CTE WITH OrganizationTree AS (-- 定义递归的终止条件SELECT id, parent_id, name, 1 AS LevelFROM org_structureWHERE parent_id IS NULLUNION ALL-- 定义递归部分,这里的Level是为了记录树的层级SELECT o.id, o.pare…...
【实战场景】@Transactional中使用for update的注意点
【实战场景】Transactional中使用for update的注意点 开篇词:干货篇:知识回顾注意点1.锁的范围和粒度:2.事务的隔离级别:3.死锁:4.性能影响:5.事务的边界:6.异常处理:7. 数据库和存储…...
好用的声音分析的软件和网站
有许多软件和网站可以帮助进行声音分析,从专业级的音频处理软件到在线工具,以下是一些推荐: 专业音频分析软件 Audacity 开源且免费的音频编辑和分析工具。提供基本的音频录制、编辑和分析功能。支持多种插件,扩展其功能。 Adob…...
开发情绪识别人工智能时的道德考量
情绪调节人工智能是机器学习领域的最新技术进步之一。尽管它显示出巨大的潜力,但道德问题将影响其采用率和寿命。人工智能开发人员能克服这些问题吗? 什么是情绪识别人工智能? 情绪识别人工智能是一种机器学习模型。它通常依赖于计算机视觉…...
MongoDB:基础语句及练习
一 基本命令 1.显示所有数据库 show dbs show databases 2.进入某个数据库 use 数据库名称 3.显示当前数据库信息 db.stats() 4.显示当前数据库的所有集合 show collections 5.显示当前数据库 db 在 MongoDB 里,数据库和集合都不用手动创建: 当使用“us…...
百度智能云创新业务部总经理李想:发挥AI企业科技创新优势 助力职业教育人才扬帆远航
前言:百度智能云教育行业解决方案作为百度智能云旗下的创新力量,专注于培养“AI教育”领域的新质生产力人才,一直以来备受职业教育领域的关注。在第六届人工智能“职教百强”院校长论坛开幕之际,中教全媒体对话论坛嘉宾百度智能云…...
了解股票沽空及其风险
什么是股票沽空? 股票沽空是一种投资策略,投资者通过借入股票并在市场上卖出,期望在未来以更低的价格买回股票,以赚取价差收益。这一策略在市场下跌时尤为常见,因为投资者可以从股票价格的下跌中获利。 股票沽空的…...
【Sql Server修改列类型错误信息:对象名依赖于列】
Sql Server修改列类型错误信息:对象名依赖于列 报错信息解决方法测试sql语句 报错信息 修改表中列类型,发生报错如下: [SQL Server]对象DF__Forecast___isCal__4E746892 依赖于 列isCalcFinished。 (5074) [42000] [Microsoft][ODBC Driver…...
【ACM珠海分会,IEEE Fellow加盟,CPS出版】第四届管理科学和软件工程国际学术会议(ICMSSE 2024,7月19-21)
第四届管理科学和软件工程国际学术会议(ICMSSE 2024)由ACM珠海分会,广州番禺职业技术学院主办;全国区块链行业产教融合共同体,AEIC学术交流中心承办,将于2024年7月19-21日于广州召开。 会议旨在为从事管理与软件工程领域的专家学…...
kmeans.fit_predict 和 kmeans.fit有什么区别
KMeans 是 scikit-learn 库中用于执行 K-means 聚类算法的类。fit_predict 和 fit 是该类中的两个方法,的主要区别在于返回的内容和用途。 kmeans.fit: 用途: 用于训练 K-means 模型。输入: 接受一个特征矩阵(通常是二维数组)作为输入。输出:…...
香港优才计划续签难吗?一次性说清楚优才续签要求,不在香港居住也能续签成功!
香港优才计划续签难吗?这个问题对考虑申请优才的人来说,还是挺重要的。我们申请优才,最关注的2个问题,一个是获批,还有一个就是续签了。 毕竟我们费那么大功夫申请优才,可不只是为了一个为期3年的香港临时…...
react获取访问过的路由历史记录
看了下,好像没有很好的解决方案,之前的useHistory现在也用不了了, chatgpt说使用useMatch,也报错 看了下浏览器原生的。本来浏览器就会限制这个histroy的读取,只能获取length https://developer.mozilla.org/zh-CN/…...
基于深度学习的点云降噪
基于深度学习的点云降噪是一种利用深度学习模型处理三维点云数据,以去除噪声并恢复点云的原始形状和细节的方法。点云数据广泛应用于自动驾驶、机器人导航、3D扫描和虚拟现实(VR)等领域,因此高质量的点云数据处理至关重要。以下是…...
数据结构-二叉搜索树与红黑树
4.二叉搜索树 又叫二叉查找树、有序二叉树、排序二叉树。树中任意一个结点,其左子树的每个节点值都要小于该节点,其右子树的每个节点值都要大于该节点 作用:能够进行快速查找、插入、删除操作 4.1 二叉搜索树的时间复杂度 注:二…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
