/**
 *
 */
package com.caimei.www.service.redis;

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

/**
 * @author 王永煌
 * @date 2015年6月19日
 * @time 上午10:09:21
 * @version 1.0
 * @company Shenzhen Caimei Information Technology Co., LTD
 * @license Copyright © 2014 CAIMEI365.com All Rights Reserved.
 */
public interface RedisService {
	/**
	 * 批量删除对应的value
	 * @param keys
	 */
	public void remove(final String... keys);
	/**
	 * 批量删除正则匹配的value
	 * @param pattern
	 */
	public void removePattern(final String pattern);
	/**
	 * 删除对应的value
	 * @param key
	 */
	public void remove(final String key);
	/**
	 * 判断缓存中是否存在
	 * @param key
	 * @return
	 */
	public boolean exists(final String key);
	/**
	 * 读取缓存
	 * @param key
	 * @return
	 */
	public Object get(final String key);
	/**
	 * 写入缓存
	 * @param key
	 * @param value
	 * @return
	 */
	public boolean set(final String key, Object value);
	/**
	 * 写入缓存
	 * @param key
	 * @param value
	 * @param expireTime
	 * @return
	 */
	public boolean set(final String key, Object value, Long expireTime);

	///////////////////////////////////////
	//         针对list操作的方法                                     //
	///////////////////////////////////////
	/**
	 * 在key对应list的尾部添加value
	 * @param key
	 * @param value
	 * @return
	 */
	public long rightPushForList(final String key, Object value);
	/**
	 * 在key对应list的尾部移除value
	 * @param key
	 * @return
	 */
	public Object rightPopForList(final String key);
	/**
	 * 在key对应list的头部添加value
	 * @param key
	 * @param value
	 * @return
	 */
	public long leftPushForList(final String key, Object value);
	/**
	 * 在key对应list的头部移除value
	 * @param key
	 * @return
	 */
	public Object leftPopForList(final String key);
	/**
	 * key对应list的长度
	 * @param key
	 * @return
	 */
	public long listSize(final String key);
	/**
	 * 获取list集合
	 * @param Key
	 * @param begin
	 * @param end
	 * @return
	 */
	public List<?> getList(final String Key, int begin, int end);
	/**
	 * 移除list的index位置上的值
	 * @param Key
	 * @param index
	 * @param value
	 */
	public void removeList(final String Key, long index, Object value);
	/**
	 * 重置list的index位置上的值
	 * @param Key
	 * @param index
	 * @param value
	 */
	public void setList(final String Key, long index, Object value);
	/**
	 * 写入list
	 * @param key
	 * @param list
	 */
	@SuppressWarnings("rawtypes")
	public void setList(final String key, List list);

	/**
	 * 写入map
	 * @param key
	 * @param map
	 */
	public void setMap(final String key, Map<String, Object> map);

	/**
	 * 写入map
	 * @param key
	 * @param hashKey
	 * @param hashValue
	 */
	public void setMapByKV(final String key, final Object hashKey, Object hashValue);

	/**
	 * 写入map
	 * @param key
	 */
	public Object get(final String key, final String hashKey);

	/**
	 * 删除map中的某个key-value
	 * @param key
	 * @param hashKey
	 * @return
	 */
	public void removeHash(final String key, final String hashKey);

	public Map<Object, Object> getEntries(final String key);

	 public long increase(String key, long step);

	 /**
	  * 获取失效时间
	  */
	 public long getExpireTime(final String key);

}
