:year */ public String generateCacheKey(String namespace, Object... keys); public Boolean existsKey(String key); /** * 将对象添加到缓存中 * * @param key 缓存的 key 值*@param value 对象 */ public void putIntoCache(final String key, final Object value); /** * 将对象添加到缓存中 * * @param key 缓存的 key 值*@param value 对象 * @param time 过期时间(多久之后过期) 单位为秒 */ public void putIntoCache(final String key, final Object value, final long time); /** * 清除缓存 * * @param key 缓存的 key 值*/ public void clearCache(final String key); /** * 从缓存中获得对象 * * @param key 缓存的 key * @param clazz 对象的类型 * @return 缓存的 value */ publicT getFromCache(final String key, final Classclazz); /** * 从缓存中获取字符串 * @param key * @return */ String getStringFromCache(final String key); publicT getMapFromCache(final String key, final Classclazz); publicT getObjectFromCache(final String key,final Classclazz); /** * 根据 key ,从缓存中获取 list * * @param key 缓存的 key * @param clazz 对象的类型 */ publicListgetListFromCache(final String key, final Classclazz); /** * 从缓存中批量获取 对象的值 * * @param keys 缓存 key 的list * @param clazz 对象的类型 * @return */ publicListgetListFromCache(final Listkeys, final Classclazz); /** * 自增 key * * @param key * @return 自增之后的 id */ public Long incr(final String key); /** * 自增 key * * @param key * @return 自增之后的 id */ public Long incr(final String key, final Long expireTime); /** * hashSet put操作 * * @param hashName hash hash表的名字 * @param filedName key 值*@param value key 对应的 value值*@param expireTime 超时时间 * @return */ Boolean hset(String hashName, String filedName, Object value, long expireTime); /** * hashSet 操作 * * @param hashName hash hash表的名字 * @param filedName key 值*@param value key 对应的value值*@return */ Boolean hset(String hashName, String filedName, Object value); /** * hashGet hash get 操作 * * @param hashName hash 表的名字 * @param filedName key 值*@return 对应的 value 的值 */ Object hget(String hashName, String filedName); /** * hashGet hash getAll 操作 * * @param hashName hash 表的名 * @param filedName key 值*@return 对应的 value 的值 */Listhgetall(String hashName, final Classclazz); /** * hashGet hash haskey 操作 * * @param hashName hash 表的名字 * @param filedName key 值*@return */ Boolean hhaskey(String hashName, String filedName); /**	* @param hashName	* @param filedName	* @return	*/	Boolean hExists(String hashName, String filedName); /** * hashGet hash delete 操作 * * @param hashName hash 表的名字 * @param filedName key 值*@return */ void hdelete(String hashName, String filedName); /** * 批量保存 * * @param* @param* @param key * @param value * @param score * @param expireTime * @return */ Long zsetBatch(final String key, final Settuples, final long expireTime); /** * zset add 操作 * * @param key * @param value * @param score * @param expireTime 如果该zet过期时间,则设置这个过期时间 * @return */ Boolean zset(String key, final Serializable value, double score, long expireTime); /** * 会有默认值的设置有效期 * * @param key * @param value * @param score * @return */ Boolean zset(String key, final Serializable value, double score); /** * 不改变设置有效期的zset插入 * * @param key * @param value * @param score * @return */ Boolean zsetNoExpire(String key, final Serializable value, double score); /** * zset add 操作 * * @param key * @param value * @param score * @param expireTime 如果该key不存在/zet无过期时间,则设置这个过期时间 * @return */ Boolean zset(String key, final Object value, double score, long expireTime); /** * zset add 操作 * * @param key * @param value * @param score * @return */ Boolean zset(String key, final Object value, double score); /** * zset get 操作 * * @param key * @param value * @param score * @return */Setzget(String key, final Classclazz); /** * zset顺序取数据 * * @param key * @param startIndex * @param endIndex * @param clazz * @return */Setzrange(final String key, final Integer startIndex, final Integer endIndex, final Classclazz); /** * zset集合总数 * * @param key * @param startIndex * @param endIndex * @param clazz * @return */ public Long zcount(final String key); /** * 删除KEY * * @param key * @return */ Long delKey(final String key); /** * set add 操作 * * @param key * @param value * @param expireTime * @return */ Boolean set(String key, final Object value, long expireTime); /** * set remove 操作 * * @param key * @param value * @return */ Boolean sRem(String key, final Object value); /** * 获得set所有元素 * * @param key * @param clazz * @return */SetsMembers(String key, final Classclazz); /** * 增加value大小的值 * * @param key * @param value * @return */ Long incrBy(final String key, final Long value); /** * 分布式锁 * 缓存减压使用 * * @param key * @param value * @param expireTime * @return */ Boolean setnx(final String key, final Long value, final Long expireTime); /**	* 检查set中是否包含这个值	* @param key	* @param value	* @return	*/	Boolean sIsMember(String key, final Object value); }
然后定义redis的实现类
import java.io.Serializable; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.annotation.Resource; import org.springframework.dao.DataAccessException; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.RedisZSetCommands.Tuple; import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.parser.Feature; import com.alibaba.fastjson.serializer.JSONSerializer; import com.alibaba.fastjson.serializer.SerializeWriter; import com.ttpai.api.cache.CacheService; @Service public class RedisCacheServiceImpl implements CacheService { private static final String pattern = "\\{[^}]*\\}"; private static final long oneDayExexpire = 22 * 60 * 60L;// 默认22小时有效期 private static final String DEFAULT_CHARSET = "utf-8"; @Resource private RedisTemplateredisTemplate; protected Feature T; @Override public String generateCacheKey(String namespace, Object... keys) { checkRedisKeyParamCount(namespace, keys); // 创建 Pattern 对象 Pattern r = Pattern.compile(pattern); // 现在创建 matcher 对象 Matcher m = r.matcher(namespace); int count = 0; String replaceName = null; while (m.find()) { replaceName = m.replaceFirst(keys[count].toString()); m = r.matcher(replaceName); count++; } int argsLength = keys.length; if (count != argsLength) { throw new IllegalArgumentException("字符串占位符个数和传入的参数数量不相等"); } return replaceName; } @Override public void putIntoCache(final String key, final Object value, final long expireTime) { redisTemplate.execute(new RedisCallback() { @Override public Object doInRedis(RedisConnection connection) throws DataAccessException { SerializeWriter out = new SerializeWriter(); JSONSerializer serializer = new JSONSerializer(out); serializer.write(value); connection.set(key.getBytes(Charset.forName(DEFAULT_CHARSET)), out.toBytes(DEFAULT_CHARSET)); if(expireTime > -1) { connection.expire(key.getBytes(Charset.forName(DEFAULT_CHARSET)), expireTime); } return true; } }); } @Override public void putIntoCache(final String key, final Object value) { putIntoCache(key, value, Constants.REDIS_DEFAULT_CACHE_TIME); } @Override public void clearCache(final String key) { redisTemplate.execute(new RedisCallback() { @Override public Object doInRedis(RedisConnection connection) throws DataAccessException { connection.del(key.getBytes(Charset.forName(DEFAULT_CHARSET))); return true; } }); } @Override publicT getFromCache(final String key, final Classclazz) { return redisTemplate.execute(new RedisCallback() { @Override public T doInRedis(RedisConnection connection) throws DataAccessException { byte[] out = connection.get(key.getBytes(Charset.forName(DEFAULT_CHARSET))); if (out == null) { return null; } return JSONObject.parseObject(out, clazz); } }); } @Override public String getStringFromCache(final String key){ return redisTemplate.execute((RedisCallback) connection -> { byte[] out=connection.get(key.getBytes(Charset.forName(DEFAULT_CHARSET))); if(out==null){ return null; } return new String(out); }); } @Override publicT getMapFromCache(final String key, final Classclazz) { return redisTemplate.execute(new RedisCallback() { @Override public T doInRedis(RedisConnection connection) throws DataAccessException { byte[] out = connection.get(key.getBytes(Charset.forName(DEFAULT_CHARSET))); if (out == null) { return null; } String resultStr = new String(out, Charset.forName(DEFAULT_CHARSET)); resultStr = resultStr.substring(1, resultStr.length()); resultStr = resultStr.substring(0, resultStr.length() - 1); return JSONObject.parseObject(resultStr.replace("\\", ""), clazz); } }); } @SuppressWarnings("all") @Override publicT getObjectFromCache(final String key, final Classclazz) { return redisTemplate.execute(new RedisCallback() { @Override public T doInRedis(RedisConnection connection) throws DataAccessException { byte[] out = connection.get(key.getBytes(Charset.forName(DEFAULT_CHARSET))); if (out == null) { return null; } String resultStr = new String(out, Charset.forName(DEFAULT_CHARSET)); resultStr = resultStr.substring(1, resultStr.length()); resultStr = resultStr.substring(0, resultStr.length() - 1); resultStr.replace("\\", ""); return JSONObject.parseObject(resultStr.replace("\\", ""), clazz); } }); } // public static void main(String[] args) throws ClassNotFoundException { // String str = // "{\"别克\":[],\"大众\":[],\"奥迪\":[],\"宝马\":[],\"日产\":[],\"本田\":[{\"carAge\":5,\"rate\":18}],\"比亚迪\":[],\"现代\":[],\"雪佛兰\":[]}"; // Class clazz = Class.forName("java.util.Map"); // Map map = JSONObject.parseObject(str, clazz); // System.out.println(); // } @Override publicListgetListFromCache(final Listkeys, final Classclazz) { return redisTemplate.execute(new RedisCallback