RedisTemplate读取包含指定前缀的Key的value

文章已同步到个人博客: 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*");

注意,后面的 “*”不能少


版权声明:本文为MasterAjoe原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。