当前位置: 首页 > 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);}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • vue实例和容器的一夫一制——04
  • 【项目实战】深入解析HTTP状态码:500 Internal Server Error
  • 【测试开发】--安全渗透测试
  • 判断链表中是否有环(力扣141.环形链表)
  • Spring开发实践(二)
  • 深度学习-梯度下降算法-NLP(五)
  • Ubuntu24.04清理常见跟踪软件tracker
  • Unity Addressable魔改
  • Android 列表视频滑动自动播放—滑动过程自动播放(实现思路)
  • tableau范围-线图与倾斜图绘制 - 14
  • CSS 中的 ::before 和 ::after 伪元素
  • 同三维T80006EH2-4K30编码器视频使用操作说明书:高清HDMI编码器,高清SDI编码器,4K超清HDMI编码器,双路4K超高清编码器
  • vue3项目中浏览器打开本地文档或者下载本地应用的方法(2024-07-11)
  • clean code-代码整洁之道 阅读笔记(第十七章 终章)
  • 【排序 - 快速排序】
  • 【391天】每日项目总结系列128(2018.03.03)
  • Babel配置的不完全指南
  • C++类的相互关联
  • Create React App 使用
  • EOS是什么
  • es6--symbol
  • leetcode讲解--894. All Possible Full Binary Trees
  • Lsb图片隐写
  • 彻底搞懂浏览器Event-loop
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 多线程 start 和 run 方法到底有什么区别?
  • 服务器从安装到部署全过程(二)
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 理清楚Vue的结构
  • 入手阿里云新服务器的部署NODE
  • 通信类
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • ## 基础知识
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (二)fiber的基本认识
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (三)docker:Dockerfile构建容器运行jar包
  • (十一)手动添加用户和文件的特殊权限
  • (一)Docker基本介绍
  • (一)SvelteKit教程:hello world
  • (正则)提取页面里的img标签
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • ./configure,make,make install的作用
  • .aanva
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET4.0并行计算技术基础(1)
  • .NetCore发布到IIS
  • .NET与 java通用的3DES加密解密方法