2016-03-18 5 views
1

Die RedisTemplate unterstützt den Befehl PUBSUB CHANNELS nicht. So wäre eine Möglichkeit, das folgende zu tun:Spring Data Redis - Unterstützung für den Befehl PUBSUB CHANNELS

private JedisPool getJedisPool(){ 
     if (jedisPool == null) 
     jedisPool = new JedisPool(redisConnectionFactory.getPoolConfig(), redisConnectionFactory.getHostName(), redisConnectionFactory.getPort()); 
     return jedisPool; 
    } 

    public Integer getNumChannels() { 
     Integer count = 0; 
     try (Jedis jedis = getJedisPool().getResource()) { 
      List<String> channels = jedis.pubsubChannels("user.*"); 
      count = channels == null ? 0 : channels.size(); 
     } catch (Exception e) { 
      logger.error("unable to get user count", e); 
     } finally { 
      //getJedisPool().close(); //No need for close or returnResource() 
     } 
    } 

Ist dies der vorgeschlagene Ansatz?

Antwort

0

Es hängt davon ab, wohin Sie unterwegs sind. Wenn Sie es nur für Ihre eigene Anwendung verwenden möchten, können Sie JedisConnection von JedisConnectionFactory abrufen und die zugrunde liegende Jedis-Instanz zum Aufrufen von Befehlen verwenden.

JedisConnectionFactory factory = … 

// assuming you're using Redis Standalone or Redis Sentinel 
RedisConnection connection = factory.getConnection(); 
try { 
    if (connection instanceof JedisConnection) { 
     Jedis jedis = ((JedisConnection) connection).getNativeConnection(); 
     List<String> strings = jedis.pubsubChannels("…"); 
    } 
} finally { 
    connection.close(); 
} 

Bitte beachten Sie, das nur mit Redis Standalone/Redis Sentinel arbeitet aber nicht mit Redis Cluster als JedisCluster nicht pubsubChannels aussetzen.