package com.cfive.pinnacle.utils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.BoundSetOperations; import org.springframework.data.redis.core.HashOperations; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Component; import java.util.*; import java.util.concurrent.TimeUnit; @SuppressWarnings(value = {"unchecked", "rawtypes"}) @Component public class RedisCache { private RedisTemplate redisTemplate; @Autowired public void setRedisTemplate(RedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; } /** * 缓存基本的对象,Integer、String、实体类等 * * @param key 缓存的键 * @param value 缓存的值 */ public void setCacheObject(final String key, final T value) { redisTemplate.opsForValue().set(key, value); } /** * 缓存基本的对象,Integer、String、实体类等 * * @param key 缓存的键 * @param value 缓存的值 * @param timeout 超时时间 * @param timeUnit 时间颗粒度 */ public void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) { redisTemplate.opsForValue().set(key, value, timeout, timeUnit); } /** * 设置有效时间 * * @param key 缓存的键 * @param timeout 超时时间 * @return true=设置成功;false=设置失败 */ public boolean expire(final String key, final long timeout) { return expire(key, timeout, TimeUnit.SECONDS); } /** * 设置有效时间 * * @param key Redis 键 * @param timeout 超时时间 * @param unit 时间颗粒度 * @return true=设置成功;false=设置失败 */ public boolean expire(final String key, final long timeout, final TimeUnit unit) { return Boolean.TRUE.equals(redisTemplate.expire(key, timeout, unit)); } /** * 获得缓存的基本对象 * * @param key 缓存的键 * @return 缓存的值 */ public T getCacheObject(final String key) { ValueOperations operation = redisTemplate.opsForValue(); return operation.get(key); } /** * 删除单个对象 * * @param key 缓存的键 * @return true=删除成功;false=删除失败 */ public boolean deleteObject(final String key) { return Boolean.TRUE.equals(redisTemplate.delete(key)); } /** * 删除集合对象 * * @param collection 多个键 * @return 删除个数 */ public long deleteObject(final Collection collection) { return redisTemplate.delete(collection); } /** * 缓存 List 数据 * * @param key 缓存的键 * @param dataList 缓存的 List 数据 * @return 缓存的个数 */ public long setCacheList(final String key, final List dataList) { Long count = redisTemplate.opsForList().rightPushAll(key, dataList); return count == null ? 0 : count; } /** * 获得缓存的 List 数据 * * @param key 缓存的键 * @return 缓存的键对应的 List 数据 */ public List getCacheList(final String key) { return redisTemplate.opsForList().range(key, 0, -1); } /** * 缓存 Set 数据 * * @param key 缓存的键 * @param dataSet 缓存的 Set 数据 * @return 缓存数据的对象 */ public BoundSetOperations setCacheSet(final String key, final Set dataSet) { BoundSetOperations setOperation = redisTemplate.boundSetOps(key); for (T t : dataSet) { setOperation.add(t); } return setOperation; } /** * 获得缓存的 Set 数据 * * @param key 缓存的键 * @return 缓存的键对应的 Set 数据 */ public Set getCacheSet(final String key) { return redisTemplate.opsForSet().members(key); } /** * 缓存 Map 数据 * * @param key 缓存的键 * @param dataMap 缓存的 Map 数据 */ public void setCacheMap(final String key, final Map dataMap) { if (dataMap != null) { redisTemplate.opsForHash().putAll(key, dataMap); } } /** * 获得缓存的 Map 据 * * @param key 缓存的键 * @return 缓存的键对应的 Map 数据 */ public Map getCacheMap(final String key) { return redisTemplate.opsForHash().entries(key); } /** * 往 Hash 中存入数据 * * @param key Redis 键 * @param hKey Hash 键 * @param value 值 */ public void setCacheMapValue(final String key, final String hKey, final T value) { redisTemplate.opsForHash().put(key, hKey, value); } /** * 获取 Hash 中的数据 * * @param key Redis 键 * @param hKey Hash 键 * @return Hash 中的对象 */ public T getCacheMapValue(final String key, final String hKey) { HashOperations opsForHash = redisTemplate.opsForHash(); return opsForHash.get(key, hKey); } /** * 删除 Hash 中的数据 * * @param key Redis 键 * @param hkey Hash 键 */ public void delCacheMapValue(final String key, final String hkey) { HashOperations hashOperations = redisTemplate.opsForHash(); hashOperations.delete(key, hkey); } /** * 获取多个 Hash 中的数据 * * @param key Redis 键 * @param hKeys Hash 键集合 * @return Hash 对象集合 */ public List getMultiCacheMapValue(final String key, final Collection hKeys) { return redisTemplate.opsForHash().multiGet(key, hKeys); } /** * 获得缓存的基本对象列表 * * @param pattern 字符串前缀 * @return 对象列表 */ public Collection keys(final String pattern) { return redisTemplate.keys(pattern); } }