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*");

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

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Spring Boot中,可以使用RedisTemplate来实现对Redis多目录下的表的读取。以下是实现步骤: 1. 配置Redis连接池 在application.properties文件中配置Redis连接池: ``` spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password= spring.redis.database=0 spring.redis.jedis.pool.max-active=8 spring.redis.jedis.pool.max-wait=-1 spring.redis.jedis.pool.max-idle=8 spring.redis.jedis.pool.min-idle=0 ``` 其中,spring.redis.database指定了Redis数据库的编号,可以根据需要设置不同的值。 2. 创建RedisTemplate 创建RedisTemplate时,需要指定keyvalue的序列化方式,以及连接池: ```java @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); return redisTemplate; } } ``` 3. 使用RedisTemplate操作Redis 使用RedisTemplate操作Redis时,可以通过指定不同的前缀来访问不同的目录下的表: ```java @Autowired private RedisTemplate<String, Object> redisTemplate; public void setValue(String prefix, String key, Object value) { redisTemplate.opsForValue().set(prefix + ":" + key, value); } public Object getValue(String prefix, String key) { return redisTemplate.opsForValue().get(prefix + ":" + key); } ``` 在调用setValue和getValue方法时,可以传入不同的前缀,来访问不同的目录下的表。例如: ```java setValue("user", "name", "Tom"); Object value = getValue("user", "name"); ``` 以上就是在Spring Boot中实现对Redis多目录下的表的读取的方法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值