package com.vincent.rsf.server.common.service; import com.vincent.rsf.common.utils.Serialize; import com.vincent.rsf.server.common.config.RedisProperties; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; import java.util.Date; import java.util.Set; /** * redis tools * Created by vincent on 2023-03-13 */ @Slf4j @Service public class RedisService { private static final String LINK = "."; protected JedisPool pool; Integer index = 0; public Boolean initialize = true; @Autowired private RedisProperties redisProperties; public JedisPool getPool() { if (null == this.pool) { JedisPoolConfig config = new JedisPoolConfig(); config.setTestOnBorrow(false); this.index = redisProperties.getIndex(); this.pool = new JedisPool(config , redisProperties.getHost() , redisProperties.getPort() , redisProperties.getTimeout() , redisProperties.getPassword() ); } return this.pool; } public Jedis getJedis(){ try{ Jedis jedis = this.getPool().getResource(); if(this.index != jedis.getDB().intValue()) { jedis.select(this.index); } return jedis; } catch (Exception e){ log.error(this.getClass().getSimpleName(), e); } return null; } // key - object ---------------------------------------------------------------------------------------------------------- public String set(String flag, String key, Object value) { if(!this.initialize) { return null; } if(null == value) { this.delete(flag, key); return null; } Jedis jedis = this.getJedis(); try{ return jedis.set((flag + LINK + key).getBytes(), Serialize.serialize(value)); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } return null; } public String set(String flag, String key, Object value, Integer seconds) { if(!this.initialize) { return null; } if (null == value) { this.delete(flag, key); return null; } Jedis jedis = this.getJedis(); try{ return jedis.setex((flag + LINK + key).getBytes(), seconds, Serialize.serialize(value)); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } return null; } public T get(String flag, String key) { if(!this.initialize) { return null; } Jedis jedis = this.getJedis(); try{ byte[] bytes = jedis.get((flag + LINK + key).getBytes()); if(bytes == null || bytes.length == 0 ) { return null; } return (T) Serialize.unSerialize(bytes); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } return null; } public Long delete(String flag, String key) { if(!this.initialize) { return null; } Jedis jedis = this.getJedis(); try{ return jedis.del((flag + LINK + key).getBytes()); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } return null; } public Long clear(String flag) { if(!this.initialize) { return null; } Jedis jedis = this.getJedis(); this.setValue(flag, "CLEARING", "true"); try{ Object returnValue = jedis.eval("local keys = redis.call('keys', ARGV[1]) for i=1,#keys,1000 do redis.call('del', unpack(keys, i, math.min(i+4999, #keys))) end return #keys",0,flag + LINK + "*"); return Long.parseLong(String.valueOf(returnValue)); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } return null; } // 为已存在的key设置过期时间 - 秒 public void setExpire(String flag, String key, int seconds){ if(!this.initialize) { return; } Jedis jedis = this.getJedis(); try{ jedis.expire((flag + LINK + key).getBytes(), seconds); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } } // 为已存在的key设置过期时间 - 具体到时间戳 (秒) public void setExpireAt(String flag, String key, Date toTime){ if(!this.initialize) { return; } Jedis jedis = this.getJedis(); try{ jedis.expireAt((flag + LINK + key).getBytes(), toTime.getTime()/1000); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } } // 获取过期剩余时间(秒) ttl == -1 没有设置过期时间; ttl == -2 key不存在 public Long getExpire(String flag, String key) { if(!this.initialize) { return null; } Jedis jedis = this.getJedis(); try{ return jedis.ttl((flag + LINK + key).getBytes()); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } return null; } // key - string ---------------------------------------------------------------------------------------------------------- public String setValue(String flag, String key, String value) { if(!this.initialize) { return null; } Jedis jedis = this.getJedis(); try{ return jedis.set(flag + LINK + key, value); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } return null; } public String setValue(String flag, String key, String value, Integer seconds) { if(!this.initialize) { return null; } Jedis jedis = this.getJedis(); try{ return jedis.setex(flag + LINK + key, seconds , value); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } return null; } public String getValue(String flag, String key) { if(!this.initialize) { return null; } Jedis jedis = this.getJedis(); try{ return jedis.get(flag + LINK + key); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } return null; } public Long deleteValue(String flag, String... key) { if(!this.initialize) { return null; } Jedis jedis = this.getJedis(); try{ String[] keys = new String[key.length]; for(int i=0;i T getMap(String name, String key) { if(!this.initialize) { return null; } Jedis jedis = this.getJedis(); try{ byte[] bytes = jedis.hget(name.getBytes(), key.getBytes()); if (bytes == null || bytes.length == 0) { return null; } return (T) Serialize.unSerialize(bytes); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } return null; } public Set getMapKeys(String name) { if(!this.initialize) { return null; } Jedis jedis = this.getJedis(); try{ return jedis.hkeys(name); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } return null; } public Long deleteMap(String name, String... key) { if(!this.initialize) { return null; } Jedis jedis = this.getJedis(); try{ String[] keys = new String[key.length]; System.arraycopy(key, 0, keys, 0, key.length); return jedis.hdel(name, keys); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } return null; } public Long clearMap(String name) { if(!this.initialize) { return null; } Jedis jedis = this.getJedis(); try{ return jedis.del(name); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } return null; } public void setMapExpire(String name,int seconds){ if(!this.initialize) { return; } Jedis jedis = this.getJedis(); try{ jedis.expire(name.getBytes(), seconds); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } } public void setMapExpireAt(String name,Date atTime){ if(!this.initialize) { return; } Jedis jedis = this.getJedis(); try{ jedis.expireAt(name.getBytes(), atTime.getTime()/1000); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } } // mq ---------------------------------------------------------------------------------------------------------- // 列表末尾添加元素 public Long push(String name, Object value) { if(!this.initialize) { return null; } if(value == null){ return null; } Jedis jedis = this.getJedis(); try{ return jedis.rpush(name.getBytes(), Serialize.serialize(value)); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } return null; } // 获取列表头部元素 && 删除 public T pop(String name) { if(!this.initialize){ return null; } Jedis jedis = this.getJedis(); try{ byte[] bytes = jedis.lpop(name.getBytes()); if(bytes == null || bytes.length == 0) { return null; } return (T) Serialize.unSerialize(bytes); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } return null; } // 删除 public Long deleteList(String name) { if(!this.initialize) { return null; } Jedis jedis = this.getJedis(); try{ return jedis.del(name); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } return null; } public void setListExpire(String name, int seconds){ if(!this.initialize) { return; } Jedis jedis = this.getJedis(); try{ jedis.expire(name.getBytes(), seconds); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } } public void setListExpireAt(String name, Date atTime){ if(!this.initialize) { return; } Jedis jedis = this.getJedis(); try{ jedis.expireAt(name.getBytes(), atTime.getTime()/1000); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } } // count ---------------------------------------------------------------------------------------------------------- public Long incr(String key) { if(!this.initialize) { return null; } Jedis jedis = this.getJedis(); try{ return jedis.incr("COUNT." + key); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } return null; } public Long decr(String key) { if(!this.initialize) { return null; } Jedis jedis = this.getJedis(); try{ return jedis.decr("COUNT." + key); } catch (Exception e) { log.error(this.getClass().getSimpleName(), e); } return null; } }