RedisTemplate

Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。

String:可以是字符串、整数或者浮点数

List:一个链表,链表上的每个节点都包含了一个字符串

Set:包含字符串的无序收集器(unorderedcollection),并且被包含的每个字符串都是独一无二的、各不相同

Hash:包含键值对的无序散列表

Zset:字符串成员(member)与浮点数分值(score)之间的有序映射,元素的排列顺序由分值的大小决定

RedisTemplate中定义了对5种数据结构操作

redisTemplate.opsForValue();//操作字符串

redisTemplate.opsForHash();//操作hash

redisTemplate.opsForList();//操作list

redisTemplate.opsForSet();//操作set

redisTemplate.opsForZSet();//操作有序set

StringRedisTemplate与RedisTemplate

两者的关系是StringRedisTemplate继承RedisTemplate。

RedisTemplate 的 String 数据结构

  1. valueOperations.set("name", "tom");
  2. System.out.println(valueOperations.get("name"));
  3. delete("name");
  4. // 设置的是10秒失效,十秒之内查询有结果,十秒之后返回为 null
  5. valueOperations.set("name", "tom", 10, TimeUnit.SECONDS);
  6. System.out.println(valueOperations.get("name"));
  7. delete("name");
  8. // 第三个参数是 offset,偏移量
  9. valueOperations.set("key", "hello world");
  10. valueOperations.set("key", "redis", 6);
  11. // 输出 hello redis
  12. System.out.println(valueOperations.get("key"));
  13. delete("key");
  14. // 该方法的特点是如果redis中已有该数据,不保存返回false,不存在该数据,保存返回true
  15. Boolean aBoolean = valueOperations.setIfAbsent("setIfAbsent", "setIfAbsent");
  16. System.out.println(aBoolean);
  17. Boolean bBoolean = valueOperations.setIfAbsent("setIfAbsent", "setIfAbsent");
  18. System.out.println(bBoolean);
  19. delete("setIfAbsent");
  20. // 批量 set get
  21. Map<String, String> maps = new HashMap<>(4);
  22. maps.put("multi1", "multi1");
  23. maps.put("multi2", "multi2");
  24. maps.put("multi3", "multi3");
  25. valueOperations.multiSet(maps);
  26. List<String> keys = new ArrayList<>();
  27. keys.add("multi1");
  28. keys.add("multi2");
  29. keys.add("multi3");
  30. List<String> multiSetList = valueOperations.multiGet(keys);
  31. System.out.println(multiSetList);
  32. delete("multi1");
  33. delete("multi2");
  34. delete("multi3");
  35. // 计数器 支持整数和浮点数
  36. valueOperations.increment("increment", 1);
  37. valueOperations.increment("increment", 1.2);
  38. System.out.println(valueOperations.get("increment"));
  39. delete("increment");
  40. // 如果key已经存在并且是一个字符串,则该命令将该值追加到字符串的末尾。
  41. // 如果键不存在,则它被创建并设置为空字符串,因此APPEND在这种特殊情况下将类似于SET。
  42. valueOperations.append("append", "hello");
  43. valueOperations.append("append", " world");
  44. System.out.println(valueOperations.get("append"));
  45. delete("append");
  46. // 截取key所对应的value字符串
  47. valueOperations.set("hello", "hello world");
  48. // hello
  49. System.out.println(valueOperations.get("hello", 0, 4));
  50. // 也支持这种负数形式,不好用
  51. System.out.println(valueOperations.get("hello", -3, -1));
  52. // 返回key所对应的value值得长度
  53. System.out.println(valueOperations.size("hello"));
  54. delete("hello");
  55. // 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)
  56. // key键对应的值 value 对应的 ascii 码,在 offset 的位置(从左向右数)变为 value
  57. valueOperations.set("bitTest", "a");
  58. // 'a' 的ASCII码是 97。转换为二进制是:01100001
  59. // 'b' 的ASCII码是 98 转换为二进制是:01100010
  60. // 'c' 的ASCII码是 99 转换为二进制是:01100011
  61. // 因为二进制 0 和 1,在 setbit 中 true 为 1,false 为 0,因此我要变为 'b' 的话第六位设置为 1,第七位设置为 0
  62. valueOperations.setBit("bitTest", 6, true);
  63. valueOperations.setBit("bitTest", 7, false);
  64. // 输出 b
  65. System.out.println(valueOperations.get("bitTest"));
  66. // 获取键对应值的ascii码的在offset处位值
  67. System.out.println(valueOperations.getBit("bitTest", 7));
  68. delete("bitTest");

