RedisCommonUtil

    1. /**
    2. * RedisCommon 工具类
    3. */
    4. @Component
    5. public class RedisCommonUtil {
    6. @Autowired
    7. protected RedisTemplate<String, Object> redisTemplate;
    8. /**
    9. * 指定缓存失效时间(expire key seconds)
    10. *
    11. * @param key 建
    12. * @param timeout 失效时间(单位:秒,小于等于0 表示 永久有效)
    13. */
    14. public void expire(String key, long timeout) {
    15. try {
    16. if (timeout > 0) {
    17. redisTemplate.expire(key, timeout, TimeUnit.SECONDS);
    18. }
    19. } catch (Exception e) {
    20. throw new RuntimeException("指定缓存失效时间 异常:", e);
    21. }
    22. }
    23. /**
    24. * 取 key键 的失效时间(ttl key)
    25. *
    26. * @param key 键
    27. * @return 失效时间(单位:秒)
    28. */
    29. public long getExpire(String key) {
    30. return redisTemplate.getExpire(key, TimeUnit.SECONDS);
    31. }
    32. /**
    33. * 判断 key键 是否存在(exists key)
    34. *
    35. * @param key 键
    36. * @return 存在:true;不存在:false
    37. */
    38. public boolean hasKey(String key) {
    39. return redisTemplate.hasKey(key);
    40. }
    41. /**
    42. * 删除key键数组的缓存(del key)
    43. *
    44. * @param keys 要删除缓存的key键 数组
    45. */
    46. public void del(String... keys) {
    47. if(null != keys && keys.length > 0){
    48. redisTemplate.delete(CollectionUtils.arrayToList(keys));
    49. }
    50. }
    51. /**
    52. * 按照 key值前缀 批量删除 缓存
    53. *
    54. * @param prex key值前缀
    55. */
    56. public void delByPrex(String prex) {
    57. Set<String> keys = redisTemplate.keys(prex);
    58. if (!CollectionUtils.isEmpty(keys)) {
    59. redisTemplate.delete(keys);
    60. }
    61. }
    62. }

    RedisStringUtil

    1. /**
    2. * Redis String操作工具类
    3. */
    4. @Component
    5. public class RedisStringUtil extends RedisCommonUtil {
    6. /**
    7. * 获取key键对应的值(GET key)
    8. * @param key 键
    9. * @return
    10. */
    11. public Object get(String key){
    12. if(null == key)
    13. return null;
    14. return redisTemplate.opsForValue().get(key);
    15. }
    16. /**
    17. * 新增一个字符串类型的值,key是键,value是值(SET key value)
    18. * @param key 键
    19. * @param value 值
    20. */
    21. public void set(String key, Object value){
    22. try{
    23. redisTemplate.opsForValue().set(key, value);
    24. } catch (Exception e){
    25. throw new RuntimeException("放入缓存 异常:", e);
    26. }
    27. }
    28. /**
    29. * 放入缓存并设置失效时间(setex key seconds value)
    30. * @param key 键
    31. * @param value 值
    32. * @param timeout 失效时间(单位:秒,小于等于0 表示 永久有效)
    33. */
    34. public void set(String key, Object value, long timeout){
    35. set(key, value);
    36. expire(key, timeout);
    37. }
    38. /**
    39. * 在原有的值基础上新增字符串到末尾(append key value)
    40. * @param key 键
    41. * @param value 新增的字符串
    42. */
    43. public void append(String key, String value){
    44. redisTemplate.opsForValue().append(key, value);
    45. }
    46. /**
    47. * 截取key键对应值得字符串,从开始下标位置到结束下标位置(包含)的字符串(getrange key start end)
    48. * @param key 键
    49. * @param start 开始下标位置
    50. * @param end 结束下标的位置
    51. * @return 从开始下标位置到结束下标位置(包含)的字符串
    52. */
    53. public String get(String key, long start, long end){
    54. return redisTemplate.opsForValue().get(key, start, end);
    55. }
    56. /**
    57. * 获取原来key键对应的值并重新赋新值(getset key value)
    58. * @param key 键
    59. * @param value 新值
    60. * @return 旧值(原来key键对应的值)
    61. */
    62. public Object getAndSet(String key, Object value){
    63. return redisTemplate.opsForValue().getAndSet(key, value);
    64. }
    65. /**
    66. * 获取指定key键对应值的长度(strlen key)
    67. * @param key 键
    68. * @return 返回对应值的长度
    69. */
    70. public long size(String key){
    71. return redisTemplate.opsForValue().size(key);
    72. }
    73. /**
    74. * 将存储在key键上的数字按指定的值 增加(incrby key number)
    75. * @param key 键
    76. * @param delta 指定的增加数字
    77. * @return 返回增加后的值(key键不存在,则在执行操作之前将其设置为0)
    78. */
    79. public long incrby(String key, long delta){
    80. return redisTemplate.opsForValue().increment(key, delta);
    81. }
    82. /**
    83. * 将存储在key键上的数字按指定的值 减少(incrby key number)
    84. * @param key 键
    85. * @param delta 指定的减少数字
    86. * @return 返回减少后的值(key键不存在,则在执行操作之前将其设置为0)
    87. */
    88. public long decrby(String key, long delta){
    89. return redisTemplate.opsForValue().increment(key, -delta);
    90. }
    91. /**
    92. * 如果键不存在则新增,存在则不改变已经有的值(setnx key value)
    93. * @param key 键
    94. * @param value 值
    95. * @return key键不存在,返回ture;存在返回false
    96. */
    97. public boolean setIfAbsent(String key, Object value){
    98. return redisTemplate.opsForValue().setIfAbsent(key, value);
    99. }
    100. /**
    101. * 一次多个键设置它们的值(mset key1 value1 key2 value2 ..)
    102. * @param keyValueMap key为键,value为值
    103. */
    104. public void multiSet(Map<String, Object> keyValueMap){
    105. redisTemplate.opsForValue().multiSet(keyValueMap);
    106. }
    107. /**
    108. * 根据键数组取出对应的value值(mget key1 key2 ..)
    109. * @param keys 键数组
    110. * @return
    111. */
    112. public List<?> multiGet(String ...keys){
    113. return redisTemplate.opsForValue().multiGet(CollectionUtils.arrayToList(keys));
    114. }
    115. }

    RedisListUtil

    1. @Component
    2. public class RedisListUtil<T> extends RedisCommonUtil {
    3. /**
    4. * 根据 索引获取 list缓存值
    5. *
    6. * @param key 键
    7. * @param start 开始索引(下标从0开始)
    8. * @param end 偏移量(-1,则遍历全部数据)
    9. * @return
    10. */
    11. public List<T> range(String key, long start, long end) {
    12. return (List<T>) redisTemplate.opsForList().range(key, start, end);
    13. }
    14. /**
    15. * 获取 List缓存的长度
    16. *
    17. * @param key 键
    18. * @return
    19. */
    20. public long size(String key) {
    21. return redisTemplate.opsForList().size(key);
    22. }
    23. /**
    24. * 获取 key键 对应集合中 index索引的值
    25. *
    26. * @param key 键
    27. * @param index 索引
    28. * @return key键 对应集合中 index索引的值
    29. */
    30. public T index(String key, long index) {
    31. return (T) redisTemplate.opsForList().index(key, index);
    32. }
    33. /**
    34. * 将 value值放入 key对应的List集合 尾部
    35. *
    36. * @param key 键
    37. * @param value 值
    38. */
    39. public void rightPush(String key, Object value) {
    40. redisTemplate.opsForList().rightPush(key, value);
    41. }
    42. /**
    43. * 将 value值数组放入 key对应的List集合 尾部
    44. *
    45. * @param key 键
    46. * @param values 值数组
    47. */
    48. public void rightPush(String key, T... values) {
    49. redisTemplate.opsForList().rightPushAll(key, values);
    50. }
    51. /**
    52. * 将 value值放入 key对应的List集合 头部
    53. *
    54. * @param key 键
    55. * @param value 值
    56. */
    57. public void leftPush(String key, T value) {
    58. redisTemplate.opsForList().leftPush(key, value);
    59. }
    60. /**
    61. * 将 value值数组放入 key对应的List集合 头部
    62. *
    63. * @param key 键
    64. * @param values 值数组
    65. */
    66. public void leftPush(String key, T... values) {
    67. redisTemplate.opsForList().leftPushAll(key, values);
    68. }
    69. /**
    70. * 修改 key键对应的List集合中 索引为index的值
    71. *
    72. * @param key 键
    73. * @param index 索引
    74. * @param value 要更改的值
    75. */
    76. public void setIndex(String key, long index, T value) {
    77. redisTemplate.opsForList().set(key, index, value);
    78. }
    79. }

    RedisHashUtil

    1. @Component
    2. public class RedisHashUtil<HK, HV> extends RedisCommonUtil {
    3. /**
    4. * 将hash表中放入数据,如果不存在将创建(hset key item value)
    5. *
    6. * @param key redis key
    7. * @param item hash key
    8. * @param value hash value
    9. */
    10. public void hset(String key, HK item, HV value) {
    11. redisTemplate.opsForHash().put(key, item, value);
    12. }
    13. /**
    14. * 将hash表中放入数据,如果不存在将创建,设置失效时间(hset key item value;expire key timeout)
    15. * <pre>
    16. * 失效时间说明:
    17. * 1、设置的失效时间是针对整个 redis key,并非是只能 当前的 hash key;
    18. * 2、如果已存在的 hash表有时间,这里将会替换原有的时间
    19. * </pre>
    20. *
    21. * @param key redis key
    22. * @param item hash key
    23. * @param value hash value
    24. * @param timeout 失效时间(单位:秒,小于等于0 表示 永久有效)
    25. */
    26. public void hset(String key, HK item, HV value, long timeout) {
    27. redisTemplate.opsForHash().put(key, item, value);
    28. // 设置 key 失效时间
    29. expire(key, timeout);
    30. }
    31. /**
    32. * 将 map 表中放入数据,如果不存在将创建(hmset key item1 value1 item2 value2 item3 value3 ...)
    33. *
    34. * @param key redis key
    35. * @param hash map 表中放入数据
    36. */
    37. public void hmSet(String key, Map<HK, HV> hash) {
    38. redisTemplate.opsForHash().putAll(key, hash);
    39. }
    40. /**
    41. * 将 map 表中放入数据,如果不存在将创建,设置失效时间(hmset key item1 value1 item2 value2 item3 value3 ...;expire key timeout)
    42. *
    43. * @param key redis key
    44. * @param hash map 表中放入数据
    45. * @param timeout 失效时间(单位:秒,小于等于0 表示 永久有效)
    46. */
    47. public void hmSet(String key, Map<HK, HV> hash, long timeout) {
    48. redisTemplate.opsForHash().putAll(key, hash);
    49. // 设置 key 失效时间
    50. expire(key, timeout);
    51. }
    52. /**
    53. * 判断是否存在 hash item(hexists key item)
    54. *
    55. * @param key redis key
    56. * @param item hash item
    57. * @return 存在返回true,不存在返回 false
    58. */
    59. public boolean hasKey(String key, HK item) {
    60. return redisTemplate.opsForHash().hasKey(key, item);
    61. }
    62. /**
    63. * 获取 hash item 对应的 value(hget key num)
    64. *
    65. * @param key redis key
    66. * @param item hash item
    67. * @return item 对应的 value
    68. */
    69. public HV hget(String key, HK item) {
    70. return (HV) redisTemplate.opsForHash().get(key, item);
    71. }
    72. /**
    73. * 获取 key 对应的 hash 数据(hgetall key)
    74. *
    75. * @param key redis key
    76. * @return 对应的 hash 数据
    77. */
    78. public Map<HK, HV> hmGet(String key) {
    79. return (Map<HK, HV>) redisTemplate.opsForHash().entries(key);
    80. }
    81. /**
    82. * 删除 hash item 对应的项(hdel key item)
    83. *
    84. * @param key redis key
    85. * @param item hash item
    86. * @return 返回删除个数
    87. */
    88. public long hdel(String key, HK... item) {
    89. if (null != item && item.length > 0) {
    90. return redisTemplate.opsForHash().delete(key, item);
    91. }
    92. return 0;
    93. }
    94. /**
    95. * 递增,如果不存在,就会创建一个 并把新增后的值返回(hincrby key item by)
    96. *
    97. * @param key redis key
    98. * @param item hash item
    99. * @param by 递增量
    100. * @return 自增后的数量
    101. */
    102. public long hincr(String key, HK item, long by) {
    103. return redisTemplate.opsForHash().increment(key, item, by);
    104. }
    105. /**
    106. * 递减,如果不存在,就会创建一个 并把递减后的值返回(hincrby key item by)
    107. *
    108. * @param key redis key
    109. * @param item hash item
    110. * @param by 递减量
    111. * @return 递减后的数量
    112. */
    113. public long hdecr(String key, HK item, long by) {
    114. return redisTemplate.opsForHash().increment(key, item, -by);
    115. }
    116. /**
    117. * 获取 key 对应的 hash item 集合(hkeys key)
    118. *
    119. * @param key redis key
    120. * @return hash item 集合
    121. */
    122. public Set<HK> hItemKeys(String key) {
    123. return (Set<HK>) redisTemplate.opsForHash().keys(key);
    124. }
    125. /**
    126. * 获取 key 对应的 hash value 集合(hvals key)
    127. *
    128. * @param key redis key
    129. * @return hash value 集合
    130. */
    131. public List<HV> hItemValues(String key) {
    132. return (List<HV>) redisTemplate.opsForHash().values(key);
    133. }
    134. /**
    135. * 获取 key 对应的 hash 中元素个数(hlen key)
    136. *
    137. * @param key
    138. * @return hash 中元素个数
    139. */
    140. public long hSize(String key) {
    141. return redisTemplate.opsForHash().size(key);
    142. }
    143. }

    RedisSetUtil

    1. @Component
    2. public class RedisSetUtil<T> extends RedisCommonUtil {
    3. /**
    4. * 获取 key键 对应的 Set集合
    5. * @param key 键
    6. * @return key键 对应的 Set集合
    7. */
    8. public Set<T> members(String key){
    9. return (Set<T>) redisTemplate.opsForSet().members(key);
    10. }
    11. /**
    12. * 查找 key键 对应的Set集合中 是否包含value值
    13. * @param key 键
    14. * @param value 值
    15. * @return 包含:true;不包含:false
    16. */
    17. public boolean isMember(String key, Object value){
    18. return redisTemplate.opsForSet().isMember(key, value);
    19. }
    20. /**
    21. * 将数据放在 Set缓存
    22. * @param key 键
    23. * @param values 值数组
    24. * @return 成功个数
    25. */
    26. public long addSet(String key, Object ...values){
    27. return redisTemplate.opsForSet().add(key, values);
    28. }
    29. /**
    30. * 将数据放在 Set缓存,并设置 失效时间
    31. * @param key 键
    32. * @param values 值数组
    33. * @param timeout 失效时间(单位:秒,小于等于0 表示 永久有效)
    34. * @return
    35. */
    36. public long addSet(String key, T []values, long timeout){
    37. long count = redisTemplate.opsForSet().add(key, values);
    38. expire(key, timeout);
    39. return count;
    40. }
    41. /**
    42. * 获取 key键 对应的Set集合的长度
    43. * @param key 键
    44. * @return
    45. */
    46. public long size(String key){
    47. return redisTemplate.opsForSet().size(key);
    48. }
    49. /**
    50. * 移除 key键 对应的Set集合中 value数组
    51. * @param key 键
    52. * @param values 要移除的值数组
    53. * @return 移除成功的个数
    54. */
    55. public long remove(String key, T ...values){
    56. return redisTemplate.opsForSet().remove(key, values);
    57. }
    58. }