package cn.axzo.msg.center.common.redis;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * jedis 操作
 * @author Smile
 */
public interface IAxzoJedisManager {

    /**
     * 值对象设置
     * @param key
     * @param value
     * @return
     */
    boolean set(final String key, Object value);

    /**
     * 值对象设置
     * @param key
     * @param value
     * @param time
     * @return
     */
    boolean set(final String key, Object value, long time);

    /**
     * 设置延长超时时间
     * @param key
     * @param value
     * @param time
     * @return
     */
    boolean setIfPresent(String key, Object value, long time);

    /**
     * 返回
     * @param key
     * @param <T>
     * @return
     */
    <T> T get(final String key, INullValueHandler<T> handler);

    /**
     * 返回
     * @param key
     * @param handler
     * @param time
     * @param <T>
     * @return
     */
    <T> T get(final String key, INullValueHandler<T> handler, long time);

    /**
     * 返回数据
     * @param key
     * @param <T>
     * @return
     */
    <T> T get(final String key);

    /**
     * 删除
     * @param key
     * @return
     */
    boolean del(final String key);

    Long ssl(final String key);

    /**
     * 批量设置
     * @param map
     */
    void setPipe(Map<String, Object> map);

    /**
     * 批量获取
     * @param keys
     * @return
     */
    List<Object> getPipe(List<String> keys);

    /**
     * 设置hash
     * @param key key
     * @param map map
     */
    void setHash(String key, Map<String, Object> map);

    /**
     * 获取hash
     * @param key key
     * @return
     */
    Map<String, Object> getHash(String key);

    /**
     * 是否存在key
     * @param key key
     */
    boolean hasKey(String key);

    /**
     * 批量删除key
     */
    void del(List<String> keys);

    /**
     * scan 获取数据
     */
    Set<String> scanKeys(String keyWords);

    Set<String> scanPatternKey(String pattern);
}
