package com.rrtx.services.common.redis;


import java.io.Serializable;
import java.util.List;

/**
 * ClassName: IRedisService<br>
 * Description: IRedisService <br>
 * Company: rrtx
 *
 * @author rrtx
 * @version v1.0.0    2019/7/24 5:14 PM  xugz    文件初始创建
 */
public interface IRedisService {


	/**
	 * get命令
	 *
	 * @param key key
	 * @return String
	 */
	String get(String key) ;


	/**
	 * 获取obj
	 * @param key
	 * @return
	 */
	<T> T getObject(String key, Class<T> requiredType);

	<T> List<T> getList(String key);

	/**
	 * set命令
	 *
	 * @param key   key
	 * @param value value
	 * @return String
	 */
	String set(String key, String value) ;

	/**
	 * set 命令
	 *
	 * @param key         key
	 * @param value       value
	 * @param milliscends 毫秒
	 * @return String
	 */
	String set(String key, String value, Long milliscends) ;

	/**
	 * list存储
	 * @param key
	 * @param value
	 */
	<T> void set(String key, List<T> value);

	/**
	 * list存储并设置超时时间
	 * @param key
	 * @param value
	 * @param milliscends
	 */
	<T> void set(String key, List<T> value, Long milliscends);

	/**
	 * 可序列化对象存储
	 * @param key
	 * @param obj
	 */
	void set(String key, Serializable obj);

	/**
	 * 可序列化对象存储 并设置超时时间
	 * @param key
	 * @param obj
	 * @param milliscends
	 */
	void set(String key, Serializable obj, Long milliscends);

	/**
	 * del命令
	 *
	 * @param key key
	 * @return Long
	 */
	Long del(String... key) ;

	/**
	 * exists命令
	 *
	 * @param key key
	 * @return Boolean
	 */
	Boolean exists(String key) ;

	/**
	 * pttl命令
	 *
	 * @param key key
	 * @return Long
	 */
	Long pttl(String key) ;

	/**
	 * pexpire命令
	 *
	 * @param key         key
	 * @param milliscends 毫秒
	 * @return Long
	 */
	Long pexpire(String key, Long milliscends) ;
}
