package com.sy.coinage.core.redis;

import com.sy.coinage.config.RedisConfig;

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

/**
 * redis缓存操作服务 由{@link RedisConfig}实现业务 由{@link RedisFastJsonSerializer}重新实现序列号
 *
 * @author lug 2021年6月3日
 */
public interface RedisService {

    /**
     * -缓存String类型
     */
    boolean set(String key, String value);

    /**
     * -缓存Object类型
     */
    boolean setObject(String key, Object obj);

    /**
     * -缓存List<Object>类型
     */
    boolean setList(String key, List<Object> list);

    /**
     * -缓存Map<Object, Object> 类型
     */
    boolean hmset(String key, Map<Object, Object> map);

    /**
     * -设置缓存时长（毫秒）
     */
    boolean expire(String key, long expire);

    /**
     * -获取String类型
     */
    String get(String key);

    /**
     * -获取Object类型
     */
    Object getObject(String key);

    /**
     * -获取List<Object>类型
     *
     * @param key
     * @param start 开始下标
     * @param end 结束下标
     * @return
     */
    List<Object> getList(String key, long start, long end);

    /**
     * -删除缓存
     */
    void del(String... key);

    /**
     * -增加原子数
     */
    long incr(String key, long time);

    /**
     * -减少原子数
     */
    long decr(String key, long time);

    Map<Object, Object> getMap(String key);

    Boolean hasKey(String key);

    /**
     * -set集合添加元素
     */
    boolean addSet(String setName, List<Object> list);

    /**
     * -获取set集合中的值
     */
    Set<Object> membersForSet(String setName);

    /**
     * -set集合是否包含
     */
    Boolean isMember(String setName, Object item);

    /**
     * -更新集合
     */
    void updateSet(String setName, List<Object> list);

    /**
     * -更新String类型key
     */
    void update(String key, String value);

    /**
     * -赋值
     */
    boolean setIfAbsent(String key, String value, Long time);

    void releaseLock(String key, String value);

    /**
     * -模糊查找key
     *
     * @param pattern
     * @return
     */
    Collection<String> keys(String pattern);

    /**
     * -模糊删除key
     *
     * @param pattern
     * @return
     */
    Long delKeys(String pattern);

}