RedisTemplate 的 List 数据结构

  1. // 将所有指定的值插入存储在键的列表的头部。如果键不存在,则在执行推送操作之前将其创建为空列表。(从左边插入)
  2. listOperations.leftPush("list", "1");
  3. listOperations.leftPush("list", "2");
  4. listOperations.leftPush("list", "3");
  5. listOperations.leftPush("list", "4");
  6. // 只有存在key对应的列表才能将这个value值插入到key所对应的列表中
  7. listOperations.leftPushIfPresent("list", "4");
  8. // 在列表中index的位置设置value值
  9. listOperations.set("list", 3, "100");
  10. // 从存储在键中的列表中删除等于值的元素的第一个计数事件。将删除列表中存储的列表中第一次次出现的 "100"。
  11. // count> 0:删除等于从头到尾移动的值的元素。
  12. // count <0:删除等于从尾到头移动的值的元素。
  13. // count = 0:删除等于value的所有元素。
  14. listOperations.remove("list", 1, "100");
  15. // 批量把一个数组插入到列表中
  16. String[] stringarrays = new String[]{"1", "2", "3"};
  17. listOperations.leftPushAll("list2", stringarrays);
  18. delete("list2");
  19. // 批量把一个 list 插入到列表中 List<Object> 类型才可以
  20. List<Object> list3 = new ArrayList<>();
  21. list3.add("1");
  22. list3.add("2");
  23. list3.add("3");
  24. list3.add("4");
  25. listOperations.leftPushAll("list3", list3);
  26. delete("list3");
  27. // 返回存储在键中的列表的指定元素。偏移开始和停止是基于零的索引,其中0是列表的第一个元素(列表的头部),1是下一个元素
  28. System.out.println(listOperations.range("list", 0, 2));
  29. // 修剪现有列表,使其只包含指定的指定范围的元素,起始和停止都是基于0的索引
  30. listOperations.trim("list", 0, 2);
  31. System.out.println(listOperations.range("list", 0, -1));
  32. // 返回存储在键中的列表的长度。如果键不存在,则将其解释为空列表,并返回0。当key存储的值不是列表时返回错误。
  33. System.out.println(listOperations.size("list"));
  34. // 根据下标获取列表中的值,下标是从 0 开始的
  35. System.out.println(listOperations.index("list", 0));
  36. // 弹出最左边的元素,弹出之后该值在列表中将不复存在
  37. System.out.println(listOperations.leftPop("list"));
  38. // 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
  39. System.out.println(listOperations.leftPop("list", 1000, TimeUnit.MICROSECONDS));
  40. // 用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。
  41. listOperations.rightPopAndLeftPush("list", "newList");
  42. System.out.println(listOperations.range("list", 0, -1));
  43. System.out.println(listOperations.range("newList", 0, -1));
  44. delete("list");
  45. delete("newList");

RedisTemplate 的 Hash 数据结构

  1. Map<String, Object> testMap = new HashMap(4);
  2. testMap.put("name", "jack");
  3. testMap.put("age", "27");
  4. testMap.put("class", "1");
  5. hashOperations.putAll("hash", testMap);
  6. System.out.println(hashOperations.entries("hash"));
  7. // 删除给定的哈希hashKeys
  8. hashOperations.delete("hash", "class");
  9. System.out.println(hashOperations.entries("hash"));
  10. // 确定哈希 hashKey 是否存在
  11. System.out.println(hashOperations.hasKey("hash", "name"));
  12. // 从键中的哈希获取给定 hashKey 的值
  13. System.out.println(hashOperations.get("hash", "name"));
  14. // 从哈希中获取给定 hashKey 的值
  15. List<String> kes = new ArrayList<>();
  16. kes.add("name");
  17. kes.add("age");
  18. System.out.println(hashOperations.multiGet("hash", kes));
  19. // 通过给定的delta增加散列hashKey的值 支持整形、浮点型
  20. hashOperations.increment("hash", "age", 1);
  21. System.out.println(hashOperations.get("hash", "age"));
  22. // 获取key所对应的散列表的key
  23. System.out.println(hashOperations.keys("hash"));
  24. // size
  25. System.out.println(hashOperations.size("hash"));
  26. // 仅当 hashKey 不存在时才设置散列 hashKey 的值。
  27. Boolean hashIfAbsent = hashOperations.putIfAbsent("hash", "age", "25");
  28. // 获取整个哈希存储的值
  29. System.out.println(hashOperations.values("hash"));
  30. // 获取整个哈希存储
  31. System.out.println(hashOperations.entries("hash"));
  32. // 使用Cursor在key的hash中迭代,相当于迭代器。
  33. Cursor<Map.Entry<String, Object>> hash = hashOperations.scan("hash", ScanOptions.NONE);
  34. delete("hash");

