package com.palmnest.dao.redis;

import org.springframework.data.redis.connection.RedisStringCommands;

import java.util.Set;

/**
 * reids缓存接口
 *
 * @author yubing
 * @since 2016-04-14
 */
public interface BaseRedisDao {

	/**
	 * 清空redis缓存
	 */
	public void flushAllCache();

	/**
	 * 获取key对应的值
	 *
	 * @param key
	 * @return
	 */
	public String get(String key);

	/**
	 * 存储key
	 *
	 * @param key
	 * @param value
	 */
	public void set(String key, String value);

	/**
	 * 存储key
	 *
	 * @param key
	 * @param value
	 * @param liveTime 有效时间
	 */
	public void set(String key, String value, long liveTime);

	/**
	 * 模糊查询匹配的集合
	 *
	 * @param keyLike
	 * @return
	 */
	public Set<String> getKeyValues(String keyLike);

	/**
	 * 模糊删除匹配的集合
	 *
	 * @param keyLike
	 * @return
	 */
	public void delKeyLike(String keyLike);

	/**
	 * 删除指定的key
	 *
	 * @param key
	 */
	public void dele(String key);

	/**
	 * 获取Redis 中keys的个数大小
	 *
	 * @return
	 */
	public Long getDbsize();

	/**
	 * 设置指定key,指定位上的值
	 *
	 * @param key   指定key值
	 * @param index 指定位置上
	 * @param tag   true或false
	 * @return
	 */
	public Boolean setBit(String key, Integer index, Boolean tag);

	/**
	 * 获取指定key指定位上的值
	 *
	 * @param key
	 * @param index
	 * @return
	 */
	public Boolean getBit(String key, Integer index);

	/**
	 * 统计bitmap中,指定key,value值为1的个数
	 *
	 * @param key
	 * @return
	 */
	public Long bitCount(String key);

	/**
	 * 指定key,指定区间value值为1的个数
	 *
	 * @param key
	 * @param start
	 * @param end
	 * @return
	 */
	public Long bitCount(String key, int start, int end);

	/**
	 * 对一个或多个保存二进制位的字符串 key 进行位元操作，并将结果保存到 saveKey 上。
	 *
	 * @param op
	 * @param saveKey
	 * @param desKey
	 * @return
	 */
	public Long bitOp(RedisStringCommands.BitOperation op, String saveKey, String... desKey);
}
