文章已同步到个人博客: http://www.tianshaojiao.com/?p=2140
一、需求
我在做im开发的时候,往往需要在redis中存入客户端与服务端的连接信息,这些连接信息都是有指定前缀的,如下图所示:
现在如果想要推送消息到所有以 tcImClient开头的客户端时,就需要读取他们的value值,找到客户端连接信息进行推送。
二、解决方案
引入maven依赖,如下所示:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
yml中的配置:
spring:
redis:
host: redis服务器地址
port: 端口
password: 密码
# 连接超时时间(毫秒)
timeout: 10000
jedis:
pool:
# 连接池中的最大空闲连接
max-idle: 8
# 连接池中的最小空闲连接
min-idle: 10
# 连接池最大连接数(使用负值表示没有限制)
max-active: 100
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1
max-total: 20
封装方法:
/**
* 获取指定前缀的值
* @param prefix key前缀
* @return
*/
public List<String> getPrefixKeyValue(String prefix) {
List<String> values = null;
// 获取所有的key
Set<String> keys = redisTemplate.keys(prefix);
if (null != keys){
// 批量获取数据
values = redisTemplate.opsForValue().multiGet(keys);
}
return values;
}
调用方式:
List<String> friendImInfos = redisImCacheManager.getPrefixKeyValue(" tcImClient*");
注意,后面的 “*”不能少