Spring BootとRedis Cluster RedisTemplateの組み合わせ
pom依存
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-redisartifactId>
dependency>
yml構成
spring:
redis:
cluster:
# Redis
nodes: 192.168.117.135:6379,192.168.117.135:6380,192.168.117.136:7379,192.168.117.136:7380,192.168.117.137:8379,192.168.117.137:8380
#
command-timeout: 15000
#
max-attempts: 5
#
max-redirects: 3
# ( )
max-active: 16
# ( )
max-wait: -1
#
max-idle: 8
#
min-idle: 0
# , ,
test-on-borrow: true
クラスの構成
RedisProperties.java
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @Author:
* @Description:Redis
* @CreateDate:13:48 2018/7/4
*/
@Component
@ConfigurationProperties(prefix = "spring.redis.cluster")
@Data
public class RedisProperties {
private String nodes;
private Integer commandTimeout;
private Integer maxAttempts;
private Integer maxRedirects;
private Integer maxActive;
private Integer maxWait;
private Integer maxIdle;
private Integer minIdle;
private boolean testOnBorrow;
}
RedisConfig.java
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisNode;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* @Author:
* @Description:Redis
* @CreateDate:13:48 2018/7/4
*/
@Configuration
@ConditionalOnClass(JedisCluster.class)
public class RedisConfig {
@Resource
private RedisProperties redisProperties;
/**
* Redis
*/
@Bean
public JedisPoolConfig getJedisPoolConfig() {
JedisPoolConfig jedisPoolConfig =new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(redisProperties.getMaxIdle());
jedisPoolConfig.setMaxWaitMillis(redisProperties.getMaxWait());
jedisPoolConfig.setTestOnBorrow(redisProperties.isTestOnBorrow());
return jedisPoolConfig;
}
/**
* Redis Cluster
*/
@Bean
public RedisClusterConfiguration getJedisCluster() {
RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration();
redisClusterConfiguration.setMaxRedirects(redisProperties.getMaxRedirects());
List nodeList = new ArrayList<>();
String[] cNodes = redisProperties.getNodes().split(",");
//
for(String node : cNodes) {
String[] hp = node.split(":");
nodeList.add(new RedisNode(hp[0], Integer.parseInt(hp[1])));
}
redisClusterConfiguration.setClusterNodes(nodeList);
return redisClusterConfiguration;
}
/**
* Redis
*/
@Bean
public JedisConnectionFactory getJedisConnectionFactory(RedisClusterConfiguration redisClusterConfiguration, JedisPoolConfig jedisPoolConfig) {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(redisClusterConfiguration, jedisPoolConfig);
return jedisConnectionFactory;
}
/**
* redis
* redisTemplate jdkSerializeable
* , key ,
*/
@Bean
public RedisTemplate
RedisTemplateのパッケージ
インタフェースBaseRedisDaoInter
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.ZSetOperations;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
/**
* @Author:
* @Description: Redis Dao
* @CreateDate:14:56 2018/3/8
*/
public interface BaseRedisDaoInter {
/**
* Redis key
*
* @return
*/
Set getAllKeys();
/**
* key-value
* @return
*/
Map getAllString();
/**
* Set -key-value
* @return
*/
Map> getAllSet();
/**
* List -key-value
* @return
*/
Map> getAllList();
/**
* Map -key-value
* @return
*/
Map> getAllMap();
/**
* list
*
* @param key
* @param objectList
*/
void addList(K key, List objectList);
/**
* list
*
* @param key
* @param obj
* @return list
*/
long addList(K key, V obj);
/**
* list
*
* @param key
* @param obj
* @return list
*/
long addList(K key, V... obj);
/**
* list
*
* @param key List key
* @param s
* @param e
* @return
*/
List getList(K key, long s, long e);
/**
* list
*
* @param key
* @return
*/
List getList(K key);
/**
* list
*
* @param key
* @return
*/
long getListSize(K key);
/**
* list
* list count value object , ,
* count 0, list value object ,
* value object ,
*
* @param key
* @param object
* @return
*/
long removeListValue(K key, V object);
/**
* list
*
* @param key
* @param object
* @return
*/
long removeListValue(K key, V... object);
/**
* key value
*
* @param keys
*/
void remove(final K... keys);
/**
*
* key
*
* @param key
*/
void remove(final K key);
/**
* Set
*
* @param key
* @param time
* @return
*/
Boolean setSetExpireTime(String key, Long time);
/**
* ZSet -key-value
*
* @return Map
*/
Map> getAllZSetReverseRange();
/**
* ZSet -key-value
*
* @return Map
*/
Map> getAllZSetRange();
/**
* ZSet
*
* @param key
* @param s
* @param e
*/
void removeZSetRangeByScore(String key, double s, double e);
/**
* ZSet
*
* @param key
* @param time - s
* @return
*/
Boolean setZSetExpireTime(String key, Long time);
/**
* key value
*
* @param key
* @return
*/
boolean exists(final K key);
/**
* String
*
* @param key
* @return
*/
V get(final K key);
/**
* String
*
* @param key
* @return
*/
List get(final K... key);
/**
*
*
* @param regKey
* @return
*/
List getByRegular(final K regKey);
/**
*
*
* @param key
* @param value
*/
void set(final K key, V value);
/**
*
*
* @param key
* @param value
* @param expireTime - s
*/
void set(final K key, V value, Long expireTime);
/**
* key ( : )
*
* @param key
* @param expireTime - s
* @return
*/
boolean setExpireTime(K key, Long expireTime);
/**
* key
*
* @param key
* @return
*/
DataType getType(K key);
/**
* Map
*
* @param key Map key
* @param field Map key
*/
void removeMapField(K key, V... field);
/**
* Map
*
* @param key Map key
* @return Map
*/
Map getMap(K key);
/**
* Map
*
* @param key Map key
* @return Map
*/
Long getMapSize(K key);
/**
* Map
*
* @param key Map key
* @param field Map key
* @return Map Value
*/
T getMapField(K key, K field);
/**
* Map key key
*
* @param key Map key
* @param field Map key
* @return
*/
Boolean hasMapKey(K key, K field);
/**
* Map key value
*
* @param key Map key
* @return Map
*/
List getMapFieldValue(K key);
/**
* Map key
*
* @param key Map key
* @return Map key
*/
Set getMapFieldKey(K key);
/**
* Map
*
* @param key
* @param map
*/
void addMap(K key, Map map);
/**
* key Map
*
* @param key cache key
* @param field Map key
* @param value
*/
void addMap(K key, K field, Object value);
/**
* key Map ,
*
* @param key cache key
* @param field Map key
* @param time - Map
* @param value
*/
void addMap(K key, K field, V value, long time);
/**
* Set
*
* @param key key
* @param obj
*/
void addSet(K key, V... obj);
/**
* Set
*
* @param key key
* @param obj
*/
long removeSetValue(K key, V obj);
/**
* Set
*
* @param key key
* @param obj
*/
long removeSetValue(K key, V... obj);
/**
* Set
*
* @param key key
*/
long getSetSize(K key);
/**
* Set
*
* @param key key
*/
Boolean hasSetValue(K key, V obj);
/**
* Set
*
* @param key key
*/
Set getSet(K key);
/**
* Set
*
* @param key
* @param otherKey
* @return Set
*/
Set getSetUnion(K key, K otherKey);
/**
* Set
*
* @param key
* @param set Set
* @return Set Set
*/
Set getSetUnion(K key, Set set);
/**
* Set
*
* @param key
* @param otherKey
* @return Set
*/
Set getSetIntersect(K key, K otherKey);
/**
* Set
*
* @param key
* @param set Set
* @return Set Set
*/
Set getSetIntersect(K key, Set set);
/**
* *
*
* @param blear
*/
void removeBlear(K blear);
/**
* *
*
* @param blears
*/
void removeBlear(K... blears);
/**
* key key false
*
* @param oldKey key
* @param newKey key
* @return
*/
Boolean renameIfAbsent(String oldKey, String newKey);
/**
* key-value
*
* @param blears
*/
void removeByRegular(String blears);
/**
* key-value
*
* @param blears
*/
void removeByRegular(String... blears);
/**
* Map key-value
*
* @param key
* @param blear
*/
void removeMapFieldByRegular(K key, K blear);
/**
* Map key-value
*
* @param key
* @param blears
*/
void removeMapFieldByRegular(K key, K... blears);
/**
* key value
*
* @param key
* @param value
* @return
*/
Long removeZSetValue(K key, V... value);
/**
* key ZSet
*
* @param key
*/
void removeZSet(K key);
/**
* , K , start<=index<=end
*
* @param key
* @param start
* @param end
*/
void removeZSetRange(K key, Long start, Long end);
/**
* key key1 key2
* ,
* key2
*
* @param key
* @param key1 1
* @param key2 2
*/
void setZSetUnionAndStore(String key, String key1, String key2);
/**
* ZSET,
*
* @param key
* @return
*/
T getZSetRange(K key);
/**
* ZSET
* K , start<=index<=end ,
*
* @param key
* @param start
* @param end
* @return
*/
T getZSetRange(K key, long start, long end);
/**
* ZSET,
*
* @param key
* @return
*/
Set getZSetReverseRange(K key);
/**
* ZSET
* K , start<=index<=end ,
*
* @param key
* @param start
* @param end
* @return
*/
Set getZSetReverseRange(K key, long start, long end);
/**
* ( ) ZSET -
*
* @param key
* @param start
* @param end
* @return
*/
Set getZSetRangeByScore(String key, double start, double end);
/**
* ( ) ZSET -
*
* @param key
* @param start
* @param end
* @return
*/
Set getZSetReverseRangeByScore(String key, double start, double end);
/**
* K , start<=index<=end
* ( score value),
*
* @param key
* @param start
* @param end
* @return
*/
Set> getZSetRangeWithScores(K key, long start, long end);
/**
* K , start<=index<=end
* ( score value),
*
* @param key
* @param start
* @param end
* @return
*/
Set> getZSetReverseRangeWithScores(K key, long start, long end);
/**
* K
* ( score value),
*
* @param key
* @return
*/
Set> getZSetRangeWithScores(K key);
/**
* K
* ( score value),
*
* @param key
* @return
*/
Set> getZSetReverseRangeWithScores(K key);
/**
* K ,sMin<=score<=sMax
*
* @param key
* @param sMin
* @param sMax
* @return
*/
long getZSetCountSize(K key, double sMin, double sMax);
/**
* Zset K
*
* @param key
* @return
*/
long getZSetSize(K key);
/**
* K ,value obj
*
* @param key
* @param value
* @return
*/
double getZSetScore(K key, V value);
/**
* ,delta
*
* @param key
* @param value
* @param delta
* @return
*/
double incrementZSetScore(K key, V value, double delta);
/**
* ZSET
* score , K(1)==V(n),V(1)=S(1)
*
* @param key
* @param score
* @param value
* @return
*/
Boolean addZSet(String key, double score, Object value);
/**
* ZSET
*
* @param key
* @param value
* @return
*/
Long addZSet(K key, TreeSet value);
/**
* ZSET
*
* @param key
* @param score
* @param value
* @return
*/
Boolean addZSet(K key, double[] score, Object[] value);
}
BaseRedisDaoの実装
import com.lynchj.rediscluster.dao.BaseRedisDaoInter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Repository;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;
/**
* @Author:
* @Description: Redis Dao
* - -
* @CreateDate:14:56 2018/3/8
*/
@Repository
@Slf4j
public class BaseRedisDao implements BaseRedisDaoInter {
@Resource(name = "redisTemplate")
private RedisTemplate redisTemplate;
/** , */
private static final Integer TIMES = 3;
@Override
public Set getAllKeys() {
return redisTemplate.keys("*");
}
@Override
public Map getAllString() {
Set stringSet = getAllKeys();
Map map = new HashMap();
Iterator iterator = stringSet.iterator();
while (iterator.hasNext()) {
String k = iterator.next();
if (getType(k) == DataType.STRING) {
map.put(k, get(k));
}
}
return map;
}
@Override
public Map> getAllSet() {
Set stringSet = getAllKeys();
Map> map = new HashMap>();
Iterator iterator = stringSet.iterator();
while (iterator.hasNext()) {
String k = iterator.next();
if (getType(k) == DataType.SET) {
map.put(k, getSet(k));
}
}
return map;
}
@Override
public Map> getAllZSetRange() {
Set stringSet = getAllKeys();
Map> map = new HashMap>();
Iterator iterator = stringSet.iterator();
while (iterator.hasNext()) {
String k = iterator.next();
if (getType(k) == DataType.ZSET) {
log.debug("k:" + k);
map.put(k, getZSetRange(k));
}
}
return map;
}
@Override
public Map> getAllZSetReverseRange() {
Set stringSet = getAllKeys();
Map> map = new HashMap>();
Iterator iterator = stringSet.iterator();
while (iterator.hasNext()) {
String k = iterator.next();
if (getType(k) == DataType.ZSET) {
map.put(k, getZSetReverseRange(k));
}
}
return map;
}
@Override
public Map> getAllList() {
Set stringSet = getAllKeys();
Map> map = new HashMap>();
Iterator iterator = stringSet.iterator();
while (iterator.hasNext()) {
String k = iterator.next();
if (getType(k) == DataType.LIST) {
map.put(k, getList(k));
}
}
return map;
}
@Override
public Map> getAllMap() {
Set stringSet = getAllKeys();
Map> map = new HashMap>();
Iterator iterator = stringSet.iterator();
while (iterator.hasNext()) {
String k = iterator.next();
if (getType(k) == DataType.HASH) {
map.put(k, getMap(k));
}
}
return map;
}
@Override
public void addList(String key, List objectList) {
for (Object obj : objectList) {
addList(key, obj);
}
}
@Override
public long addList(String key, Object obj) {
return redisTemplate.boundListOps(key).rightPush(obj);
}
@Override
public long addList(String key, Object... obj) {
return redisTemplate.boundListOps(key).rightPushAll(obj);
}
@Override
public List getList(String key, long s, long e) {
return redisTemplate.boundListOps(key).range(s, e);
}
@Override
public List getList(String key) {
return redisTemplate.boundListOps(key).range(0, getListSize(key));
}
@Override
public long getListSize(String key) {
return redisTemplate.boundListOps(key).size();
}
@Override
public long removeListValue(String key, Object object) {
return redisTemplate.boundListOps(key).remove(0, object);
}
@Override
public long removeListValue(String key, Object... objects) {
long r = 0;
for (Object object : objects) {
r += removeListValue(key, object);
}
return r;
}
@Override
public void remove(String... key) {
if (key != null && key.length > 0) {
if (key.length == 1) {
remove(key[0]);
} else {
redisTemplate.delete(CollectionUtils.arrayToList(key));
}
}
}
@Override
public void removeBlear(String... blears) {
for (String blear : blears) {
removeBlear(blear);
}
}
@Override
public Boolean renameIfAbsent(String oldKey, String newKey) {
return redisTemplate.renameIfAbsent(oldKey, newKey);
}
@Override
public void removeBlear(String blear) {
redisTemplate.delete(redisTemplate.keys(blear));
}
@Override
public void removeByRegular(String... blears) {
for (String blear : blears) {
removeBlear(blear);
}
}
@Override
public void removeByRegular(String blear) {
Set stringSet = getAllKeys();
for (String s : stringSet) {
if (Pattern.compile(blear).matcher(s).matches()) {
redisTemplate.delete(s);
}
}
}
@Override
public void removeMapFieldByRegular(String key, String... blears) {
for (String blear : blears) {
removeMapFieldByRegular(key, blear);
}
}
@Override
public void removeMapFieldByRegular(String key, String blear) {
Map map = getMap(key);
Set stringSet = map.keySet();
for (String s : stringSet) {
if (Pattern.compile(blear).matcher(s).matches()) {
redisTemplate.boundHashOps(key).delete(s);
}
}
}
@Override
public Long removeZSetValue(String key, Object... value) {
return redisTemplate.boundZSetOps(key).remove(value);
}
@Override
public void removeZSet(String key) {
removeZSetRange(key, 0L, getZSetSize(key));
}
@Override
public void removeZSetRange(String key, Long start, Long end) {
redisTemplate.boundZSetOps(key).removeRange(start, end);
}
@Override
public void setZSetUnionAndStore(String key, String key1, String key2) {
redisTemplate.boundZSetOps(key).unionAndStore(key1, key2);
}
@Override
public Set getZSetRange(String key) {
return getZSetRange(key, 0, getZSetSize(key));
}
@Override
public Set getZSetRange(String key, long s, long e) {
return redisTemplate.boundZSetOps(key).range(s, e);
}
@Override
public Set getZSetReverseRange(String key) {
return getZSetReverseRange(key, 0, getZSetSize(key));
}
@Override
public Set getZSetReverseRange(String key, long start, long end) {
return redisTemplate.boundZSetOps(key).reverseRange(start, end);
}
@Override
public Set getZSetRangeByScore(String key, double start, double end) {
return redisTemplate.boundZSetOps(key).rangeByScore(start, end);
}
@Override
public Set getZSetReverseRangeByScore(String key, double start, double end) {
return redisTemplate.boundZSetOps(key).reverseRangeByScore(start, end);
}
@Override
public Set> getZSetRangeWithScores(String key, long start, long end) {
return redisTemplate.boundZSetOps(key).rangeWithScores(start, end);
}
@Override
public Set> getZSetReverseRangeWithScores(String key, long start, long end) {
return redisTemplate.boundZSetOps(key).reverseRangeWithScores(start, end);
}
@Override
public Set> getZSetRangeWithScores(String key) {
return getZSetRangeWithScores(key, 0, getZSetSize(key));
}
@Override
public Set> getZSetReverseRangeWithScores(String key) {
return getZSetReverseRangeWithScores(key, 0, getZSetSize(key));
}
@Override
public long getZSetCountSize(String key, double sMin, double sMax) {
return redisTemplate.boundZSetOps(key).count(sMin, sMax);
}
@Override
public long getZSetSize(String key) {
return redisTemplate.boundZSetOps(key).size();
}
@Override
public double getZSetScore(String key, Object value) {
return redisTemplate.boundZSetOps(key).score(value);
}
@Override
public double incrementZSetScore(String key, Object value, double delta) {
return redisTemplate.boundZSetOps(key).incrementScore(value, delta);
}
@Override
public Boolean addZSet(String key, double score, Object value) {
return redisTemplate.boundZSetOps(key).add(value, score);
}
@Override
public Long addZSet(String key, TreeSet value) {
return redisTemplate.boundZSetOps(key).add(value);
}
@Override
public Boolean addZSet(String key, double[] score, Object[] value) {
if (score.length != value.length) {
return false;
}
for (int i = 0; i < score.length; i++) {
if (addZSet(key, score[i], value[i]) == false) {
return false;
}
}
return true;
}
@Override
public void remove(String key) {
if (exists(key)) {
redisTemplate.delete(key);
}
}
@Override
public void removeZSetRangeByScore(String key, double s, double e) {
redisTemplate.boundZSetOps(key).removeRangeByScore(s, e);
}
@Override
public Boolean setSetExpireTime(String key, Long time) {
return redisTemplate.boundSetOps(key).expire(time, TimeUnit.SECONDS);
}
@Override
public Boolean setZSetExpireTime(String key, Long time) {
return redisTemplate.boundZSetOps(key).expire(time, TimeUnit.SECONDS);
}
@Override
public boolean exists(String key) {
return redisTemplate.hasKey(key);
}
@Override
public Object get(String key) {
return redisTemplate.boundValueOps(key).get();
}
@Override
public List get(String... keys) {
List list = new ArrayList();
for (String key : keys) {
list.add(get(key));
}
return list;
}
@Override
public List getByRegular(String regKey) {
Set stringSet = getAllKeys();
List objectList = new ArrayList();
for (String s : stringSet) {
if (Pattern.compile(regKey).matcher(s).matches() && getType(s) == DataType.STRING) {
objectList.add(get(s));
}
}
return objectList;
}
@Override
public void set(String key, Object value) {
redisTemplate.boundValueOps(key).set(value);
}
@Override
public void set(String key, Object value, Long expireTime) {
redisTemplate.boundValueOps(key).set(value, expireTime, TimeUnit.SECONDS);
}
@Override
public boolean setExpireTime(String key, Long expireTime) {
return redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
}
@Override
public DataType getType(String key) {
return redisTemplate.type(key);
}
@Override
public void removeMapField(String key, Object... field) {
redisTemplate.boundHashOps(key).delete(field);
}
@Override
public Long getMapSize(String key) {
return redisTemplate.boundHashOps(key).size();
}
@Override
public Map getMap(String key) {
return redisTemplate.boundHashOps(key).entries();
}
@Override
public T getMapField(String key, String field) {
return (T) redisTemplate.boundHashOps(key).get(field);
}
@Override
public Boolean hasMapKey(String key, String field) {
return redisTemplate.boundHashOps(key).hasKey(field);
}
@Override
public List getMapFieldValue(String key) {
return redisTemplate.boundHashOps(key).values();
}
@Override
public Set getMapFieldKey(String key) {
return redisTemplate.boundHashOps(key).keys();
}
@Override
public void addMap(String key, Map map) {
redisTemplate.boundHashOps(key).putAll(map);
}
@Override
public void addMap(String key, String field, Object value) {
redisTemplate.boundHashOps(key).put(field, value);
}
@Override
public void addMap(String key, String field, Object value, long time) {
redisTemplate.boundHashOps(key).put(field, value);
redisTemplate.boundHashOps(key).expire(time, TimeUnit.SECONDS);
}
@Override
public void addSet(String key, Object... obj) {
redisTemplate.boundSetOps(key).add(obj);
}
@Override
public long removeSetValue(String key, Object obj) {
return redisTemplate.boundSetOps(key).remove(obj);
}
@Override
public long removeSetValue(String key, Object... obj) {
if (obj != null && obj.length > 0) {
return redisTemplate.boundSetOps(key).remove(obj);
}
return 0L;
}
@Override
public long getSetSize(String key) {
return redisTemplate.boundSetOps(key).size();
}
@Override
public Boolean hasSetValue(String key, Object obj) {
Boolean boo = null;
int t = 0;
while (true) {
try {
boo = redisTemplate.boundSetOps(key).isMember(obj);
break;
} catch (Exception e) {
log.error("key[" + key + "],obj[" + obj + "] Set , :" + e.getMessage());
t++;
}
if (t > TIMES) {
break;
}
}
log.info("key[" + key + "],obj[" + obj + "] ,boo:" + boo);
return boo;
}
@Override
public Set getSet(String key) {
return redisTemplate.boundSetOps(key).members();
}
@Override
public Set getSetUnion(String key, String otherKey) {
return redisTemplate.boundSetOps(key).union(otherKey);
}
@Override
public Set getSetUnion(String key, Set set) {
return redisTemplate.boundSetOps(key).union(set);
}
@Override
public Set getSetIntersect(String key, String otherKey) {
return redisTemplate.boundSetOps(key).intersect(otherKey);
}
@Override
public Set getSetIntersect(String key, Set set) {
return redisTemplate.boundSetOps(key).intersect(set);
}
}
よびだし
使用するクラスにRedisTemplateのパッケージDaoを注入すればよい.以下のようにする.
@Resource
private BaseRedisDaoInter redisDaoInter;