package com. unicom. microserv. ai. semantic. util;
import org. slf4j. Logger;
import org. slf4j. LoggerFactory;
import org. springframework. beans. factory. annotation. Autowired;
import org. springframework. data. redis. core. RedisTemplate;
import org. springframework. stereotype. Component;
import java. text. ParseException;
import java. text. SimpleDateFormat;
import java. util. *;
import java. util. concurrent. TimeUnit;
@Component
public class RedisStringUtil {
private static Logger logger = LoggerFactory. getLogger ( RedisStringUtil. class ) ;
@Autowired
private RedisTemplate< String, String> redisTemplate;
public Object getDataId ( String key) {
return key == null ? null : redisTemplate. opsForValue ( ) . get ( key) ;
}
public void setDataId ( String key, String value) {
redisTemplate. opsForValue ( ) . set ( key, value) ;
}
public void setDataId ( String key, String value, long timeout, TimeUnit timeUnit) {
redisTemplate. opsForValue ( ) . set ( key, value, timeout, timeUnit) ;
}
public void addDataId ( String key, long number) {
redisTemplate. opsForValue ( ) . increment ( key, number) ;
}
public boolean setIfAbsent ( String key, String value) {
return redisTemplate. opsForValue ( ) . setIfAbsent ( key, value) ;
}
public void deleteKey ( String key) {
if ( redisTemplate. hasKey ( key) ) {
redisTemplate. delete ( key) ;
}
}
public void pushList ( String key, List< String> values) {
redisTemplate. opsForList ( ) . rightPushAll ( key, values) ;
}
public List< String> getAndRemoveList ( String key) {
List< String> list = new ArrayList < > ( ) ;
Long listSize = redisTemplate. opsForList ( ) . size ( key) ;
if ( listSize != null) {
list = redisTemplate. opsForList ( ) . range ( key, 0 , listSize- 1 ) ;
redisTemplate. opsForList ( ) . trim ( key, listSize, - 1 ) ;
}
return list;
}
public void consumerStat ( String key, String field, long number) {
SimpleDateFormat sdf = new SimpleDateFormat ( "yyyy-MM-dd HH:mm:ss" ) ;
try {
String lastTime = ( String) redisTemplate. opsForHash ( ) . get ( key, "lastTime" ) ;
if ( lastTime == null) {
redisTemplate. opsForHash ( ) . put ( key, "lastTime" , sdf. format ( new Date ( ) ) ) ;
redisTemplate. expire ( key, 1 , TimeUnit. DAYS) ;
} else {
Calendar calendar = Calendar. getInstance ( ) ;
calendar. setTime ( sdf. parse ( lastTime) ) ;
int lastDate = calendar. get ( Calendar. DATE) ;
calendar. setTime ( new Date ( ) ) ;
int curDate = calendar. get ( Calendar. DATE) ;
if ( lastDate == curDate) {
redisTemplate. opsForHash ( ) . put ( key, "lastTime" , sdf. format ( new Date ( ) ) ) ;
} else {
redisTemplate. delete ( key) ;
}
}
} catch ( ParseException e) {
logger. error ( e. getMessage ( ) ) ;
}
redisTemplate. opsForHash ( ) . increment ( key, field, number) ;
}
public Map getHashEntries ( String key) {
return redisTemplate. opsForHash ( ) . entries ( key) ;
}
public void expire ( String key, long timeout, TimeUnit timeUnit) {
redisTemplate. expire ( key, timeout, timeUnit) ;
}
public Long getExpire ( String key, TimeUnit timeUnit) {
return redisTemplate. getExpire ( key, timeUnit) ;
}
public Set< String> getKeys ( String pattern) {
return redisTemplate. keys ( pattern) ;
}
}