RedisTemplate 的 Set 数据结构

  1. // 添加
  2. String[] strarrays = new String[]{"strarr1", "strarr2"};
  3. setOperations.add("set", strarrays);
  4. setOperations.add("set", "strarr3");
  5. setOperations.add("set", "strarr3", "strarr4");
  6. // 移除集合中一个或多个成员
  7. setOperations.remove("set", "strarr4");
  8. // 移除并返回集合中的一个随机元素
  9. setOperations.pop("set");
  10. setOperations.pop("set", 1);
  11. // 将 member 元素从 source 集合移动到 new 集合
  12. setOperations.move("set", "strarr2", "newSet");
  13. // size
  14. System.out.println(setOperations.size("set"));
  15. // 判断 member 元素是否是集合 key 的成员
  16. Boolean ismember = setOperations.isMember("set", "strarr1");
  17. // key 对应的无序集合与 otherKey 对应的无序集合求交集(可以与多个 otherKey 求交集)
  18. Set<Object> intersect = setOperations.intersect("set", "newSet");
  19. // key 无序集合与 otherkey 无序集合的交集存储到 destKey 无序集合中(可以与多个 otherKey 求交集)
  20. setOperations.intersectAndStore("set", "newSet", "newSet2");
  21. // key 无序集合与 otherKey 无序集合的并集(可以与多个 otherKey 求交集)
  22. Set<Object> union = setOperations.union("set", "newSet");
  23. // key 无序集合与 otherkey 无序集合的并集存储到 destKey 无序集合中(可以与多个 otherKey 求并集)
  24. setOperations.unionAndStore("set", "newSet", "newSet3");
  25. // key 无序集合与 otherKey 无序集合的差集(可以与多个 otherKey 求差集)
  26. Set<Object> difference = setOperations.difference("set", "newSet");
  27. // key无序集合与 otherkey 无序集合的差集存储到 destKey 无序集合中(可以与多个 otherKey 求差集)
  28. setOperations.differenceAndStore("set", "newSet", "newSet4");
  29. // 返回集合中的所有成员
  30. Set<Object> set = setOperations.members("set");
  31. // 随机获取 key 无序集合中的一个元素
  32. Object randomMember = setOperations.randomMember("set");
  33. // 获取多个 key 无序集合中的元素(去重),count 表示个数
  34. Set<Object> distinctRandomMembers = setOperations.distinctRandomMembers("set", 1);
  35. // 获取多个 key 无序集合中的元素,count 表示个数
  36. List<Object> randomMembers = setOperations.randomMembers("set", 2);
  37. delete("set");
  38. delete("newSet");
  39. delete("newSet2");
  40. delete("newSet3");
  41. delete("newSet4");

RedisTemplate 的 Zset 数据结构

  1. // 新增一个有序集合,存在的话为false,不存在的话为true
  2. zSetOperations.add("zset", "strarr1", 1.0);
  3. // 新增一个有序集合
  4. ZSetOperations.TypedTuple<Object> objectTypedTuple1 = new DefaultTypedTuple<>("strarr2", 9.6);
  5. ZSetOperations.TypedTuple<Object> objectTypedTuple2 = new DefaultTypedTuple<>("strarr3", 9.9);
  6. Set<ZSetOperations.TypedTuple<Object>> tuples = new HashSet<>();
  7. tuples.add(objectTypedTuple1);
  8. tuples.add(objectTypedTuple2);
  9. zSetOperations.add("zset", tuples);
  10. System.out.println(zSetOperations.range("zset", 0, -1));
  11. // 从有序集合中移除一个或者多个元素
  12. zSetOperations.remove("zset", "strarr3");
  13. // 增加元素的 score 值,并返回增加后的值
  14. zSetOperations.incrementScore("zset", "strarr1", 1.0);
  15. // 返回有序集中指定成员的排名,其中有序集成员按分数值递减(从大到小)顺序排列
  16. System.out.println(zSetOperations.removeRange("zset", 0, -1));
  17. // 通过索引区间返回有序集合成指定区间内的成员对象,其中有序集成员按分数值递增(从小到大)顺序排列
  18. Set<ZSetOperations.TypedTuple<Object>> zset = zSetOperations.rangeWithScores("zset", 0, -1);
  19. // 通过分数返回有序集合指定区间内的成员对象,其中有序集成员按分数值递增(从小到大)顺序排列
  20. Set<ZSetOperations.TypedTuple<Object>> zset1 = zSetOperations.rangeByScoreWithScores("zset", 0, -1);
  21. // 通过分数返回有序集合指定区间内的成员个数
  22. System.out.println(zSetOperations.count("zset", 0, -1));
  23. // size
  24. System.out.println(zSetOperations.size("zset"));
  25. // 获取指定成员的 score 值
  26. System.out.println(zSetOperations.score("zset", "strarr1"));
  27. // 计算给定的一个有序集的并集,并存储在新的 destKey 中,key 相同的话会把 score 值相加 (可以与多个 otherKey 求并集)
  28. //zSetOperations.unionAndStore("zset", "zset2", "zsetNew");
  29. //zSetOperations.unionAndStore("zset", "zsetList", "zsetNew");
  30. // 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中 (可以与多个 otherKey 求交集)
  31. //zSetOperations.intersectAndStore("zset", "zset2", "zsetNew");
  32. // 遍历 zset
  33. Cursor<ZSetOperations.TypedTuple<Object>> zset2 = zSetOperations.scan("zset", ScanOptions.NONE);
  34. delete("zset");

