在Spring Boot微服务使用Jedis操作Redis Hash哈希散列

记录:409

场景:在Spring Boot微服务使用Jedis操作Redis Hash哈希散列。

版本:JDK 1.8,Spring Boot 2.6.3,redis-6.2.5,jedis-3.7.1。

1.微服务中配置Redis信息

1.1在application.yml中Jedis配置信息

hub:
  example:
    redis:
      jedis:
        host: 192.168.19.203
        port: 28001
        password: 12345678
        timeout: 60000

1.2使用ConfigurationProperties加载Jedis配置

Spring Boot微服务在启动时,自动注解机制会读取application.yml的Jedis相关注入到JedisConnectProperties 对象。

在Spring环境中,注入JedisConnectProperties对象,就能获取到Redis相关配置信息。也就是Jedis客户端必须的参数。

定义JedisConnectProperties 类,扫描yml中的hub.example.redis.jedis配置。

@Component
@ConfigurationProperties(prefix="hub.example.redis.jedis")
public class JedisConnectProperties {
  private String host;
  private int port;
  private int timeout;
  private String password;
  public String getHost() {
      return host;
  }
  public void setHost(String host) {
      this.host = host;
  }
  public int getPort() {
      return port;
  }
  public void setPort(int port) {
      this.port = port;
  }
  public int getTimeout() {
      return timeout;
  }
  public void setTimeout(int timeout) {
      this.timeout = timeout;
  }
  public String getPassword() {
      return password;
  }
  public void setPassword(String password) {
      this.password = password;
  }
}

1.3在pom.xml添加依赖

在Spring Boot中默认集成jedis,使用时无需加版本号,本例版本3.7.1是Spring Boot 2.6.3对应的版本。


  redis.clients
  jedis
  3.7.1

2.微服务中配置Jedis

2.1配置Jedis

@Configuration
public class JedisConfig {
  @Autowired
  private JedisConnectProperties jedisProperties;
  @Bean("jedisPoolConfig")
  public JedisPoolConfig jedisPoolConfig() {
    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    jedisPoolConfig.setMaxTotal(30);
    jedisPoolConfig.setMaxIdle(30);
    jedisPoolConfig.setMinIdle(1);
    jedisPoolConfig.setNumTestsPerEvictionRun(-1);
    jedisPoolConfig.setTestOnBorrow(true);
    jedisPoolConfig.setTestOnReturn(false);
    jedisPoolConfig.setBlockWhenExhausted(false);
    return jedisPoolConfig;
  }
  @Bean("jedisPool")
  public JedisPool jedisPool(JedisPoolConfig jedisPoolConfig) {
    JedisPool jedisPool = new JedisPool(jedisPoolConfig,
        jedisProperties.getHost(),
        jedisProperties.getPort(),
        jedisProperties.getTimeout(),
        jedisProperties.getPassword());
    return jedisPool;
  }
}

2.2解析

在配置Jedis后,在Spring环境中可以使用@Autowired自动注入jedisPool,从Jedis资源池中获取Jedis就可以操作Redis了。

3.使用Jedis操作Redis Hash哈希散列

3.1简要说明

使用Jedis操作Redis Hash哈希散列,常用操作:增、查、改、删、设置超时等。

3.2操作示例

@RestController
@RequestMapping("/hub/example/loadJedis")
@Slf4j
public class LoadJedisController {
  // 注入JedisPool资源池
  @Autowired
  private JedisPool jedisPool;
    /**
   * 在Spring Boot微服务使用Jedis操作Redis Hash哈希散列
   */
  @GetMapping("/jedis04-01")
  public Object loadData04_01() {
    log.info("Jedis操作开始...");
    // 1.获取Jedis对象
    Jedis jedis = jedisPool.getResource();
    // 2.增
    // 2.1写入一条数据
    jedis.hset("CityInfo:suzhou04:01", "suzhou", "苏州");
    jedis.hset("CityInfo:suzhou04:02", "suzhou", "苏州");
    // 2.2写入批量数据
    Map hash = new HashMap<>();
    hash.put("suzhou01", "苏州-姑苏");
    hash.put("suzhou02", "苏州-相城");
    jedis.hset("CityInfo:suzhou04:01", hash);
    // 2.3写入批量数据,以byte[]方式
    byte[] keyF = "CityInfo:suzhou04:03".getBytes(StandardCharsets.UTF_8);
    byte[] fieldF = "suzhou05".getBytes(StandardCharsets.UTF_8);
    byte[] valueF = "吴江".getBytes(StandardCharsets.UTF_8);
    jedis.hset(keyF, fieldF, valueF);
    // 3.查
    // 3.1查询一条数据
    String city001 = jedis.hget("CityInfo:suzhou04:01", "suzhou");
    // 3.2查询批量数据
    Map map = jedis.hgetAll("CityInfo:suzhou04:01");
    // 3.3查询hash长度
    Long len = jedis.hlen("CityInfo:suzhou04:01");
    // 3.4查询hash全部Key
    Set keyResult = jedis.hkeys("CityInfo:suzhou04:01");
    keyResult.forEach((key) -> {
        System.out.println("keyResult=" + key);
    });
    // 3.5查询hash全部Key
    List valueResult = jedis.hvals("CityInfo:suzhou04:01");
    valueResult.forEach((value) -> {
        System.out.println("valueResult=" + value);
    });
    // 4.改
    jedis.hset("CityInfo:suzhou04:01", "suzhou", "苏州-主城");
    // 5.删
    jedis.hdel("CityInfo:suzhou04:01", "suzhou01");
    jedis.del("CityInfo:suzhou04:02");
    // 6.设置超时,单位秒
    jedis.expire("CityInfo:suzhou04:01", 600L);
    // 7.判断键是否存在
    Boolean result = jedis.hexists("CityInfo:suzhou04:01", "suzhou02");
    // 8.释放Jedis对象
    jedis.close();
    log.info("Jedis操作结束...");
    return "执行成功";
  }
}

3.3测试验证

使用Postman测试。

请求RUL:http://127.0.0.1:18205/hub-205-redis/hub/example/loadJedis/jedis04-01

以上,感谢。

2023年4月15日

你可能感兴趣的:(L02-SpringBoot,在Spring,Boot微服务,使用Jedis,操作Redis,Hash,Java)