Java使用RedisTemplate操作Redis常用API

谁借莪1个温暖的怀抱¢ 2023-01-15 03:56 236阅读 0赞

redisTemplate常用api:

  1. package com.hl.chapter29.web;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.data.redis.core.*;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.web.bind.annotation.*;
  8. import javax.servlet.http.HttpServletRequest;
  9. import java.io.IOException;
  10. import java.util.*;
  11. import java.util.concurrent.TimeUnit;
  12. /**
  13. * 测试接口
  14. */
  15. @Controller
  16. public class DemoController {
  17. @Autowired
  18. private RedisTemplate redisTemplate;
  19. /**
  20. * String类型
  21. */
  22. @PostMapping(value = "/string")
  23. @ResponseBody
  24. public String stringTest(HttpServletRequest request, @RequestBody String req) {
  25. // 插入一个key值
  26. redisTemplate.opsForValue().set("a", 1000);
  27. // 判断是否有key对应的值,有返回true,没有返回false
  28. boolean isExist = redisTemplate.hasKey("a");
  29. System.out.println(isExist);
  30. // 取出key对应的值
  31. redisTemplate.opsForValue().get("a");
  32. // 删除某个key
  33. redisTemplate.delete("a");
  34. // 批量删除key
  35. List keys = new ArrayList<String>();
  36. keys.add("a");
  37. keys.add("b");
  38. redisTemplate.delete(keys);
  39. // 将当前传入的key值序列化为btye[]类型
  40. redisTemplate.opsForValue().set("b", 2000);
  41. System.out.println(redisTemplate.dump("b"));
  42. // 设置过期时间
  43. redisTemplate.expire("b", 10000, TimeUnit.MILLISECONDS);
  44. // System.out.println(redisTemplate.expireAt("b", new Date()));
  45. // 查找匹配的key值,返回set集合
  46. redisTemplate.opsForValue().set("a", 1100);
  47. redisTemplate.opsForValue().set("c", 3000);
  48. System.out.println(redisTemplate.keys("*"));
  49. // 修改key名称
  50. redisTemplate.rename("a", "aa");
  51. // 返回传入key存储的数据类型
  52. System.out.println(redisTemplate.type("aa"));
  53. // 随机取出一个key
  54. System.out.println(redisTemplate.randomKey());
  55. // 返回当前key剩余过期时间
  56. System.out.println(redisTemplate.getExpire("aa"));
  57. System.out.println(redisTemplate.getExpire("aa", TimeUnit.SECONDS));
  58. // 将key持久化
  59. redisTemplate.persist("c");
  60. // 将当前key迁移到指定数据库中
  61. redisTemplate.move("c", 1);
  62. // 返回部分字符
  63. System.out.println(redisTemplate.opsForValue().get("a", 0, 2));
  64. // 批量获取值
  65. List keys2 = new ArrayList();
  66. keys2.add("a");
  67. keys2.add("b");
  68. keys2.add("c");
  69. System.out.println(redisTemplate.opsForValue().multiGet(keys2));
  70. // 新增字符串
  71. redisTemplate.opsForValue().append("a", "1000");
  72. // 如果对应的map集合名称不存在,则添加否则不做修改
  73. Map valueMap = new HashMap();
  74. valueMap.put("valueMap1", "map1");
  75. valueMap.put("valueMap2", "map2");
  76. valueMap.put("valueMap3", "map3");
  77. redisTemplate.opsForValue().multiSetIfAbsent(valueMap);
  78. // 设置map集合到redis
  79. Map valueMap2 = new HashMap();
  80. valueMap2.put("valueMap1", "map1");
  81. valueMap2.put("valueMap2", "map2");
  82. valueMap2.put("valueMap3", "map3");
  83. redisTemplate.opsForValue().multiSet(valueMap2);
  84. // 获取字符串的长度
  85. redisTemplate.opsForValue().size("a");
  86. // 重新设置key对应的值,如果存在返回false,否则返回true
  87. redisTemplate.opsForValue().setIfAbsent("a", 33);
  88. // 将值 value 关联到 key,并将 key 的过期时间设为 timeout
  89. redisTemplate.opsForValue().set("a", 2000, 10, TimeUnit.HOURS);
  90. // 将二进制第offset位值变为value
  91. // redisTemplate.opsForValue().setBit(key, offset, value);
  92. // 对key所储存的字符串值,获取指定偏移量上的位(bit)
  93. // redisTemplate.opsForValue().getBit(key, offset);
  94. return JSONObject.parseObject(req).toJSONString();
  95. }
  96. /**
  97. * hash类型
  98. */
  99. @RequestMapping(value = "/hash")
  100. @ResponseBody
  101. public String hashTest(HttpServletRequest request) {
  102. // 新增hashMap值
  103. redisTemplate.opsForHash().put("hash", "a", "第一个");
  104. // 获取指定map键是否有值,有就返回,没有返回null
  105. System.out.println(redisTemplate.opsForHash().get("hash", "a"));
  106. // 获取指定key中所有键值对
  107. redisTemplate.opsForHash().put("hash", "b", "第二个");
  108. redisTemplate.opsForHash().put("hash", "c", "第三个");
  109. System.out.println(redisTemplate.opsForHash().entries("hash"));
  110. // 以Map集合的方式添加键值对
  111. Map map = new HashMap<String, String>();
  112. map.put("d", "第四个");
  113. map.put("e", "第五个");
  114. redisTemplate.opsForHash().putAll("hash", map);
  115. System.out.println(redisTemplate.opsForHash().entries("hash"));
  116. // 仅当hashKey不存在时才设置
  117. redisTemplate.opsForHash().putIfAbsent("hash", "a", "不是第一个了");
  118. redisTemplate.opsForHash().putIfAbsent("hash", "f", "第六个");
  119. System.out.println(redisTemplate.opsForHash().entries("hash"));
  120. // 删除一个或多个hash表字段
  121. redisTemplate.opsForHash().delete("hash", "e", "f");
  122. System.out.println(redisTemplate.opsForHash().entries("hash"));
  123. // 查看hash表中指定字段是否存在
  124. System.out.println(redisTemplate.opsForHash().hasKey("hash", "f"));
  125. // 给hash表中指定字段的整数值加上增量increment
  126. redisTemplate.opsForHash().put("hash", "e", 10);
  127. redisTemplate.opsForHash().increment("hash", "e", 10);
  128. System.out.println(redisTemplate.opsForHash().get("hash", "e"));
  129. // 给hash表中指定字段的浮点值加上increment
  130. // redisTemplate.opsForHash().put("hash", "f", 15.5);
  131. // redisTemplate.opsForHash().increment("hash", "f", 21.1);
  132. // System.out.println(redisTemplate.opsForHash().get("hash", "f"));
  133. // 获取hash表中所有字段
  134. System.out.println(redisTemplate.opsForHash().keys("hash"));
  135. // 获取hash表中字段数量
  136. System.out.println(redisTemplate.opsForHash().size("hash"));
  137. // 获取hash表中存在的所有值
  138. System.out.println(redisTemplate.opsForHash().values("hash"));
  139. // 匹配获取键值对
  140. try {
  141. Cursor<Map.Entry<Object, Object>> cursor = redisTemplate.opsForHash().scan("hash", ScanOptions.NONE);
  142. while (cursor.hasNext()) {
  143. Map.Entry<Object, Object> entry = cursor.next();
  144. Object key = entry.getKey();
  145. Object value = entry.getValue();
  146. System.out.println(key + ": " + value);
  147. }
  148. cursor.close();
  149. } catch (IOException e) {
  150. e.printStackTrace();
  151. }
  152. return null;
  153. }
  154. /**
  155. * list类型
  156. */
  157. @RequestMapping(value = "/list")
  158. @ResponseBody
  159. public String listTest(HttpServletRequest request) {
  160. // 向列表中头部添加元素
  161. redisTemplate.opsForList().leftPush("list", "第一个list元素");
  162. // 通过index获取列表中的元素
  163. System.out.println(redisTemplate.opsForList().index("list", 0));
  164. // 把多个值存入列表头部
  165. redisTemplate.opsForList().leftPushAll("list", "第二个list元素", "第三个list元素", "第四个list元素");
  166. // 获取列表指定范围内元素,start起始位置,end结束位置,-1返回所有
  167. System.out.println(redisTemplate.opsForList().range("list", 0, 3));
  168. // list存在的时候再加入
  169. redisTemplate.opsForList().leftPushIfPresent("list", "第六个list元素");
  170. System.out.println(redisTemplate.opsForList().range("list", 0, -1));
  171. // 在pivot值存在时在pivot前面添加
  172. redisTemplate.opsForList().leftPush("list", "第六个list元素", "第五个半list元素");
  173. System.out.println(redisTemplate.opsForList().range("list", 0, -1));
  174. // 按照先进先出的原则添加多个值
  175. redisTemplate.opsForList().rightPush("list", "第七个list元素");
  176. redisTemplate.opsForList().rightPushAll("list", "第八个list元素", "第九个list元素");
  177. System.out.println(redisTemplate.opsForList().range("list", 0, -1));
  178. // 在pivot右边添加值
  179. redisTemplate.opsForList().rightPush("list", "第七个list元素", "第七个半list元素");
  180. System.out.println(redisTemplate.opsForList().range("list", 0, -1));
  181. // 设置指定索引处元素的值
  182. redisTemplate.opsForList().set("list", 5, "修改后的list元素");
  183. // 移除并获取列表中第一个元素
  184. System.out.println(redisTemplate.opsForList().leftPop("list"));
  185. System.out.println(redisTemplate.opsForList().leftPop("list", 10, TimeUnit.SECONDS));
  186. // 移除并获取列表中最后一个元素
  187. System.out.println(redisTemplate.opsForList().rightPop("list"));
  188. System.out.println(redisTemplate.opsForList().rightPop("list", 8, TimeUnit.SECONDS));
  189. // 从一个列表右边弹出一个元素并将该元素插入另一个列表的左边
  190. redisTemplate.opsForList().rightPopAndLeftPush("list", "list2");
  191. redisTemplate.opsForList().rightPopAndLeftPush("list", "list2", 10, TimeUnit.SECONDS);
  192. // 删除列表中值等于指定value的元素,index=0删除所有,index>0删除头部开始第一个,index<0删除尾部开始第一个
  193. redisTemplate.opsForList().remove("list", 0, "第三个list元素");
  194. System.out.println(redisTemplate.opsForList().range("list", 0, -1));
  195. // 列表进行裁剪
  196. redisTemplate.opsForList().trim("list", 1, 4);
  197. System.out.println(redisTemplate.opsForList().range("list", 0, -1));
  198. // 获取当前列表长度
  199. System.out.println(redisTemplate.opsForList().size("list"));
  200. return null;
  201. }
  202. /**
  203. * set类型
  204. */
  205. @GetMapping(value = "/set")
  206. @ResponseBody
  207. public String setTest(HttpServletRequest request) {
  208. // 添加元素
  209. redisTemplate.opsForSet().add("set", "第一个set元素");
  210. redisTemplate.opsForSet().add("set", "第二个set元素");
  211. redisTemplate.opsForSet().add("set", "第三个set元素");
  212. redisTemplate.opsForSet().add("set", "第四个set元素");
  213. redisTemplate.opsForSet().add("set", "第五个set元素");
  214. // 获取集合中所有元素
  215. System.out.println(redisTemplate.opsForSet().members("set"));
  216. // 移除元素
  217. redisTemplate.opsForSet().remove("set", "第一个set元素", "第三个set元素");
  218. System.out.println(redisTemplate.opsForSet().members("set"));
  219. // 删除并返回一个随机元素
  220. System.out.println(redisTemplate.opsForSet().pop("set"));
  221. // 获取集合大小
  222. System.out.println(redisTemplate.opsForSet().size("set"));
  223. // 判断集合是否包含value
  224. System.out.println(redisTemplate.opsForSet().isMember("set", "第四个set元素"));
  225. redisTemplate.opsForSet().add("otherSet", "第一个set元素");
  226. redisTemplate.opsForSet().add("otherSet", "第二个set元素");
  227. redisTemplate.opsForSet().add("otherSet", "第三个set元素");
  228. redisTemplate.opsForSet().add("otherSet", "第四个set元素");
  229. // 获取两个集合的交集
  230. System.out.println(redisTemplate.opsForSet().intersect("set", "otherSet"));
  231. // 获取多个集合的交集
  232. redisTemplate.opsForSet().add("thirdSet", "第二个set元素");
  233. Set otherKeys = new HashSet();
  234. otherKeys.add("otherSet");
  235. otherKeys.add("thirdSet");
  236. System.out.println(redisTemplate.opsForSet().intersect("set", otherKeys));
  237. // set集合与otherSet集合的交集存储到targetSet集合中
  238. redisTemplate.opsForSet().intersectAndStore("set", "otherSet", "targetSet");
  239. System.out.println(redisTemplate.opsForSet().members("targetSet"));
  240. // set集合与多个集合的交集存储到targetSet集合中
  241. redisTemplate.opsForSet().intersectAndStore("set", otherKeys, "targetSet");
  242. System.out.println(redisTemplate.opsForSet().members("targetSet"));
  243. // 获取两个或者多个集合的并集
  244. System.out.println(redisTemplate.opsForSet().union("set", "otherSet"));
  245. System.out.println(redisTemplate.opsForSet().union("set", otherKeys));
  246. // set集合与多个集合的并集存储到targetSet集合中
  247. redisTemplate.opsForSet().unionAndStore("set", otherKeys, "targetSet2");
  248. System.out.println(redisTemplate.opsForSet().members("targetSets"));
  249. // 获取两个或者多个集合的差集
  250. System.out.println(redisTemplate.opsForSet().difference("set", otherKeys));
  251. // 差集存储到targetSet中
  252. redisTemplate.opsForSet().unionAndStore("set", otherKeys, "targetSet3");
  253. System.out.println(redisTemplate.opsForSet().members("targetSet3"));
  254. // 随机获取集合中的一个元素
  255. System.out.println(redisTemplate.opsForSet().randomMember("set"));
  256. // 随机获取集合中若干个元素
  257. System.out.println(redisTemplate.opsForSet().randomMembers("set", 5));
  258. // 遍历set,类似于iterator
  259. try {
  260. Cursor<Map.Entry<Object, Object>> cursor = redisTemplate.opsForSet().scan("set", ScanOptions.NONE);
  261. while (cursor.hasNext()) {
  262. System.out.println(cursor.next());
  263. }
  264. cursor.close();
  265. } catch (IOException e) {
  266. e.printStackTrace();
  267. }
  268. return null;
  269. }
  270. /**
  271. * zset类型
  272. */
  273. @GetMapping(value = "/zset")
  274. @ResponseBody
  275. public String zsetTest(HttpServletRequest request) {
  276. // 添加元素,有序集合按照score的值从小到大排序
  277. redisTemplate.opsForZSet().add("zset", "第一个zset", 100);
  278. redisTemplate.opsForZSet().add("zset", "第二个zset", 110);
  279. redisTemplate.opsForZSet().add("zset", "第三个zset", 120);
  280. redisTemplate.opsForZSet().add("zset", "第四个zset", 130);
  281. redisTemplate.opsForZSet().add("zset", "第五个zset", 140);
  282. // 获取元素在集合中的排名,按照score值从小到大排序
  283. System.out.println("从小到大:" + redisTemplate.opsForZSet().rank("zset", "第二个zset"));
  284. // 获取元素在集合中的排名,按照score值从大到小排序
  285. System.out.println("从大到小:" + redisTemplate.opsForZSet().reverseRank("zset", "第二个zset"));
  286. System.out.println("--------------------------------------");
  287. // 获取集合中给定区间的元素,start开始位置,end结束位置,-1查询所有(从小到大)
  288. // 返回值为:Set<ZSetOperations.TypedTuple<V>>
  289. Iterator iterator = redisTemplate.opsForZSet().rangeWithScores("zset", 0, -1).iterator();
  290. while (iterator.hasNext()) {
  291. ZSetOperations.TypedTuple typedTuple = (ZSetOperations.TypedTuple) iterator.next();
  292. System.out.println("从小到大:" + typedTuple.getValue() + ", " + typedTuple.getScore());
  293. }
  294. System.out.println("--------------------------------------");
  295. // 获取集合中给定区间的元素,start开始位置,end结束位置,-1查询所有(从大到小)
  296. Iterator iterator3 = redisTemplate.opsForZSet().reverseRangeWithScores("zset", 0, -1).iterator();
  297. while (iterator3.hasNext()) {
  298. ZSetOperations.TypedTuple typedTuple3 = (ZSetOperations.TypedTuple) iterator3.next();
  299. System.out.println("从大到小:" + typedTuple3.getValue() + ", " + typedTuple3.getScore());
  300. }
  301. System.out.println("--------------------------------------");
  302. // 按照score值查询集合中的元素,结果从小到大排序
  303. System.out.println("从小到大:" + redisTemplate.opsForZSet().rangeByScore("zset", 100, 200));
  304. Iterator iterator4 = redisTemplate.opsForZSet().rangeByScoreWithScores("zset", 100, 200).iterator();
  305. while (iterator4.hasNext()) {
  306. ZSetOperations.TypedTuple typedTuple4 = (ZSetOperations.TypedTuple) iterator4.next();
  307. System.out.println("从小到大:" + typedTuple4.getValue() + ", " + typedTuple4.getScore());
  308. }
  309. System.out.println("--------------------------------------");
  310. // 按照score值查询集合中的元素,结果从大到小排序
  311. System.out.println("从大到小:" + redisTemplate.opsForZSet().reverseRangeByScore("zset", 100, 200));
  312. Iterator iterator5 = redisTemplate.opsForZSet().reverseRangeByScoreWithScores("zset", 100, 200).iterator();
  313. while (iterator5.hasNext()) {
  314. ZSetOperations.TypedTuple typedTuple5 = (ZSetOperations.TypedTuple) iterator5.next();
  315. System.out.println("从大到小:" + typedTuple5.getValue() + ", " + typedTuple5.getScore());
  316. }
  317. System.out.println("--------------------------------------");
  318. // 从大到小排序获取集合中score在给定最大最小范围内的元素
  319. System.out.println("从大到小:" + redisTemplate.opsForZSet().reverseRangeByScore("zset", 100, 1000, 0, -1));
  320. System.out.println("--------------------------------------");
  321. // 根据score获取集合元素数量
  322. System.out.println(redisTemplate.opsForZSet().count("zset", 100, 150));
  323. System.out.println("--------------------------------------");
  324. // 获取集合大小
  325. System.out.println(redisTemplate.opsForZSet().size("zset"));
  326. System.out.println(redisTemplate.opsForZSet().zCard("zset"));
  327. System.out.println("--------------------------------------");
  328. // 获取集合中key value 对应的score
  329. System.out.println(redisTemplate.opsForZSet().score("zset", "第三个zset"));
  330. System.out.println("--------------------------------------");
  331. // 移除指定索引位置的元素
  332. redisTemplate.opsForZSet().removeRange("zset", 0, 1);
  333. System.out.println(redisTemplate.opsForZSet().range("zset", 0, -1));
  334. System.out.println("--------------------------------------");
  335. // 获取key 和otherKey的交集并存储在targetKey
  336. redisTemplate.opsForZSet().add("otherZset", "第二个zset", 200);
  337. redisTemplate.opsForZSet().add("otherZset", "第三个zset", 200);
  338. redisTemplate.opsForZSet().intersectAndStore("zset", "otherZset", "targetZset");
  339. System.out.println(redisTemplate.opsForZSet().range("targetZset", 0, -1));
  340. System.out.println("--------------------------------------");
  341. // 获取key和otherKey的并集并且存储在targetKey中
  342. redisTemplate.opsForZSet().unionAndStore("zset", "otherZset", "fourthZset");
  343. System.out.println(redisTemplate.opsForZSet().range("fourthZset", 0, -1));
  344. System.out.println("--------------------------------------");
  345. // 遍历集合
  346. try {
  347. Cursor<ZSetOperations.TypedTuple> cursor = redisTemplate.opsForZSet().scan("zset", ScanOptions.NONE);
  348. while (cursor.hasNext()) {
  349. ZSetOperations.TypedTuple typedTuple = cursor.next();
  350. System.out.println(typedTuple.getValue() + ", " + typedTuple.getScore());
  351. }
  352. cursor.close();
  353. } catch (IOException e) {
  354. e.printStackTrace();
  355. }
  356. return null;
  357. }
  358. }

发表评论

表情:
评论列表 (有 0 条评论,236人围观)

还没有评论,来说两句吧...

相关阅读

    相关 RedisTemplate操作Redis

    一、SpringDataRedis简介 1、Redis redis是一款开源的Key-Value数据库,运行在内存中,由C语言编写。企业开发通常采用Redis来实现