Spring+Jedis分库的问题

今天部署新项目,需要用redis的另一个库,本项目用的是

<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.9.0</version>
		</dependency>

由于要用数据库分片,用的是shareJedis

查看了下redis.clients.jedis.JedisShardInfo ,有db参数

 private int connectionTimeout;
  private int soTimeout;
  private String host;
  private int port;
  private String password = null;
  private String name = null;
  // Default Redis DB
  private int db = 0;
  private boolean ssl;
  private SSLSocketFactory sslSocketFactory;
  private SSLParameters sslParameters;
  private HostnameVerifier hostnameVerifier;

有db参数,但是并没有用db作为构造参数,有setDb方法但是并没有getDb方法。

作为spring框架,并无法注入,JedisShardInfo 配置有方法

  public JedisShardInfo(String host) {
    super(Sharded.DEFAULT_WEIGHT);
    URI uri = URI.create(host);
    if (JedisURIHelper.isValid(uri)) {
      this.host = uri.getHost();
      this.port = uri.getPort();
      this.password = JedisURIHelper.getPassword(uri);
      this.db = JedisURIHelper.getDBIndex(uri);
      this.ssl = uri.getScheme().equals("rediss");
    } else {
      this.host = host;
      this.port = Protocol.DEFAULT_PORT;
    }
  }

方法就是转化为uri但是对于本人来并不适用

于是就写个类继承方法:

public class MyShareRedisInfo extends JedisShardInfo{
	private int db=0;
	public MyShareRedisInfo(String host, int port, int db) {
		super(host, port);
		this.setDb(db);
	}
	public int getDb() {
		return db;
	}
	public void setDb(int db) {
		this.db = db;
	}
}
然后配置
<bean id="jedisShardInfo" class="**.web.utils.redis.MyShareRedisInfo">
		<constructor-arg index="0" value="${redis.ip}" />
		<constructor-arg index="1" value="${redis.port}" type="int" />
		<constructor-arg index="2" value="${redis.dbIndex}" />
		<property name="password" value="${redis.pass}" />
	</bean>

完美解决


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章