Jedis 是 Java 操作 Redis 最常用的客戶端。本文展示單機連線工具類、以 表名:索引 為 Key、JSON 為 Value 的通用 DAO 實作(新增/修改、刪除、單查、全查)。
public class RedisUtil {
private static final String HOST = "10.0.0.18";
private static final int PORT = 6379;
protected Jedis jedis = new Jedis(HOST, PORT);
}
生產環境建議使用 JedisPool 連線池,配置 maxTotal、maxIdle、testOnBorrow 等參數。
public class ServerDaoImpl extends RedisUtil implements IServerDao {
private static final String KEY_PREFIX = "server";
@Override
public void saveOrUpdateServer(Server server) {
String key = KEY_PREFIX + ":" + server.getIp();
String value = JsonUtils.object2json(server); // 需自行實作或用 Jackson/Gson
jedis.set(key, value);
}
@Override
public void deleteServer(String ip) {
jedis.del(KEY_PREFIX + ":" + ip);
}
@Override
public Server getServer(String ip) {
String json = jedis.get(KEY_PREFIX + ":" + ip);
if (json == null) return null;
return JsonUtils.json2Object(json, Server.class);
}
@Override
public List getAllServer() {
List list = new ArrayList<>();
Set keys = jedis.keys(KEY_PREFIX + ":*");
for (String k : keys) {
String json = jedis.get(k);
if (json != null) {
list.add(JsonUtils.json2Object(json, Server.class));
}
}
return list;
}
}
jedis.keys(pattern) 會掃描全庫,**生產環境嚴禁使用**,請改用 SCAN 迭代器。JedisPool。業務域:實體:唯一鍵(如 server:ip:10.0.0.1),便於管理與 TTL 設定。文中提到集群搭建成功但介面測試有問題。Jedis Cluster 用法:
Setnodes = new HashSet<>(); nodes.add(new HostAndPort("10.0.0.1", 6379)); nodes.add(new HostAndPort("10.0.0.2", 6379)); JedisCluster jc = new JedisCluster(nodes, new JedisPoolConfig()); // 操作 API 與單機一致,自動按 Slot 路由
常見坑:keys、flushAll 等指令不支援 Cluster 模式;Lua 腳本需確保所有 Key 落在同一 Slot(用 {tag}key 強制)。