本文由个人 hexo 博客 co2fe.com 迁移

date: 2018-10-29 14:00:41

RedisTemplate操作Redis的更多相关文章

  1. Java 使用Jedis和RedisTemplate操作Redis缓存(SpringBoot)

    package com.example.redis.controller; import com.example.redis.entity.User; import com.example.redis ...

  2. spring data redis RedisTemplate操作redis相关用法

    http://blog.mkfree.com/posts/515835d1975a30cc561dc35d spring-data-redis API:http://docs.spring.io/sp ...

  3. Spring中使用RedisTemplate操作Redis(spring-data-redis)

    RedisTemplate如何检查一个key是否存在? return getRedisTemplate().hasKey(key); 由一个问题,复习了一下redis 抄自: https://www. ...

  4. SpringBoot 使用RedisTemplate操作Redis

    新版: import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.T ...

  5. spring-data-redis 中使用RedisTemplate操作Redis

    Redis 数据结构简介 Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串).List(列表).Set(集合).Hash(散列)和 Zset(有序集合 ...

  6. springboot中,使用redisTemplate操作redis

    知识点: springboot中整合redis springboot中redisTemplate的使用 redis存数据时,key出现乱码问题 一:springboot中整合redis (1)pom. ...

  7. Spring 使用RedisTemplate操作Redis

    首先添加依赖: <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> < ...

  8. RedisTemplate操作Redis(spring-data-redis)

    参看博客:https://www.cnblogs.com/songanwei/p/9274348.html 使用文档:StringRedisTemplate+RedisTemplate使用说明

  9. SpringBoot使用RedisTemplate操作Redis时,key值出现 \xac\xed\x00\x05t\x00\tb

    原因分析 原因与RedisTemplate源码中的默认序列化方式有关 defaultSerializer = new JdkSerializationRedisSerializer( classLoa ...

随机推荐

  1. CentOS6.8 搭建SVN并用钩子自动实现同步到web目录

    一 安装 yum install subversion 二 检查是否安装成功 svn --version 三 创建仓库目录 mkdir –p /home/svnroot/test 四 创建项目 svn ...

  2. 原生JS实现的h5小游戏-植物大战僵尸

    代码地址如下:http://www.demodashi.com/demo/12755.html 项目介绍 本项目是利用原生js实现的h5小游戏-植物大战僵尸,主要结合了一下自己对于h5小游戏的理解,结 ...

  3. SDUTOJ 2804求二叉树的深度

    #include<iostream> #include<stdlib.h> #include<string.h> using namespace std; char ...

  4. chrome浏览器提取网页视频

    http://blog.csdn.net/pipisorry/article/details/37728839 在我们平时上网看视频听音乐时都会产生缓存,可是我们非常难通过一些软件把当中的视频和音乐文 ...

  5. Java Learning Path(四) 方法篇

    Java Learning Path(四) 方法篇 Java作为一门编程语言,最好的学习方法就是写代码.当你学习一个类以后,你就可以自己写个简单的例子程序来运行一下,看看有什么结果,然后再多调用几个类 ...

  6. iOS时间间隔判断

    如何计算两个NSDate之间的时间间隔呢? timeIntervalSinceDate: Returns the interval between the receiver and another g ...

  7. Ubuntu安装sublime test 3 (Build 3126)

    Ubuntu下 Sublime Text 3 (Build 3143) 存在一些bug........ 满心欢喜地更新后, 又默默换回Build 3126 1. 安装 sudo apt-get upd ...

  8. PHP之十六个魔术方法详细介绍

    PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用.这里进行详细介绍,感兴趣的小伙伴们可以参考一下. PHP中把以两个下划线__开头 ...

  9. Codeforces Round #275 (Div. 2) C

    题目传送门:http://codeforces.com/contest/483/problem/C 题意分析:题目意思没啥好说的. 去搞排列列举必须TLE.那么就想到构造. 1.n.2.n-1.3.n ...

  10. YUV Player

    https://github.com/Yonsm/RawPlayer RawPlayer https://github.com/latelee/YUVPlayer YUVPlayer https:// ...