@Component
public class RedisUtils {
private static final Logger log = LoggerFactory.getLogger(RedisUtils.class);
@Resource
private RedisTemplate<String, Object> redisTemplate;
public RedisUtils() {
}
public Boolean expire(final String key, long time, TimeUnit timeUnit) {
return time <= 0L ? true : this.redisTemplate.expire(key, time, timeUnit);
}
public Boolean expire(final String key, long time) {
return this.expire(key, time, TimeUnit.SECONDS);
}
public Long getExpire(final String key, TimeUnit timeUnit) {
return this.redisTemplate.getExpire(key, timeUnit);
}
public Long getExpire(final String key) {
return this.getExpire(key, TimeUnit.SECONDS);
}
public Boolean hasKey(final String key) {
return this.redisTemplate.hasKey(key);
}
public void delete(final String... key) {
if (key != null && key.length > 0) {
if (key.length == 1) {
this.redisTemplate.delete(key[0]);
} else {
this.redisTemplate.delete(CollectionUtils.arrayToList(key));
}
}
}
public Set<String> getKeys(String pattern) {
return this.redisTemplate.keys(pattern);
}
public Set<String> scanKeys(String pattern) {
return this.scanKeys(pattern, 500);
}
public Set<String> scanKeys(String pattern, Integer keyMaxCount) {
Set<String> keys = new HashSet();
this.redisTemplate.execute((connection) -> {
Cursor cursor = connection.scan((new ScanOptionsBuilder()).match(pattern).count((long)keyMaxCount).build());
while(cursor.hasNext()) {
keys.add(new String((byte[])cursor.next()));
}
return null;
});
return keys;
}
public void delete(Set<String> keys) {
this.redisTemplate.delete(keys);
}
public Object get(final String key) {
return this.redisTemplate.opsForValue().get(key);
}
public boolean set(final String key, Object value) {
this.redisTemplate.opsForValue().set(key, value);
return true;
}
public boolean set(final String key, Object value, long time, TimeUnit timeUnit) {
if (time > 0L) {
this.redisTemplate.opsForValue().set(key, value, time, timeUnit);
return true;
} else {
return this.set(key, value);
}
}
public boolean set(final String key, Object value, long time) {
return this.set(key, value, time, TimeUnit.SECONDS);
}
public Boolean setIfAbsent(final String key, Object value) {
return this.redisTemplate.opsForValue().setIfAbsent(key, value);
}
public Object getAndSet(final String key, Object newValue) {
return this.redisTemplate.opsForValue().getAndSet(key, newValue);
}
public Long increment(final String key, long delta) {
return this.redisTemplate.opsForValue().increment(key, delta);
}
public Long decrement(final String key, long delta) {
return this.redisTemplate.opsForValue().decrement(key, delta);
}
public Object hget(final String key, String item) {
return this.redisTemplate.opsForHash().get(key, item);
}
public Map<Object, Object> hmget(final String key) {
return this.redisTemplate.opsForHash().entries(key);
}
public void hmset(final String key, Map<String, Object> map) {
this.redisTemplate.opsForHash().putAll(key, map);
}
public void hmset(final String key, Map<String, Object> map, long time, TimeUnit timeUnit) {
this.redisTemplate.opsForHash().putAll(key, map);
if (time > 0L) {
this.expire(key, time, timeUnit);
}
}
public void hmset(final String key, Map<String, Object> map, long time) {
this.hmset(key, map, time, TimeUnit.SECONDS);
}
public void hset(final String key, String hashKey, Object value) {
this.redisTemplate.opsForHash().put(key, hashKey, value);
}
public void hset(final String key, String hashKey, Object value, long time, TimeUnit timeUnit) {
this.redisTemplate.opsForHash().put(key, hashKey, value);
if (time > 0L) {
this.expire(key, time, timeUnit);
}
}
public void hset(final String key, String item, Object value, long time) {
this.hset(key, item, value, time, TimeUnit.SECONDS);
}
public void hdel(final String key, Object... hashKeys) {
this.redisTemplate.opsForHash().delete(key, hashKeys);
}
public boolean hHasKey(final String key, String hashKey) {
return this.redisTemplate.opsForHash().hasKey(key, hashKey);
}
public long hincrement(final String key, String hashKey, long delta) {
return this.redisTemplate.opsForHash().increment(key, hashKey, delta);
}
public long hdecrement(final String key, String hashKey, long delta) {
return this.redisTemplate.opsForHash().increment(key, hashKey, -delta);
}
public Set<Object> sGet(final String key) {
return this.redisTemplate.opsForSet().members(key);
}
public Boolean sHasKey(final String key, Object value) {
return this.redisTemplate.opsForSet().isMember(key, value);
}
public Long sSet(final String key, Object... values) {
return this.redisTemplate.opsForSet().add(key, values);
}
public Long sSetAndTime(final String key, long time, TimeUnit timeUnit, Object... values) {
Long count = this.redisTemplate.opsForSet().add(key, values);
if (time > 0L) {
this.expire(key, time, timeUnit);
}
return count;
}
public long sSetAndTime(final String key, long time, Object... values) {
return this.sSetAndTime(key, time, TimeUnit.SECONDS, values);
}
public Long sGetSetSize(final String key) {
return this.redisTemplate.opsForSet().size(key);
}
public Long setRemove(final String key, Object... values) {
return this.redisTemplate.opsForSet().remove(key, values);
}
public <T> T runLua(String lua, Class<T> returnType, List<String> keys, List<String> values) {
RedisConnectionFactory redisConnectionFactory = this.redisTemplate.getConnectionFactory();
if (null != redisConnectionFactory && redisConnectionFactory.getConnection() instanceof LettuceClusterConnection) {
DefaultRedisScript<T> redisScript = new DefaultRedisScript(lua, returnType);
List<byte[]> args = (List)keys.stream().map(String::getBytes).collect(Collectors.toList());
List<byte[]> valuesByte = (List)values.stream().map(String::getBytes).collect(Collectors.toList());
args.addAll(valuesByte);
LettuceClusterConnection lettuceClusterConnection = (LettuceClusterConnection)redisConnectionFactory.getConnection();
return lettuceClusterConnection.scriptingCommands().eval(redisScript.getScriptAsString().getBytes(), ReturnType.fromJavaType(redisScript.getResultType()), keys.size(), (byte[][])args.toArray(new byte[args.size()][]));
} else {
return this.redisTemplate.execute((connection) -> {
Object nativeConnection = connection.getNativeConnection();
if (nativeConnection instanceof JedisCluster) {
return ((JedisCluster)nativeConnection).eval(lua, keys, values);
} else {
return nativeConnection instanceof Jedis ? ((Jedis)nativeConnection).eval(lua, keys, values) : null;
}
});
}
}
} 这是RedisUtils方法