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