- 其实spring-data-redis中的RedisTemplate更强大全面,应公司要求,稍微简化
package com.ybdc.yy.base.basis.service.impl;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.geo.Circle;
import org.springframework.data.geo.Distance;
import org.springframework.data.geo.GeoResults;
import org.springframework.data.geo.Point;
import org.springframework.data.redis.connection.RedisGeoCommands.DistanceUnit;
import org.springframework.data.redis.connection.RedisGeoCommands.GeoLocation;
import org.springframework.data.redis.connection.RedisGeoCommands.GeoRadiusCommandArgs;
import org.springframework.data.redis.core.GeoOperations;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.ValueOperations;
/**
*
* @ClassName:RedisService
* @Description:redis操作Dao:依赖spring-data-redis1.8.3,jedis2.9.0
* @Author:chenchuanliang
* @Date:2017年5月18日下午1:03:03
* @version:1.0.0
*/
public class RedisService {
/**
* 日志记录
*/
private static final Logger logger = LoggerFactory.getLogger(RedisService.class);
public RedisTemplate<String, String> redisTemplate;
public RedisTemplate<String, String> getRedisTemplate() {
return redisTemplate;
}
public void setRedisTemplate(RedisTemplate<String, String> redisTemplate) {
this.redisTemplate = redisTemplate;
}
/**
* 前缀
*/
public static final String KEY_PREFIX_VALUE = "yb:value:";
public static final String KEY_PREFIX_SET = "yb:set:";
public static final String KEY_PREFIX_LIST = "yb:list:";
public static final String KEY_PREFIX_HASH = "yb:hash:";
public static final String KEY_PREFIX_GEO = "yb:geo:";
/**
*
* @MethodName:cacheValue
* @param k
* @param v
* @param time(单位秒) <=0 不过期
* @return
* @ReturnType:boolean
* @Description:缓存value操作
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:24:56
* @Modifier:
* @ModifyTime:
*/
public boolean cacheValue(String k, String v, long time) {
String key = KEY_PREFIX_VALUE + k;
try {
ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
valueOps.set(key, v);
if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS);
return true;
} catch (Throwable t) {
logger.error("缓存[" + key + "]失败, value[" + v + "]", t);
}
return false;
}
/**
*
* @MethodName:cacheValue
* @param k
* @param v
* @return
* @ReturnType:boolean
* @Description:缓存value操作
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:24:43
* @Modifier:
* @ModifyTime:
*/
public boolean cacheValue(String k, String v) {
return cacheValue(k, v, -1);
}
/**
*
* @MethodName:getValue
* @param k
* @return
* @ReturnType:String
* @Description:获取缓存
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:21:37
* @Modifier:
* @ModifyTime:
*/
public String getValue(String k) {
String key = KEY_PREFIX_VALUE + k;
try {
ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
return valueOps.get(key);
} catch (Throwable t) {
logger.error("获取缓存失败key[" + key + ", error[" + t + "]");
}
return null;
}
/**
*
* @MethodName:cacheSet
* @param k
* @param v
* @param time
* @return
* @ReturnType:boolean
* @Description:缓存set操作
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:20:00
* @Modifier:
* @ModifyTime:
*/
public boolean cacheSet(String k, String v, long time) {
String key = KEY_PREFIX_SET + k;
try {
SetOperations<String, String> valueOps = redisTemplate.opsForSet();
valueOps.add(key, v);
if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS);
} catch (Throwable t) {
logger.error("缓存[" + key + "]失败, value[" + v + "]", t);
}
return true;
}
/**
*
* @MethodName:cacheSet
* @param k
* @param v
* @return
* @ReturnType:boolean
* @Description:缓存set
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:19:00
* @Modifier:
* @ModifyTime:
*/
public boolean cacheSet(String k, String v) {
return cacheSet(k, v, -1);
}
/**
*
* @MethodName:cacheSet
* @param k
* @param v
* @param time
* @return
* @ReturnType:boolean
* @Description:缓存set
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:18:48
* @Modifier:
* @ModifyTime:
*/
public boolean cacheSet(String k, Set<String> v, long time) {
String key = KEY_PREFIX_SET + k;
try {
SetOperations<String, String> setOps = redisTemplate.opsForSet();
setOps.add(key, v.toArray(new String[v.size()]));
if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS);
return true;
} catch (Throwable t) {
logger.error("缓存[" + key + "]失败, value[" + v + "]", t);
}
return false;
}
/**
*
* @MethodName:cacheSet
* @param k
* @param v
* @return
* @ReturnType:boolean
* @Description:缓存set
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:18:34
* @Modifier:
* @ModifyTime:
*/
public boolean cacheSet(String k, Set<String> v) {
return cacheSet(k, v, -1);
}
/**
*
* @MethodName:getSet
* @param k
* @return
* @ReturnType:Set<String>
* @Description:获取缓存set数据
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:17:45
* @Modifier:
* @ModifyTime:
*/
public Set<String> getSet(String k) {
String key = KEY_PREFIX_SET + k;
try {
SetOperations<String, String> setOps = redisTemplate.opsForSet();
return setOps.members(key);
} catch (Throwable t) {
logger.error("获取set缓存失败key[" + key + ", error[" + t + "]");
}
return null;
}
/**
*
* @MethodName:cacheList
* @param k
* @param v
* @param time
* @return
* @ReturnType:boolean
* @Description:list缓存
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:17:23
* @Modifier:
* @ModifyTime:
*/
public boolean cacheList(String k, String v, long time) {
String key = KEY_PREFIX_LIST + k;
try {
ListOperations<String, String> listOps = redisTemplate.opsForList();
listOps.rightPush(key, v);
if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS);
return true;
} catch (Throwable t) {
logger.error("缓存[" + key + "]失败, value[" + v + "]", t);
}
return false;
}
/**
*
* @MethodName:cacheList
* @param k
* @param v
* @return
* @ReturnType:boolean
* @Description:缓存list
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:17:10
* @Modifier:
* @ModifyTime:
*/
public boolean cacheList(String k, String v) {
return cacheList(k, v, -1);
}
/**
*
* @MethodName:cacheList
* @param k
* @param v
* @param time
* @return
* @ReturnType:boolean
* @Description:缓存list
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:15:47
* @Modifier:
* @ModifyTime:
*/
public boolean cacheList(String k, List<String> v, long time) {
String key = KEY_PREFIX_LIST + k;
try {
ListOperations<String, String> listOps = redisTemplate.opsForList();
listOps.rightPushAll(key, v);
if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS);
return true;
} catch (Throwable t) {
logger.error("缓存[" + key + "]失败, value[" + v + "]", t);
}
return false;
}
/**
*
* @MethodName:cacheList
* @param k
* @param v
* @return
* @ReturnType:boolean
* @Description:缓存list
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:15:05
* @Modifier:
* @ModifyTime:
*/
public boolean cacheList(String k, List<String> v) {
return cacheList(k, v, -1);
}
/**
*
* @MethodName:getList
* @param k
* @param start
* @param end
* @return
* @ReturnType:List<String>
* @Description:获取list缓存
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:14:45
* @Modifier:
* @ModifyTime:
*/
public List<String> getList(String k, long start, long end) {
String key = KEY_PREFIX_LIST + k;
try {
ListOperations<String, String> listOps = redisTemplate.opsForList();
return listOps.range(key, start, end);
} catch (Throwable t) {
logger.error("获取list缓存失败key[" + key + "]" + ", error[" + t + "]");
}
return null;
}
/**
*
* @MethodName:getListSize
* @param k
* @return
* @ReturnType:long
* @Description:获取总条数
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:13:39
* @Modifier:
* @ModifyTime:
*/
public long getListSize(String k) {
String key = KEY_PREFIX_LIST + k;
try {
ListOperations<String, String> listOps = redisTemplate.opsForList();
return listOps.size(key);
} catch (Throwable t) {
logger.error("获取list长度失败key[" + key + "], error[" + t + "]");
}
return 0;
}
/**
*
* @MethodName:removeOneOfList
* @param k
* @return
* @ReturnType:boolean
* @Description:移除list缓存
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:11:16
* @Modifier:
* @ModifyTime:
*/
public boolean removeOneOfList(String k) {
String key = KEY_PREFIX_LIST + k;
try {
ListOperations<String, String> listOps = redisTemplate.opsForList();
listOps.rightPop(key);
return true;
} catch (Throwable t) {
logger.error("移除list缓存失败key[" + key + ", error[" + t + "]");
}
return false;
}
/**
*
* @MethodName:cacheGeo
* @param key
* @param x
* @param y
* @param member
* @param time(单位秒) <=0 不过期
* @return
* @ReturnType:boolean
* @Description:缓存地理位置信息
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:30:23
* @Modifier:
* @ModifyTime:
*/
public boolean cacheGeo(String k, double x, double y, String member, long time) {
String key = KEY_PREFIX_GEO + k;
try {
GeoOperations<String, String> geoOps = redisTemplate.opsForGeo();
geoOps.geoAdd(key, new Point(x, y) , member);
if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS);
} catch (Throwable t) {
logger.error("缓存[" + key +"]" + "失败, point["+ x + "," +
y + "], member[" + member + "]" +", error[" + t + "]");
}
return true;
}
/**
*
* @MethodName:cacheGeo
* @param key
* @param locations
* @param time(单位秒) <=0 不过期
* @return
* @ReturnType:boolean
* @Description:
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:31:33
* @Modifier:
* @ModifyTime:
*/
public boolean cacheGeo(String k, Iterable<GeoLocation<String>> locations, long time) {
try {
for (GeoLocation<String> location : locations) {
cacheGeo(k, location.getPoint().getX(), location.getPoint().getY(), location.getName(), time);
}
} catch (Throwable t) {
logger.error("缓存[" + KEY_PREFIX_GEO + k + "]" + "失败" +", error[" + t + "]");
}
return true;
}
/**
*
* @MethodName:removeGeo
* @param key
* @param members
* @return
* @ReturnType:boolean
* @Description:移除地理位置信息
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午10:53:01
* @Modifier:
* @ModifyTime:
*/
public boolean removeGeo(String k, String...members) {
String key = KEY_PREFIX_GEO + k;
try {
GeoOperations<String, String> geoOps = redisTemplate.opsForGeo();
geoOps.geoRemove(key, members);
} catch (Throwable t) {
logger.error("移除[" + key +"]" + "失败" +", error[" + t + "]");
}
return true;
}
/**
*
* @MethodName:distanceGeo
* @param key
* @param member1
* @param member2
* @return Distance
* @ReturnType:Distance
* @Description:根据两个成员计算两个成员之间距离
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午10:58:33
* @Modifier:
* @ModifyTime:
*/
public Distance distanceGeo(String k, String member1, String member2) {
String key = KEY_PREFIX_GEO + k;
try {
GeoOperations<String, String> geoOps = redisTemplate.opsForGeo();
return geoOps.geoDist(key, member1, member2);
} catch (Throwable t) {
logger.error("计算距离[" + key +"]" + "失败, member[" + member1 + "," + member2 +"], error[" + t + "]");
}
return null;
}
/**
*
* @MethodName:getGeo
* @param key
* @param members
* @return
* @ReturnType:List<Point>
* @Description:根据key和member获取这些member的坐标信息
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:02:01
* @Modifier:
* @ModifyTime:
*/
public List<Point> getGeo(String k, String...members) {
String key = KEY_PREFIX_GEO + k;
try {
GeoOperations<String, String> geoOps = redisTemplate.opsForGeo();
return geoOps.geoPos(key, members);
} catch (Throwable t) {
logger.error("获取坐标[" + key +"]" + "失败]" + ", error[" + t + "]");
}
return null;
}
/**
*
* @MethodName:radiusGeo
* @param key
* @param x
* @param y
* @param distance km
* @return
* @ReturnType:GeoResults<GeoLocation<String>>
* @Description:通过给定的坐标和距离(km)获取范围类其它的坐标信息
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:09:10
* @Modifier:
* @ModifyTime:
*/
public GeoResults<GeoLocation<String>> radiusGeo(String key, double x, double y, double distance, Direction direction, long limit) {
try {
String k = KEY_PREFIX_GEO + key;
GeoOperations<String, String> geoOps = redisTemplate.opsForGeo();
//设置geo查询参数
GeoRadiusCommandArgs geoRadiusArgs = GeoRadiusCommandArgs.newGeoRadiusArgs();
geoRadiusArgs = geoRadiusArgs.includeCoordinates().includeDistance();//查询返回结果包括距离和坐标
if (Direction.ASC.equals(direction)) {//按查询出的坐标距离中心坐标的距离进行排序
geoRadiusArgs.sortAscending();
} else if (Direction.DESC.equals(direction)) {
geoRadiusArgs.sortDescending();
}
geoRadiusArgs.limit(limit);//限制查询数量
GeoResults<GeoLocation<String>> radiusGeo = geoOps.geoRadius(k, new Circle(new Point(x, y), new Distance(distance, DistanceUnit.METERS)), geoRadiusArgs);
return radiusGeo;
} catch (Throwable t) {
logger.error("通过坐标[" + x + "," + y +"]获取范围[" + distance + "km的其它坐标失败]" + ", error[" + t + "]");
}
return null;
}
/**
*
* @MethodName:containsListKey
* @param k
* @return
* @ReturnType:boolean
* @Description:判断缓存是否存在
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:23:37
* @Modifier:
* @ModifyTime:
*/
public boolean containsValueKey(String k) {
return containsKey(KEY_PREFIX_VALUE + k);
}
/**
*
* @MethodName:containsListKey
* @param k
* @return
* @ReturnType:boolean
* @Description:判断缓存是否存在
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:23:37
* @Modifier:
* @ModifyTime:
*/
public boolean containsSetKey(String k) {
return containsKey(KEY_PREFIX_SET + k);
}
/**
*
* @MethodName:containsListKey
* @param k
* @return
* @ReturnType:boolean
* @Description:判断缓存是否存在
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:23:37
* @Modifier:
* @ModifyTime:
*/
public boolean containsListKey(String k) {
return containsKey(KEY_PREFIX_LIST + k);
}
/**
*
* @MethodName:containsGeoKey
* @param k
* @return
* @ReturnType:boolean
* @Description:判断缓存是否存在
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:34:14
* @Modifier:
* @ModifyTime:
*/
public boolean containsGeoKey(String k) {
return containsKey(KEY_PREFIX_GEO + k);
}
private boolean containsKey(String key) {
try {
return redisTemplate.hasKey(key);
} catch (Throwable t) {
logger.error("判断缓存存在失败key[" + key + ", error[" + t + "]");
}
return false;
}
/**
*
* @MethodName:remove
* @param key
* @return
* @ReturnType:boolean
* @Description:移除key中所有缓存
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:20:19
* @Modifier:
* @ModifyTime:
*/
public boolean removeValue(String k) {
return remove(KEY_PREFIX_VALUE + k);
}
/**
*
* @MethodName:remove
* @param key
* @return
* @ReturnType:boolean
* @Description:移除key中所有缓存
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:20:19
* @Modifier:
* @ModifyTime:
*/
public boolean removeSet(String k) {
return remove(KEY_PREFIX_SET + k);
}
/**
*
* @MethodName:remove
* @param key
* @return
* @ReturnType:boolean
* @Description:移除key中所有缓存
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:20:19
* @Modifier:
* @ModifyTime:
*/
public boolean removeList(String k) {
return remove(KEY_PREFIX_LIST + k);
}
/**
*
* @MethodName:removeGeo
* @param k
* @return
* @ReturnType:boolean
* @Description:移除key中所有缓存
* @Creator:chenchuanliang
* @CreateTime:2017年5月18日上午11:36:23
* @Modifier:
* @ModifyTime:
*/
public boolean removeGeo(String k) {
return remove(KEY_PREFIX_GEO + k);
}
private boolean remove(String key) {
try {
redisTemplate.delete(key);
return true;
} catch (Throwable t) {
logger.error("移除缓存失败key[" + key + ", error[" + t + "]");
}
return false;
}
/**
* 缓存一个hash键值对到hash表
* @MethodName:cacheHash
* @param key
* @param hashKey
* @param value
* @param time
* @return
* @ReturnType:boolean
* @Description:
* @Creator:chenchuanliang
* @CreateTime:2017年6月27日上午10:43:25
* @Modifier:
* @ModifyTime:
*/
public boolean cacheHash(String key, String hashKey, String value, long time){
try {
key = KEY_PREFIX_HASH + key;
HashOperations<String, String, String> opsForHash = redisTemplate.opsForHash();
opsForHash.put(key, hashKey, value);
if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS);
return true;
} catch (Exception e) {
logger.error("缓存失败key[" + key + ", error[" + e + "]");
}
return false;
}
/**
* 缓存一个map到hash表
* @MethodName:cacheHash
* @param key
* @param map
* @param time
* @return
* @ReturnType:boolean
* @Description:
* @Creator:chenchuanliang
* @CreateTime:2017年6月27日上午10:45:27
* @Modifier:
* @ModifyTime:
*/
public boolean cacheHash(String key, Map<String, String> map, long time){
try {
key = KEY_PREFIX_HASH + key;
HashOperations<String, String, String> opsForHash = redisTemplate.opsForHash();
opsForHash.putAll(key, map);
if (time > 0) redisTemplate.expire(key, time, TimeUnit.SECONDS);
return true;
} catch (Exception e) {
logger.error("缓存失败key[" + key + ", error[" + e + "]");
}
return false;
}
/**
* 通过key获取一个map
* @MethodName:getHash
* @param key
* @return
* @ReturnType:Map<String,String>
* @Description:
* @Creator:chenchuanliang
* @CreateTime:2017年6月27日上午10:48:21
* @Modifier:
* @ModifyTime:
*/
public Map<String, String> getHash(String key){
try {
key = KEY_PREFIX_HASH + key;
HashOperations<String, String, String> opsForHash = redisTemplate.opsForHash();
return opsForHash.entries(key);
} catch (Exception e) {
logger.error("获取缓存失败key[" + key + ", error[" + e + "]");
}
return null;
}
/**
* 获取key对应map中所有的keys
* @MethodName:getHashKey
* @param key
* @return
* @ReturnType:Set<String>
* @Description:
* @Creator:chenchuanliang
* @CreateTime:2017年6月27日上午10:49:16
* @Modifier:
* @ModifyTime:
*/
public Set<String> getHashKey(String key){
try {
key = KEY_PREFIX_HASH + key;
HashOperations<String, String, String> opsForHash = redisTemplate.opsForHash();
return opsForHash.keys(key);
} catch (Exception e) {
logger.error("获取缓存失败key[" + key + ", error[" + e + "]");
}
return null;
}
/**
* 获取key对应map中所有的values
* @MethodName:getHashValues
* @param key
* @return
* @ReturnType:List<String>
* @Description:
* @Creator:chenchuanliang
* @CreateTime:2017年6月27日上午10:49:55
* @Modifier:
* @ModifyTime:
*/
public List<String> getHashValues(String key){
try {
key = KEY_PREFIX_HASH + key;
HashOperations<String, String, String> opsForHash = redisTemplate.opsForHash();
return opsForHash.values(key);
} catch (Exception e) {
logger.error("获取缓存失败key[" + key + ", error[" + e + "]");
}
return null;
}
/**
* 删除key对应hashMap中key的值.或删除整个key对应map
* @MethodName:delete
* @param key
* @param hashKeys
* @return
* @ReturnType:List<String>
* @Description:
* @Creator:chenchuanliang
* @CreateTime:2017年6月27日上午10:51:22
* @Modifier:
* @ModifyTime:
*/
public boolean deleteHash(String key, String... hashKeys){
try {
key = KEY_PREFIX_HASH + key;
if (hashKeys == null || hashKeys.length == 0) {
redisTemplate.delete(key);
} else {
HashOperations<String, String, String> opsForHash = redisTemplate.opsForHash();
opsForHash.delete(key, hashKeys);
}
return true;
} catch (Exception e) {
logger.error("获取缓存失败key[" + key + ", error[" + e + "]");
}
return false;
}
/**
* 获取key对应的过期时间, 秒
* @MethodName:getExpireTime
* @param key
* @return
* @ReturnType:Long
* @Description:
* @Creator:yangbiao
* @CreateTime:2017年7月10日上午9:51:22
* @Modifier:
* @ModifyTime:
*/
public Long getExpireTimeValue(String key){
key = KEY_PREFIX_VALUE + key;
Long expire = -2L;
try {
expire = redisTemplate.getExpire(key);
}catch (Exception e){
logger.error("获取缓存剩余时间失败key[" + key + ", error[" + e + "]");
}
return expire;
}
}
分享到:
相关推荐
赠送jar包:spring-session-data-redis-2.0.4.RELEASE.jar; 赠送原API文档:spring-session-data-redis-2.0.4.RELEASE-javadoc.jar; 赠送源代码:spring-session-data-redis-2.0.4.RELEASE-sources.jar; 赠送...
赠送jar包:spring-session-data-redis-2.0.4.RELEASE.jar; 赠送原API文档:spring-session-data-redis-2.0.4.RELEASE-javadoc.jar; 赠送源代码:spring-session-data-redis-2.0.4.RELEASE-sources.jar; 赠送...
赠送jar包:spring-data-redis-2.6.1.jar; 赠送原API文档:spring-data-redis-2.6.1-javadoc.jar; 赠送源代码:spring-data-redis-2.6.1-sources.jar; 赠送Maven依赖信息文件:spring-data-redis-2.6.1.pom; ...
赠送jar包:spring-data-redis-2.3.9.RELEASE.jar; 赠送原API文档:spring-data-redis-2.3.9.RELEASE-javadoc.jar; 赠送源代码:spring-data-redis-2.3.9.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-...
赠送jar包:spring-data-redis-2.0.9.RELEASE.jar; 赠送原API文档:spring-data-redis-2.0.9.RELEASE-javadoc.jar; 赠送源代码:spring-data-redis-2.0.9.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-...
赠送jar包:spring-data-redis-2.5.5.jar; 赠送原API文档:spring-data-redis-2.5.5-javadoc.jar; 赠送源代码:spring-data-redis-2.5.5-sources.jar; 赠送Maven依赖信息文件:spring-data-redis-2.5.5.pom; ...
赠送jar包:spring-data-redis-2.5.5.jar; 赠送原API文档:spring-data-redis-2.5.5-javadoc.jar; 赠送源代码:spring-data-redis-2.5.5-sources.jar; 赠送Maven依赖信息文件:spring-data-redis-2.5.5.pom; ...
spring-data-redis-1.8.1.RELEASE-sources.jar(spring-data-redis-1.8.1.RELEASE-sources.jar()
赠送jar包:spring-data-redis-2.0.6.RELEASE.jar; 赠送原API文档:spring-data-redis-2.0.6.RELEASE-javadoc.jar; 赠送源代码:spring-data-redis-2.0.6.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-...
spring-data-redis-1.8.4.RELEASE.jar,spring-data-redis-1.8.4.RELEASE.jar
spring-data-redis-2.0.0.M1.jar
赠送jar包:spring-data-redis-1.7.5.RELEASE.jar 赠送原API文档:spring-data-redis-1.7.5.RELEASE-javadoc.jar 赠送源代码:spring-data-redis-1.7.5.RELEASE-sources.jar 包含翻译后的API文档:spring-data-...
赠送jar包:spring-data-redis-2.0.9.RELEASE.jar; 赠送原API文档:spring-data-redis-2.0.9.RELEASE-javadoc.jar; 赠送源代码:spring-data-redis-2.0.9.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-...
commons-pool2-2.3.jar,jedis-2.8.0.jar,spring-data-redis-1.6.0.RELEASE.jar,spring-session-1.1.1.RELEASE.jar,Spring-data-redis(Version 1.6.0.RC1)中文版.pdf
spring-data-redis-2.2.0.RELEASE
spring-data-redis-1.4.1.RELEASE
赠送jar包:spring-data-redis-2.6.1.jar; 赠送原API文档:spring-data-redis-2.6.1-javadoc.jar; 赠送源代码:spring-data-redis-2.6.1-sources.jar; 赠送Maven依赖信息文件:spring-data-redis-2.6.1.pom; ...
spring-data-redis-1.6.2.RELEASE.jar,官网文档,免费提供,亲测可用
Spring Data Redis是Spring框架下的一个模块,专注于提供对Redis数据存储系统的高效支持。Redis是一个高性能的键值数据库,它以其丰富的数据结构、高效的性能以及广泛的应用场景深受开发者喜爱。Spring Data Redis...
赠送jar包:spring-data-redis-1.7.5.RELEASE.jar; 赠送原API文档:spring-data-redis-1.7.5.RELEASE-javadoc.jar; 赠送源代码:spring-data-redis-1.7.5.RELEASE-sources.jar; 包含翻译后的API文档:spring-...