当前位置:   article > 正文

Redis工具类:redisTemplate_redistemplate 工具类

redistemplate 工具类
  1. import org.springframework.data.redis.connection.DataType;
  2. import org.springframework.data.redis.core.Cursor;
  3. import org.springframework.data.redis.core.ScanOptions;
  4. import org.springframework.data.redis.core.StringRedisTemplate;
  5. import org.springframework.data.redis.core.ZSetOperations.TypedTuple;
  6. import java.util.Collection;
  7. import java.util.Date;
  8. import java.util.List;
  9. import java.util.Map;
  10. import java.util.Map.Entry;
  11. import java.util.Set;
  12. import java.util.concurrent.TimeUnit;
  13. /**
  14. * Redis工具类*/
  15. public class RedisUtil {
  16. private StringRedisTemplate redisTemplate;
  17. public void setRedisTemplate(StringRedisTemplate redisTemplate) {
  18. this.redisTemplate = redisTemplate;
  19. }
  20. public StringRedisTemplate getRedisTemplate() {
  21. return this.redisTemplate;
  22. }
  23. /** -------------------key相关操作--------------------- */
  24. /**
  25. * 删除key
  26. *
  27. * @param key
  28. */
  29. public void delete(String key) {
  30. redisTemplate.delete(key);
  31. }
  32. /**
  33. * 批量删除key
  34. *
  35. * @param keys
  36. */
  37. public void delete(Collection<String> keys) {
  38. redisTemplate.delete(keys);
  39. }
  40. /**
  41. * 序列化key
  42. *
  43. * @param key
  44. * @return
  45. */
  46. public byte[] dump(String key) {
  47. return redisTemplate.dump(key);
  48. }
  49. /**
  50. * 是否存在key
  51. *
  52. * @param key
  53. * @return
  54. */
  55. public Boolean hasKey(String key) {
  56. return redisTemplate.hasKey(key);
  57. }
  58. /**
  59. * 设置过期时间
  60. *
  61. * @param key
  62. * @param timeout
  63. * @param unit
  64. * @return
  65. */
  66. public Boolean expire(String key, long timeout, TimeUnit unit) {
  67. return redisTemplate.expire(key, timeout, unit);
  68. }
  69. 注意:TimeUnit: 常用的颗粒度
  70. TimeUnit.DAYS //天
  71. TimeUnit.HOURS //小时
  72. /**
  73. * 设置过期时间
  74. *
  75. * @param key
  76. * @param date
  77. * @return
  78. */
  79. public Boolean expireAt(String key, Date date) {
  80. return redisTemplate.expireAt(key, date);
  81. }
  82. /**
  83. * 查找匹配的key
  84. *
  85. * @param pattern
  86. * @return
  87. */
  88. public Set<String> keys(String pattern) {
  89. return redisTemplate.keys(pattern);
  90. }
  91. /**
  92. * 将当前数据库的 key 移动到给定的数据库 db 当中
  93. *
  94. * @param key
  95. * @param dbIndex
  96. * @return
  97. */
  98. public Boolean move(String key, int dbIndex) {
  99. return redisTemplate.move(key, dbIndex);
  100. }
  101. /**
  102. * 移除 key 的过期时间,key 将持久保持
  103. *
  104. * @param key
  105. * @return
  106. */
  107. public Boolean persist(String key) {
  108. return redisTemplate.persist(key);
  109. }
  110. /**
  111. * 返回 key 的剩余的过期时间
  112. *
  113. * @param key
  114. * @param unit
  115. * @return
  116. */
  117. public Long getExpire(String key, TimeUnit unit) {
  118. return redisTemplate.getExpire(key, unit);
  119. }
  120. /**
  121. * 返回 key 的剩余的过期时间
  122. *
  123. * @param key
  124. * @return
  125. */
  126. public Long getExpire(String key) {
  127. return redisTemplate.getExpire(key);
  128. }
  129. /**
  130. * 从当前数据库中随机返回一个 key
  131. *
  132. * @return
  133. */
  134. public String randomKey() {
  135. return redisTemplate.randomKey();
  136. }
  137. /**
  138. * 修改 key 的名称
  139. *
  140. * @param oldKey
  141. * @param newKey
  142. */
  143. public void rename(String oldKey, String newKey) {
  144. redisTemplate.rename(oldKey, newKey);
  145. }
  146. /**
  147. * 仅当 newkey 不存在时,将 oldKey 改名为 newkey
  148. *
  149. * @param oldKey
  150. * @param newKey
  151. * @return
  152. */
  153. public Boolean renameIfAbsent(String oldKey, String newKey) {
  154. return redisTemplate.renameIfAbsent(oldKey, newKey);
  155. }
  156. /**
  157. * 返回 key 所储存的值的类型
  158. *
  159. * @param key
  160. * @return
  161. */
  162. public DataType type(String key) {
  163. return redisTemplate.type(key);
  164. }
  165. /** -------------------string相关操作--------------------- */
  166. /**
  167. * 设置指定 key 的值
  168. * @param key
  169. * @param value
  170. */
  171. public void set(String key, String value) {
  172. redisTemplate.opsForValue().set(key, value);
  173. }
  174. /**
  175. * 获取指定 key 的值
  176. * @param key
  177. * @return
  178. */
  179. public String get(String key) {
  180. return redisTemplate.opsForValue().get(key);
  181. }
  182. /**
  183. * 返回 key 中字符串值的子字符
  184. * @param key
  185. * @param start
  186. * @param end
  187. * @return
  188. */
  189. public String getRange(String key, long start, long end) {
  190. return redisTemplate.opsForValue().get(key, start, end);
  191. }
  192. /**
  193. * 将给定 key 的值设为 value ,并返回 key 的旧值(old value)
  194. *
  195. * @param key
  196. * @param value
  197. * @return
  198. */
  199. public String getAndSet(String key, String value) {
  200. return redisTemplate.opsForValue().getAndSet(key, value);
  201. }
  202. /**
  203. * 对 key 所储存的字符串值,获取指定偏移量上的位(bit)
  204. *
  205. * @param key
  206. * @param offset
  207. * @return
  208. */
  209. public Boolean getBit(String key, long offset) {
  210. return redisTemplate.opsForValue().getBit(key, offset);
  211. }
  212. /**
  213. * 批量获取
  214. *
  215. * @param keys
  216. * @return
  217. */
  218. public List<String> multiGet(Collection<String> keys) {
  219. return redisTemplate.opsForValue().multiGet(keys);
  220. }
  221. /**
  222. * 设置ASCII码, 字符串'a'的ASCII码是97, 转为二进制是'01100001', 此方法是将二进制第offset位值变为value
  223. *
  224. * @param key 位置
  225. * @param value
  226. * 值,true为1, false为0
  227. * @return
  228. */
  229. public boolean setBit(String key, long offset, boolean value) {
  230. return redisTemplate.opsForValue().setBit(key, offset, value);
  231. }
  232. /**
  233. * 将值 value 关联到 key ,并将 key 的过期时间设为 timeout
  234. *
  235. * @param key
  236. * @param value
  237. * @param timeout
  238. * 过期时间
  239. * @param unit
  240. * 时间单位, 天:TimeUnit.DAYS 小时:TimeUnit.HOURS 分钟:TimeUnit.MINUTES
  241. * 秒:TimeUnit.SECONDS 毫秒:TimeUnit.MILLISECONDS
  242. */
  243. public void setEx(String key, String value, long timeout, TimeUnit unit) {
  244. redisTemplate.opsForValue().set(key, value, timeout, unit);
  245. }
  246. /**
  247. * 只有在 key 不存在时设置 key 的值
  248. *
  249. * @param key
  250. * @param value
  251. * @return 之前已经存在返回false,不存在返回true
  252. */
  253. public boolean setIfAbsent(String key, String value) {
  254. return redisTemplate.opsForValue().setIfAbsent(key, value);
  255. }
  256. /**
  257. * 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始
  258. *
  259. * @param key
  260. * @param value
  261. * @param offset
  262. * 从指定位置开始覆写
  263. */
  264. public void setRange(String key, String value, long offset) {
  265. redisTemplate.opsForValue().set(key, value, offset);
  266. }
  267. /**
  268. * 获取字符串的长度
  269. *
  270. * @param key
  271. * @return
  272. */
  273. public Long size(String key) {
  274. return redisTemplate.opsForValue().size(key);
  275. }
  276. /**
  277. * 批量添加
  278. *
  279. * @param maps
  280. */
  281. public void multiSet(Map<String, String> maps) {
  282. redisTemplate.opsForValue().multiSet(maps);
  283. }
  284. /**
  285. * 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在
  286. *
  287. * @param maps
  288. * @return 之前已经存在返回false,不存在返回true
  289. */
  290. public boolean multiSetIfAbsent(Map<String, String> maps) {
  291. return redisTemplate.opsForValue().multiSetIfAbsent(maps);
  292. }
  293. /**
  294. * 增加(自增长), 负数则为自减
  295. *
  296. * @param key
  297. * @return
  298. */
  299. public Long incrBy(String key, long increment) {
  300. return redisTemplate.opsForValue().increment(key, increment);
  301. }
  302. /**
  303. *
  304. * @param key
  305. * @return
  306. */
  307. public Double incrByFloat(String key, double increment) {
  308. return redisTemplate.opsForValue().increment(key, increment);
  309. }
  310. /**
  311. * 追加到末尾
  312. *
  313. * @param key
  314. * @param value
  315. * @return
  316. */
  317. public Integer append(String key, String value) {
  318. return redisTemplate.opsForValue().append(key, value);
  319. }
  320. /** -------------------hash相关操作------------------------- */
  321. /**
  322. * 获取存储在哈希表中指定字段的值
  323. *
  324. * @param key
  325. * @param field
  326. * @return
  327. */
  328. public Object hGet(String key, String field) {
  329. return redisTemplate.opsForHash().get(key, field);
  330. }
  331. /**
  332. * 获取所有给定字段的值
  333. *
  334. * @param key
  335. * @return
  336. */
  337. public Map<Object, Object> hGetAll(String key) {
  338. return redisTemplate.opsForHash().entries(key);
  339. }
  340. /**
  341. * 获取所有给定字段的值
  342. *
  343. * @param key
  344. * @param fields
  345. * @return
  346. */
  347. public List<Object> hMultiGet(String key, Collection<Object> fields) {
  348. return redisTemplate.opsForHash().multiGet(key, fields);
  349. }
  350. public void hPut(String key, String hashKey, String value) {
  351. redisTemplate.opsForHash().put(key, hashKey, value);
  352. }
  353. public void hPutAll(String key, Map<String, String> maps) {
  354. redisTemplate.opsForHash().putAll(key, maps);
  355. }
  356. /**
  357. * 仅当hashKey不存在时才设置
  358. *
  359. * @param key
  360. * @param hashKey
  361. * @param value
  362. * @return
  363. */
  364. public Boolean hPutIfAbsent(String key, String hashKey, String value) {
  365. return redisTemplate.opsForHash().putIfAbsent(key, hashKey, value);
  366. }
  367. /**
  368. * 删除一个或多个哈希表字段
  369. *
  370. * @param key
  371. * @param fields
  372. * @return
  373. */
  374. public Long hDelete(String key, Object... fields) {
  375. return redisTemplate.opsForHash().delete(key, fields);
  376. }
  377. /**
  378. * 查看哈希表 key 中,指定的字段是否存在
  379. *
  380. * @param key
  381. * @param field
  382. * @return
  383. */
  384. public boolean hExists(String key, String field) {
  385. return redisTemplate.opsForHash().hasKey(key, field);
  386. }
  387. /**
  388. * 为哈希表 key 中的指定字段的整数值加上增量 increment
  389. *
  390. * @param key
  391. * @param field
  392. * @param increment
  393. * @return
  394. */
  395. public Long hIncrBy(String key, Object field, long increment) {
  396. return redisTemplate.opsForHash().increment(key, field, increment);
  397. }
  398. /**
  399. * 为哈希表 key 中的指定字段的整数值加上增量 increment
  400. *
  401. * @param key
  402. * @param field
  403. * @param delta
  404. * @return
  405. */
  406. public Double hIncrByFloat(String key, Object field, double delta) {
  407. return redisTemplate.opsForHash().increment(key, field, delta);
  408. }
  409. /**
  410. * 获取所有哈希表中的字段
  411. *
  412. * @param key
  413. * @return
  414. */
  415. public Set<Object> hKeys(String key) {
  416. return redisTemplate.opsForHash().keys(key);
  417. }
  418. /**
  419. * 获取哈希表中字段的数量
  420. *
  421. * @param key
  422. * @return
  423. */
  424. public Long hSize(String key) {
  425. return redisTemplate.opsForHash().size(key);
  426. }
  427. /**
  428. * 获取哈希表中所有值
  429. *
  430. * @param key
  431. * @return
  432. */
  433. public List<Object> hValues(String key) {
  434. return redisTemplate.opsForHash().values(key);
  435. }
  436. /**
  437. * 迭代哈希表中的键值对
  438. *
  439. * @param key
  440. * @param options
  441. * @return
  442. */
  443. public Cursor<Entry<Object, Object>> hScan(String key, ScanOptions options) {
  444. return redisTemplate.opsForHash().scan(key, options);
  445. }
  446. /** ------------------------list相关操作---------------------------- */
  447. /**
  448. * 通过索引获取列表中的元素
  449. *
  450. * @param key
  451. * @param index
  452. * @return
  453. */
  454. public String lIndex(String key, long index) {
  455. return redisTemplate.opsForList().index(key, index);
  456. }
  457. /**
  458. * 获取列表指定范围内的元素
  459. *
  460. * @param key
  461. * @param start
  462. * 开始位置, 0是开始位置
  463. * @param end
  464. * 结束位置, -1返回所有
  465. * @return
  466. */
  467. public List<String> lRange(String key, long start, long end) {
  468. return redisTemplate.opsForList().range(key, start, end);
  469. }
  470. /**
  471. * 存储在list头部
  472. *
  473. * @param key
  474. * @param value
  475. * @return
  476. */
  477. public Long lLeftPush(String key, String value) {
  478. return redisTemplate.opsForList().leftPush(key, value);
  479. }
  480. /**
  481. *
  482. * @param key
  483. * @param value
  484. * @return
  485. */
  486. public Long lLeftPushAll(String key, String... value) {
  487. return redisTemplate.opsForList().leftPushAll(key, value);
  488. }
  489. /**
  490. *
  491. * @param key
  492. * @param value
  493. * @return
  494. */
  495. public Long lLeftPushAll(String key, Collection<String> value) {
  496. return redisTemplate.opsForList().leftPushAll(key, value);
  497. }
  498. /**
  499. * 当list存在的时候才加入
  500. *
  501. * @param key
  502. * @param value
  503. * @return
  504. */
  505. public Long lLeftPushIfPresent(String key, String value) {
  506. return redisTemplate.opsForList().leftPushIfPresent(key, value);
  507. }
  508. /**
  509. * 如果pivot存在,再pivot前面添加
  510. *
  511. * @param key
  512. * @param pivot
  513. * @param value
  514. * @return
  515. */
  516. public Long lLeftPush(String key, String pivot, String value) {
  517. return redisTemplate.opsForList().leftPush(key, pivot, value);
  518. }
  519. /**
  520. *
  521. * @param key
  522. * @param value
  523. * @return
  524. */
  525. public Long lRightPush(String key, String value) {
  526. return redisTemplate.opsForList().rightPush(key, value);
  527. }
  528. /**
  529. *
  530. * @param key
  531. * @param value
  532. * @return
  533. */
  534. public Long lRightPushAll(String key, String... value) {
  535. return redisTemplate.opsForList().rightPushAll(key, value);
  536. }
  537. /**
  538. *
  539. * @param key
  540. * @param value
  541. * @return
  542. */
  543. public Long lRightPushAll(String key, Collection<String> value) {
  544. return redisTemplate.opsForList().rightPushAll(key, value);
  545. }
  546. /**
  547. * 为已存在的列表添加值
  548. *
  549. * @param key
  550. * @param value
  551. * @return
  552. */
  553. public Long lRightPushIfPresent(String key, String value) {
  554. return redisTemplate.opsForList().rightPushIfPresent(key, value);
  555. }
  556. /**
  557. * 在pivot元素的右边添加值
  558. *
  559. * @param key
  560. * @param pivot
  561. * @param value
  562. * @return
  563. */
  564. public Long lRightPush(String key, String pivot, String value) {
  565. return redisTemplate.opsForList().rightPush(key, pivot, value);
  566. }
  567. /**
  568. * 通过索引设置列表元素的值
  569. *
  570. * @param key
  571. * @param index
  572. * 位置
  573. * @param value
  574. */
  575. public void lSet(String key, long index, String value) {
  576. redisTemplate.opsForList().set(key, index, value);
  577. }
  578. /**
  579. * 移出并获取列表的第一个元素
  580. *
  581. * @param key
  582. * @return 删除的元素
  583. */
  584. public String lLeftPop(String key) {
  585. return redisTemplate.opsForList().leftPop(key);
  586. }
  587. /**
  588. * 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
  589. *
  590. * @param key
  591. * @param timeout
  592. * 等待时间
  593. * @param unit
  594. * 时间单位
  595. * @return
  596. */
  597. public String lBLeftPop(String key, long timeout, TimeUnit unit) {
  598. return redisTemplate.opsForList().leftPop(key, timeout, unit);
  599. }
  600. /**
  601. * 移除并获取列表最后一个元素
  602. *
  603. * @param key
  604. * @return 删除的元素
  605. */
  606. public String lRightPop(String key) {
  607. return redisTemplate.opsForList().rightPop(key);
  608. }
  609. /**
  610. * 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
  611. *
  612. * @param key
  613. * @param timeout
  614. * 等待时间
  615. * @param unit
  616. * 时间单位
  617. * @return
  618. */
  619. public String lBRightPop(String key, long timeout, TimeUnit unit) {
  620. return redisTemplate.opsForList().rightPop(key, timeout, unit);
  621. }
  622. /**
  623. * 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
  624. *
  625. * @param sourceKey
  626. * @param destinationKey
  627. * @return
  628. */
  629. public String lRightPopAndLeftPush(String sourceKey, String destinationKey) {
  630. return redisTemplate.opsForList().rightPopAndLeftPush(sourceKey,
  631. destinationKey);
  632. }
  633. /**
  634. * 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
  635. *
  636. * @param sourceKey
  637. * @param destinationKey
  638. * @param timeout
  639. * @param unit
  640. * @return
  641. */
  642. public String lBRightPopAndLeftPush(String sourceKey, String destinationKey,
  643. long timeout, TimeUnit unit) {
  644. return redisTemplate.opsForList().rightPopAndLeftPush(sourceKey,
  645. destinationKey, timeout, unit);
  646. }
  647. /**
  648. * 删除集合中值等于value得元素
  649. *
  650. * @param key
  651. * @param index
  652. * index=0, 删除所有值等于value的元素; index>0, 从头部开始删除第一个值等于value的元素;
  653. * index<0, 从尾部开始删除第一个值等于value的元素;
  654. * @param value
  655. * @return
  656. */
  657. public Long lRemove(String key, long index, String value) {
  658. return redisTemplate.opsForList().remove(key, index, value);
  659. }
  660. /**
  661. * 裁剪list
  662. *
  663. * @param key
  664. * @param start
  665. * @param end
  666. */
  667. public void lTrim(String key, long start, long end) {
  668. redisTemplate.opsForList().trim(key, start, end);
  669. }
  670. /**
  671. * 获取列表长度
  672. *
  673. * @param key
  674. * @return
  675. */
  676. public Long lLen(String key) {
  677. return redisTemplate.opsForList().size(key);
  678. }
  679. /** --------------------set相关操作-------------------------- */
  680. /**
  681. * set添加元素
  682. *
  683. * @param key
  684. * @param values
  685. * @return
  686. */
  687. public Long sAdd(String key, String... values) {
  688. return redisTemplate.opsForSet().add(key, values);
  689. }
  690. /**
  691. * set移除元素
  692. *
  693. * @param key
  694. * @param values
  695. * @return
  696. */
  697. public Long sRemove(String key, Object... values) {
  698. return redisTemplate.opsForSet().remove(key, values);
  699. }
  700. /**
  701. * 移除并返回集合的一个随机元素
  702. *
  703. * @param key
  704. * @return
  705. */
  706. public String sPop(String key) {
  707. return redisTemplate.opsForSet().pop(key);
  708. }
  709. /**
  710. * 将元素value从一个集合移到另一个集合
  711. *
  712. * @param key
  713. * @param value
  714. * @param destKey
  715. * @return
  716. */
  717. public Boolean sMove(String key, String value, String destKey) {
  718. return redisTemplate.opsForSet().move(key, value, destKey);
  719. }
  720. /**
  721. * 获取集合的大小
  722. *
  723. * @param key
  724. * @return
  725. */
  726. public Long sSize(String key) {
  727. return redisTemplate.opsForSet().size(key);
  728. }
  729. /**
  730. * 判断集合是否包含value
  731. *
  732. * @param key
  733. * @param value
  734. * @return
  735. */
  736. public Boolean sIsMember(String key, Object value) {
  737. return redisTemplate.opsForSet().isMember(key, value);
  738. }
  739. /**
  740. * 获取两个集合的交集
  741. *
  742. * @param key
  743. * @param otherKey
  744. * @return
  745. */
  746. public Set<String> sIntersect(String key, String otherKey) {
  747. return redisTemplate.opsForSet().intersect(key, otherKey);
  748. }
  749. /**
  750. * 获取key集合与多个集合的交集
  751. *
  752. * @param key
  753. * @param otherKeys
  754. * @return
  755. */
  756. public Set<String> sIntersect(String key, Collection<String> otherKeys) {
  757. return redisTemplate.opsForSet().intersect(key, otherKeys);
  758. }
  759. /**
  760. * key集合与otherKey集合的交集存储到destKey集合中
  761. *
  762. * @param key
  763. * @param otherKey
  764. * @param destKey
  765. * @return
  766. */
  767. public Long sIntersectAndStore(String key, String otherKey, String destKey) {
  768. return redisTemplate.opsForSet().intersectAndStore(key, otherKey,
  769. destKey);
  770. }
  771. /**
  772. * key集合与多个集合的交集存储到destKey集合中
  773. *
  774. * @param key
  775. * @param otherKeys
  776. * @param destKey
  777. * @return
  778. */
  779. public Long sIntersectAndStore(String key, Collection<String> otherKeys,
  780. String destKey) {
  781. return redisTemplate.opsForSet().intersectAndStore(key, otherKeys,
  782. destKey);
  783. }
  784. /**
  785. * 获取两个集合的并集
  786. *
  787. * @param key
  788. * @param otherKeys
  789. * @return
  790. */
  791. public Set<String> sUnion(String key, String otherKeys) {
  792. return redisTemplate.opsForSet().union(key, otherKeys);
  793. }
  794. /**
  795. * 获取key集合与多个集合的并集
  796. *
  797. * @param key
  798. * @param otherKeys
  799. * @return
  800. */
  801. public Set<String> sUnion(String key, Collection<String> otherKeys) {
  802. return redisTemplate.opsForSet().union(key, otherKeys);
  803. }
  804. /**
  805. * key集合与otherKey集合的并集存储到destKey中
  806. *
  807. * @param key
  808. * @param otherKey
  809. * @param destKey
  810. * @return
  811. */
  812. public Long sUnionAndStore(String key, String otherKey, String destKey) {
  813. return redisTemplate.opsForSet().unionAndStore(key, otherKey, destKey);
  814. }
  815. /**
  816. * key集合与多个集合的并集存储到destKey中
  817. *
  818. * @param key
  819. * @param otherKeys
  820. * @param destKey
  821. * @return
  822. */
  823. public Long sUnionAndStore(String key, Collection<String> otherKeys,
  824. String destKey) {
  825. return redisTemplate.opsForSet().unionAndStore(key, otherKeys, destKey);
  826. }
  827. /**
  828. * 获取两个集合的差集
  829. *
  830. * @param key
  831. * @param otherKey
  832. * @return
  833. */
  834. public Set<String> sDifference(String key, String otherKey) {
  835. return redisTemplate.opsForSet().difference(key, otherKey);
  836. }
  837. /**
  838. * 获取key集合与多个集合的差集
  839. *
  840. * @param key
  841. * @param otherKeys
  842. * @return
  843. */
  844. public Set<String> sDifference(String key, Collection<String> otherKeys) {
  845. return redisTemplate.opsForSet().difference(key, otherKeys);
  846. }
  847. /**
  848. * key集合与otherKey集合的差集存储到destKey中
  849. *
  850. * @param key
  851. * @param otherKey
  852. * @param destKey
  853. * @return
  854. */
  855. public Long sDifference(String key, String otherKey, String destKey) {
  856. return redisTemplate.opsForSet().differenceAndStore(key, otherKey,
  857. destKey);
  858. }
  859. /**
  860. * key集合与多个集合的差集存储到destKey中
  861. *
  862. * @param key
  863. * @param otherKeys
  864. * @param destKey
  865. * @return
  866. */
  867. public Long sDifference(String key, Collection<String> otherKeys,
  868. String destKey) {
  869. return redisTemplate.opsForSet().differenceAndStore(key, otherKeys,
  870. destKey);
  871. }
  872. /**
  873. * 获取集合所有元素
  874. *
  875. * @param key
  876. * @return
  877. */
  878. public Set<String> setMembers(String key) {
  879. return redisTemplate.opsForSet().members(key);
  880. }
  881. /**
  882. * 随机获取集合中的一个元素
  883. *
  884. * @param key
  885. * @return
  886. */
  887. public String sRandomMember(String key) {
  888. return redisTemplate.opsForSet().randomMember(key);
  889. }
  890. /**
  891. * 随机获取集合中count个元素
  892. *
  893. * @param key
  894. * @param count
  895. * @return
  896. */
  897. public List<String> sRandomMembers(String key, long count) {
  898. return redisTemplate.opsForSet().randomMembers(key, count);
  899. }
  900. /**
  901. * 随机获取集合中count个元素并且去除重复的
  902. *
  903. * @param key
  904. * @param count
  905. * @return
  906. */
  907. public Set<String> sDistinctRandomMembers(String key, long count) {
  908. return redisTemplate.opsForSet().distinctRandomMembers(key, count);
  909. }
  910. /**
  911. *
  912. * @param key
  913. * @param options
  914. * @return
  915. */
  916. public Cursor<String> sScan(String key, ScanOptions options) {
  917. return redisTemplate.opsForSet().scan(key, options);
  918. }
  919. /**------------------zSet相关操作--------------------------------*/
  920. /**
  921. * 添加元素,有序集合是按照元素的score值由小到大排列
  922. *
  923. * @param key
  924. * @param value
  925. * @param score
  926. * @return
  927. */
  928. public Boolean zAdd(String key, String value, double score) {
  929. return redisTemplate.opsForZSet().add(key, value, score);
  930. }
  931. /**
  932. *
  933. * @param key
  934. * @param values
  935. * @return
  936. */
  937. public Long zAdd(String key, Set<TypedTuple<String>> values) {
  938. return redisTemplate.opsForZSet().add(key, values);
  939. }
  940. /**
  941. *
  942. * @param key
  943. * @param values
  944. * @return
  945. */
  946. public Long zRemove(String key, Object... values) {
  947. return redisTemplate.opsForZSet().remove(key, values);
  948. }
  949. /**
  950. * 增加元素的score值,并返回增加后的值
  951. *
  952. * @param key
  953. * @param value
  954. * @param delta
  955. * @return
  956. */
  957. public Double zIncrementScore(String key, String value, double delta) {
  958. return redisTemplate.opsForZSet().incrementScore(key, value, delta);
  959. }
  960. /**
  961. * 返回元素在集合的排名,有序集合是按照元素的score值由小到大排列
  962. *
  963. * @param key
  964. * @param value
  965. * @return 0表示第一位
  966. */
  967. public Long zRank(String key, Object value) {
  968. return redisTemplate.opsForZSet().rank(key, value);
  969. }
  970. /**
  971. * 返回元素在集合的排名,按元素的score值由大到小排列
  972. *
  973. * @param key
  974. * @param value
  975. * @return
  976. */
  977. public Long zReverseRank(String key, Object value) {
  978. return redisTemplate.opsForZSet().reverseRank(key, value);
  979. }
  980. /**
  981. * 获取集合的元素, 从小到大排序
  982. *
  983. * @param key
  984. * @param start
  985. * 开始位置
  986. * @param end
  987. * 结束位置, -1查询所有
  988. * @return
  989. */
  990. public Set<String> zRange(String key, long start, long end) {
  991. return redisTemplate.opsForZSet().range(key, start, end);
  992. }
  993. /**
  994. * 获取集合元素, 并且把score值也获取
  995. *
  996. * @param key
  997. * @param start
  998. * @param end
  999. * @return
  1000. */
  1001. public Set<TypedTuple<String>> zRangeWithScores(String key, long start,
  1002. long end) {
  1003. return redisTemplate.opsForZSet().rangeWithScores(key, start, end);
  1004. }
  1005. /**
  1006. * 根据Score值查询集合元素
  1007. *
  1008. * @param key
  1009. * @param min
  1010. * 最小值
  1011. * @param max
  1012. * 最大值
  1013. * @return
  1014. */
  1015. public Set<String> zRangeByScore(String key, double min, double max) {
  1016. return redisTemplate.opsForZSet().rangeByScore(key, min, max);
  1017. }
  1018. /**
  1019. * 根据Score值查询集合元素, 从小到大排序
  1020. *
  1021. * @param key
  1022. * @param min
  1023. * 最小值
  1024. * @param max
  1025. * 最大值
  1026. * @return
  1027. */
  1028. public Set<TypedTuple<String>> zRangeByScoreWithScores(String key,
  1029. double min, double max) {
  1030. return redisTemplate.opsForZSet().rangeByScoreWithScores(key, min, max);
  1031. }
  1032. /**
  1033. *
  1034. * @param key
  1035. * @param min
  1036. * @param max
  1037. * @param start
  1038. * @param end
  1039. * @return
  1040. */
  1041. public Set<TypedTuple<String>> zRangeByScoreWithScores(String key,
  1042. double min, double max, long start, long end) {
  1043. return redisTemplate.opsForZSet().rangeByScoreWithScores(key, min, max,
  1044. start, end);
  1045. }
  1046. /**
  1047. * 获取集合的元素, 从大到小排序
  1048. *
  1049. * @param key
  1050. * @param start
  1051. * @param end
  1052. * @return
  1053. */
  1054. public Set<String> zReverseRange(String key, long start, long end) {
  1055. return redisTemplate.opsForZSet().reverseRange(key, start, end);
  1056. }
  1057. /**
  1058. * 获取集合的元素, 从大到小排序, 并返回score值
  1059. *
  1060. * @param key
  1061. * @param start
  1062. * @param end
  1063. * @return
  1064. */
  1065. public Set<TypedTuple<String>> zReverseRangeWithScores(String key,
  1066. long start, long end) {
  1067. return redisTemplate.opsForZSet().reverseRangeWithScores(key, start,
  1068. end);
  1069. }
  1070. /**
  1071. * 根据Score值查询集合元素, 从大到小排序
  1072. *
  1073. * @param key
  1074. * @param min
  1075. * @param max
  1076. * @return
  1077. */
  1078. public Set<String> zReverseRangeByScore(String key, double min,
  1079. double max) {
  1080. return redisTemplate.opsForZSet().reverseRangeByScore(key, min, max);
  1081. }
  1082. /**
  1083. * 根据Score值查询集合元素, 从大到小排序
  1084. *
  1085. * @param key
  1086. * @param min
  1087. * @param max
  1088. * @return
  1089. */
  1090. public Set<TypedTuple<String>> zReverseRangeByScoreWithScores(
  1091. String key, double min, double max) {
  1092. return redisTemplate.opsForZSet().reverseRangeByScoreWithScores(key,
  1093. min, max);
  1094. }
  1095. /**
  1096. *
  1097. * @param key
  1098. * @param min
  1099. * @param max
  1100. * @param start
  1101. * @param end
  1102. * @return
  1103. */
  1104. public Set<String> zReverseRangeByScore(String key, double min,
  1105. double max, long start, long end) {
  1106. return redisTemplate.opsForZSet().reverseRangeByScore(key, min, max,
  1107. start, end);
  1108. }
  1109. /**
  1110. * 根据score值获取集合元素数量
  1111. *
  1112. * @param key
  1113. * @param min
  1114. * @param max
  1115. * @return
  1116. */
  1117. public Long zCount(String key, double min, double max) {
  1118. return redisTemplate.opsForZSet().count(key, min, max);
  1119. }
  1120. /**
  1121. * 获取集合大小
  1122. *
  1123. * @param key
  1124. * @return
  1125. */
  1126. public Long zSize(String key) {
  1127. return redisTemplate.opsForZSet().size(key);
  1128. }
  1129. /**
  1130. * 获取集合大小
  1131. *
  1132. * @param key
  1133. * @return
  1134. */
  1135. public Long zZCard(String key) {
  1136. return redisTemplate.opsForZSet().zCard(key);
  1137. }
  1138. /**
  1139. * 获取集合中value元素的score值
  1140. *
  1141. * @param key
  1142. * @param value
  1143. * @return
  1144. */
  1145. public Double zScore(String key, Object value) {
  1146. return redisTemplate.opsForZSet().score(key, value);
  1147. }
  1148. /**
  1149. * 移除指定索引位置的成员
  1150. *
  1151. * @param key
  1152. * @param start
  1153. * @param end
  1154. * @return
  1155. */
  1156. public Long zRemoveRange(String key, long start, long end) {
  1157. return redisTemplate.opsForZSet().removeRange(key, start, end);
  1158. }
  1159. /**
  1160. * 根据指定的score值的范围来移除成员
  1161. *
  1162. * @param key
  1163. * @param min
  1164. * @param max
  1165. * @return
  1166. */
  1167. public Long zRemoveRangeByScore(String key, double min, double max) {
  1168. return redisTemplate.opsForZSet().removeRangeByScore(key, min, max);
  1169. }
  1170. /**
  1171. * 获取key和otherKey的并集并存储在destKey中
  1172. *
  1173. * @param key
  1174. * @param otherKey
  1175. * @param destKey
  1176. * @return
  1177. */
  1178. public Long zUnionAndStore(String key, String otherKey, String destKey) {
  1179. return redisTemplate.opsForZSet().unionAndStore(key, otherKey, destKey);
  1180. }
  1181. /**
  1182. *
  1183. * @param key
  1184. * @param otherKeys
  1185. * @param destKey
  1186. * @return
  1187. */
  1188. public Long zUnionAndStore(String key, Collection<String> otherKeys,
  1189. String destKey) {
  1190. return redisTemplate.opsForZSet()
  1191. .unionAndStore(key, otherKeys, destKey);
  1192. }
  1193. /**
  1194. * 交集
  1195. *
  1196. * @param key
  1197. * @param otherKey
  1198. * @param destKey
  1199. * @return
  1200. */
  1201. public Long zIntersectAndStore(String key, String otherKey,
  1202. String destKey) {
  1203. return redisTemplate.opsForZSet().intersectAndStore(key, otherKey,
  1204. destKey);
  1205. }
  1206. /**
  1207. * 交集
  1208. *
  1209. * @param key
  1210. * @param otherKeys
  1211. * @param destKey
  1212. * @return
  1213. */
  1214. public Long zIntersectAndStore(String key, Collection<String> otherKeys,
  1215. String destKey) {
  1216. return redisTemplate.opsForZSet().intersectAndStore(key, otherKeys,
  1217. destKey);
  1218. }
  1219. /**
  1220. *
  1221. * @param key
  1222. * @param options
  1223. * @return
  1224. */
  1225. public Cursor<TypedTuple<String>> zScan(String key, ScanOptions options) {
  1226. return redisTemplate.opsForZSet().scan(key, options);
  1227. }
  1228. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/240472
推荐阅读
相关标签
  

闽ICP备14008679号