如何用JReJSON包在Java中连接远程RedisJSON实例?
解决JReJSON连接远程Redis服务器的UnknownHostException问题
问题根源
你调用的JReJSON("redis://:password@host", port)构造方法中,第一个参数的设计是纯主机地址字符串(比如localhost或192.168.1.100),并不支持解析完整的Redis URL格式。当你传入redis://:password@host时,程序会把整个字符串当作主机名去做DNS解析,自然找不到对应主机,从而抛出UnknownHostException和“Failed to create socket”错误。
正确的远程连接方式
JReJSON基于Jedis开发,推荐使用Jedis连接池或直接传入Jedis实例来构建客户端,这两种方式都支持完整的Redis URL格式。
方式1:使用Jedis连接池(生产环境推荐)
连接池能更好地管理连接资源,适合高并发场景:
import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.RedisURI; import io.redisearch.rejson.JReJSON; public class RedisJsonConnExample { public static void main(String[] args) { // 替换为你的远程Redis URL String redisUrl = "redis://:your_password@your_host:your_port"; // 配置连接池参数 JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(10); // 最大连接数 poolConfig.setMaxIdle(5); // 最大空闲连接数 // 基于URL创建连接池 RedisURI redisURI = RedisURI.create(redisUrl); JedisPool jedisPool = new JedisPool(poolConfig, redisURI); // 初始化JReJSON客户端 JReJSON jsonClient = new JReJSON(jedisPool); // 测试JSON写入与读取 jsonClient.set("user:1", "{\"name\":\"Alice\",\"age\":30}"); String userJson = jsonClient.get("user:1"); System.out.println(userJson); // 关闭连接池(程序结束时执行) jedisPool.close(); } }
方式2:直接使用单个Jedis连接(测试场景用)
如果只是简单测试,也可以直接创建Jedis实例传入JReJSON:
import redis.clients.jedis.Jedis; import io.redisearch.rejson.JReJSON; public class RedisJsonSingleConnExample { public static void main(String[] args) { // 替换为你的远程Redis URL String redisUrl = "redis://:your_password@your_host:your_port"; // 创建Jedis连接 Jedis jedis = new Jedis(redisUrl); // 初始化JReJSON客户端 JReJSON jsonClient = new JReJSON(jedis); // 测试操作 jsonClient.set("test:key", "{\"content\":\"hello redis json\"}"); System.out.println(jsonClient.get("test:key")); // 关闭连接 jedis.close(); } }
额外说明
你使用的Jedis 4.3.1和JReJSON 1.4.0版本是兼容的,JReJSON 1.4.0官方就是适配Jedis 4.x系列版本,无需担心版本冲突问题。
内容的提问来源于stack exchange,提问作者Gowthamss
相关产品推荐
相关产品推荐

