1. jedis/config/JedisConfiguration.java
import java.util.HashSet;
import java.util.List;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPool;
@Configuration
public class JedisConfiguration {
@Autowired
private JedisProperties jedisProperties;
@Bean
@Profile("redisPool")
public JedisPool getJedisPool() {
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
JedisPool jedisPool = new JedisPool(poolConfig, jedisProperties.getHost(), jedisProperties.getPort(),
jedisProperties.getTimeout(), jedisProperties.getPassword(), jedisProperties.getSsl());
return jedisPool;
}
@Bean
@Profile("redisCluster")
public JedisCluster getJedisCluster() {
List<String> nodesList = jedisProperties.getCluster().getNodes();
HashSet<HostAndPort> nodesSet = new HashSet<>();
if (nodesList != null && nodesList.size() > 0) {
for (String node : nodesList) {
if (node != null) {
String[] hostAndPort = node.split(":");
HostAndPort hostAndPort2 = new HostAndPort(hostAndPort[0], Integer.parseInt(hostAndPort[1]));
nodesSet.add(hostAndPort2);
}
}
}
return new JedisCluster(nodesSet);
}
}
2. 1. jedis/config/JedisProperties.java
import java.util.List;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* Jedis pool配置类
*
* @author dell xps15
*
*/
@Configuration
@ConfigurationProperties(prefix = "jedis")
public class JedisProperties {
private String host = "localhost";
private int port = 6379;
private String password;
private int timeout;
private boolean ssl;
private Pool pool;
private Cluster cluster;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getTimeout() {
return timeout;
}
public void setTimeout(int timeout) {
this.timeout = timeout;
}
public boolean getSsl() {
return ssl;
}
public void setSsl(boolean ssl) {
this.ssl = ssl;
}
public Pool getPool() {
return pool;
}
public void setPool(Pool pool) {
this.pool = pool;
}
public Cluster getCluster() {
return cluster;
}
public void setCluster(Cluster cluster) {
this.cluster = cluster;
}
/**
* Pool properties.
*/
public static class Pool {
/**
* Max number of "idle" connections in the pool. Use a negative value to
* indicate an unlimited number of idle connections.
*/
private int maxIdle = 8;
/**
* Target for the minimum number of idle connections to maintain in the pool.
* This setting only has an effect if it is positive.
*/
private int minIdle = 0;
/**
* Max number of connections that can be allocated by the pool at a given time.
* Use a negative value for no limit.
*/
private int maxActive = 8;
/**
* Maximum amount of time (in milliseconds) a connection allocation should block
* before throwing an exception when the pool is exhausted. Use a negative value
* to block indefinitely.
*/
private int maxWait = -1;
public int getMaxIdle() {
return this.maxIdle;
}
public void setMaxIdle(int maxIdle) {
this.maxIdle = maxIdle;
}
public int getMinIdle() {
return this.minIdle;
}
public void setMinIdle(int minIdle) {
this.minIdle = minIdle;
}
public int getMaxActive() {
return this.maxActive;
}
public void setMaxActive(int maxActive) {
this.maxActive = maxActive;
}
public int getMaxWait() {
return this.maxWait;
}
public void setMaxWait(int maxWait) {
this.maxWait = maxWait;
}
}
/**
* Cluster properties.
*/
public static class Cluster {
/**
* Comma-separated list of "host:port" pairs to bootstrap from. This represents
* an "initial" list of cluster nodes and is required to have at least one
* entry.
*/
private List<String> nodes;
/**
* Maximum number of redirects to follow when executing commands across the
* cluster.
*/
private Integer maxRedirects;
public List<String> getNodes() {
return this.nodes;
}
public void setNodes(List<String> nodes) {
this.nodes = nodes;
}
public Integer getMaxRedirects() {
return this.maxRedirects;
}
public void setMaxRedirects(Integer maxRedirects) {
this.maxRedirects = maxRedirects;
}
}
}
3. jedis/JedisClient.java
import java.util.Map;
/**
* redis客户端接口
*
* @author dell
*
*/
public interface JedisClient {
public String set(final String key, String value);
public String set(final byte[] key, final byte[] value);
public String get(final String key);
public byte[] get(final byte[] key);
public Long del(String key);
public Long del(final byte[] key);
public Long del(final String... keys);
public Long del(final byte[]... keys);
public Boolean exists(final String key);
public Long expire(final String key, final int seconds);
public Long expire(final byte[] key, final int seconds);
public Long ttl(final String key);
public Long incr(final String key);
public Long hset(final String key, final String field, final String value);
public String hget(final String key, final String field);
public Map<String, String> hgetAll(final String key);
public Long hdel(final String key, final String... field);
}
4. jedis/JedisClientCluster.java
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
import redis.clients.jedis.JedisCluster;
/**
* Jedis集群版
*
* @author dell xps15
*
*/
@Component
@Profile("redisCluster")
public class JedisClientCluster implements JedisClient {
@Autowired
private JedisCluster jedisCluster;
@Override
public String set(String key, String value) {
return jedisCluster.set(key, value);
}
@Override
public String set(byte[] key, byte[] value) {
return jedisCluster.set(key, value);
}
@Override
public String get(String key) {
return jedisCluster.get(key);
}
@Override
public byte[] get(byte[] key) {
return jedisCluster.get(key);
}
@Override
public Long del(String key) {
return jedisCluster.del(key);
}
@Override
public Long del(byte[] key) {
return jedisCluster.del(key);
}
@Override
public Long del(String... keys) {
return jedisCluster.del(keys);
}
@Override
public Long del(byte[]... keys) {
return jedisCluster.del(keys);
}
@Override
public Boolean exists(String key) {
return jedisCluster.exists(key);
}
@Override
public Long expire(String key, int seconds) {
return jedisCluster.expire(key, seconds);
}
@Override
public Long expire(byte[] key, int seconds) {
return jedisCluster.expire(key, seconds);
}
@Override
public Long ttl(String key) {
return jedisCluster.ttl(key);
}
@Override
public Long incr(String key) {
return jedisCluster.incr(key);
}
@Override
public Long hset(String key, String field, String value) {
return jedisCluster.hset(key, field, value);
}
@Override
public String hget(String key, String field) {
return jedisCluster.hget(key, field);
}
@Override
public Map<String, String> hgetAll(String key) {
return jedisCluster.hgetAll(key);
}
@Override
public Long hdel(String key, String... field) {
return jedisCluster.hdel(key, field);
}
}
5. jedis/JedisClientPool.java
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
/**
* Jedis单机版
*
* @author dell xps15
*
*/
@Component
@Profile("redisPool")
public class JedisClientPool implements JedisClient {
@Autowired
private JedisPool jedisPool;
@Override
public String set(String key, String value) {
Jedis jedis = jedisPool.getResource();
String result = jedis.set(key, value);
jedis.close();
return result;
}
@Override
public String set(byte[] key, byte[] value) {
Jedis jedis = jedisPool.getResource();
String result = jedis.set(key, value);
jedis.close();
return result;
}
@Override
public String get(String key) {
Jedis jedis = jedisPool.getResource();
String result = jedis.get(key);
jedis.close();
return result;
}
@Override
public byte[] get(byte[] key) {
Jedis jedis = jedisPool.getResource();
byte[] result = jedis.get(key);
jedis.close();
return result;
}
@Override
public Long del(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.del(key);
jedis.close();
return result;
}
@Override
public Long del(byte[] key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.del(key);
jedis.close();
return result;
}
@Override
public Long del(String... keys) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.del(keys);
jedis.close();
return result;
}
@Override
public Long del(byte[]... keys) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.del(keys);
jedis.close();
return result;
}
@Override
public Boolean exists(String key) {
Jedis jedis = jedisPool.getResource();
Boolean result = jedis.exists(key);
jedis.close();
return result;
}
@Override
public Long expire(String key, int seconds) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.expire(key, seconds);
jedis.close();
return result;
}
@Override
public Long expire(byte[] key, int seconds) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.expire(key, seconds);
jedis.close();
return result;
}
@Override
public Long ttl(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.ttl(key);
jedis.close();
return result;
}
@Override
public Long incr(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.incr(key);
jedis.close();
return result;
}
@Override
public Long hset(String key, String field, String value) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hset(key, field, value);
jedis.close();
return result;
}
@Override
public String hget(String key, String field) {
Jedis jedis = jedisPool.getResource();
String result = jedis.hget(key, field);
jedis.close();
return result;
}
@Override
public Map<String, String> hgetAll(String key) {
Jedis jedis = jedisPool.getResource();
Map<String, String> result = jedis.hgetAll(key);
jedis.close();
return result;
}
@Override
public Long hdel(String key, String... fields) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hdel(key, fields);
jedis.close();
return result;
}
}
6. application.yml
spring:
profiles:
active: dev,redisPool
# Jedis
jedis:
host: 127.0.0.1
port: 6379
#password: 123456