
com.jeesuite.cache.command.RedisBatchCommand Maven / Gradle / Ivy
/**
*
*/
package com.jeesuite.cache.command;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.jeesuite.cache.redis.JedisProviderFactory;
import com.jeesuite.common.serializer.SerializeUtils;
import redis.clients.util.SafeEncoder;
/**
* @description
* @author vakin
* @date 2015年12月9日
*/
public class RedisBatchCommand {
protected static final Logger logger = LoggerFactory.getLogger(RedisBatchCommand.class);
protected static final String RESP_OK = "OK";
/**
* 指定组批量写入字符串
* @param groupName 缓存组
* @param keyValueMap
* @return
*/
public static boolean setStringsWithGroup(String groupName,Map keyValueMap){
if(keyValueMap == null || keyValueMap.isEmpty())return false;
String[] keysValues = new String[keyValueMap.size() * 2];
int index = 0;
for (String key : keyValueMap.keySet()) {
if(keyValueMap.get(key) == null)continue;
keysValues[index++] = key;
keysValues[index++] = keyValueMap.get(key).toString();
}
try {
if(JedisProviderFactory.isCluster(groupName)){
return JedisProviderFactory.getMultiKeyJedisClusterCommands(groupName).mset(keysValues).equals(RESP_OK);
}else{
return JedisProviderFactory.getMultiKeyCommands(groupName).mset(keysValues).equals(RESP_OK);
}
} finally {
JedisProviderFactory.getJedisProvider(groupName).release();
}
}
/**
* 默认组批量写入字符串
* @param groupName 缓存组
* @param keyValueMap
* @return
*/
public static boolean setStrings(Map keyValueMap){
return setStringsWithGroup(null, keyValueMap);
}
/**
* 指定组批量写入对象
* @param groupName 缓存组
* @param keyValueMap
* @return
*/
public static boolean setObjectsWithGroup(String groupName,Map keyValueMap){
if(keyValueMap == null || keyValueMap.isEmpty())return false;
byte[][] keysValues = new byte[keyValueMap.size() * 2][];
int index = 0;
for (String key : keyValueMap.keySet()) {
if(keyValueMap.get(key) == null)continue;
keysValues[index++] = SafeEncoder.encode(key);
keysValues[index++] = SerializeUtils.serialize(keyValueMap.get(key));
}
try {
if(JedisProviderFactory.isCluster(groupName)){
return JedisProviderFactory.getMultiKeyBinaryJedisClusterCommands(groupName).mset(keysValues).equals(RESP_OK);
}else{
return JedisProviderFactory.getMultiKeyBinaryCommands(groupName).mset(keysValues).equals(RESP_OK);
}
} finally {
JedisProviderFactory.getJedisProvider(groupName).release();
}
}
/**
* 默认组批量写入对象
* @param groupName 缓存组
* @param keyValueMap
* @return
*/
public static boolean setObjects(Map keyValueMap){
return setObjectsWithGroup(null, keyValueMap);
}
/**
* 按key批量从redis获取值(指定缓存组名)
* @param groupName
* @param keys
* @return list
*/
public static List getStringsWithGroup(String groupName,String...keys){
try {
if(JedisProviderFactory.isCluster(groupName)){
return JedisProviderFactory.getMultiKeyJedisClusterCommands(groupName).mget(keys);
}else{
return JedisProviderFactory.getMultiKeyCommands(groupName).mget(keys);
}
} finally {
JedisProviderFactory.getJedisProvider(groupName).release();
}
}
public static List getStrings(String...keys){
return getStringsWithGroup(null, keys);
}
public static boolean removeStringsWithGroup(String groupName,String...keys){
try {
if(JedisProviderFactory.isCluster(groupName)){
return JedisProviderFactory.getMultiKeyJedisClusterCommands(groupName).del(keys) == 1;
}else{
return JedisProviderFactory.getMultiKeyCommands(groupName).del(keys) == 1;
}
} finally {
JedisProviderFactory.getJedisProvider(groupName).release();
}
}
public static boolean removeStrings(String...keys){
return removeStringsWithGroup(null, keys);
}
public static boolean removeObjectsWithGroup(String groupName,String...keys){
byte[][] byteKeys = SafeEncoder.encodeMany(keys);
try {
if(JedisProviderFactory.isCluster(groupName)){
return JedisProviderFactory.getMultiKeyBinaryJedisClusterCommands(groupName).del(byteKeys) == 1;
}else{
return JedisProviderFactory.getMultiKeyBinaryCommands(groupName).del(byteKeys) == 1;
}
} finally {
JedisProviderFactory.getJedisProvider(groupName).release();
}
}
public static boolean removeObjects(String...keys){
return removeObjectsWithGroup(null, keys);
}
public static List getObjectsWithGroup(String groupName, String... keys) {
byte[][] byteKeys = SafeEncoder.encodeMany(keys);
try {
if (JedisProviderFactory.isCluster(groupName)) {
List bytes = JedisProviderFactory.getMultiKeyBinaryJedisClusterCommands(groupName)
.mget(byteKeys);
return listDerialize(bytes);
} else {
List bytes = JedisProviderFactory.getMultiKeyBinaryCommands(groupName).mget(byteKeys);
return listDerialize(bytes);
}
} finally {
JedisProviderFactory.getJedisProvider(groupName).release();
}
}
public static List getObjects(String...keys){
return getObjectsWithGroup(null, keys);
}
public static void removeByKeyPrefix(String keyPrefix){
removeByKeyPrefix(null, keyPrefix);
}
public static void removeByKeyPrefix(String group,String keyPrefix){
try {
Set keys = JedisProviderFactory.getMultiKeyCommands(group).keys(keyPrefix +"*");
if(keys != null && keys.size() > 0){
RedisBatchCommand.removeObjectsWithGroup(group,keys.toArray(new String[0]));
}
} finally {
JedisProviderFactory.getJedisProvider(group).release();
}
}
private static T valueDerialize(byte[] bytes) {
if(bytes == null)return null;
try {
return (T)SerializeUtils.deserialize(bytes);
} catch (Exception e) {
return null;
}
}
private static List listDerialize(List datas){
List list = new ArrayList<>();
if(datas == null)return list;
for (byte[] bs : datas) {
list.add((T)valueDerialize(bs));
}
return list;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy