Jedis API 使用
Jedis 是 Redis 官方推荐的 Java 客户端,它提供了一套丰富的 API 来操作 Redis 服务器。通过 Jedis API,开发者可以方便地在 Java 应用程序中执行 Redis 的命令来实现数据的增删查改以及各种复杂的数据结构操作。
以下是一些基本的 Jedis API 示例和它们对应的功能:
常用操作
-
连接 Redis
Jedis jedis = new Jedis("localhost", 6379); // 创建一个与Redis实例的连接,默认端口是6379
-
字符串(String)操作
设置/获取值:
jedis.set("key", "value"); // 设置键值对 String value = jedis.get("key"); // 获取键对应的值
-
哈希表(Hash)操作
添加/获取哈希表中的字段值:
jedis.hset("hashKey", "field", "value"); // 向哈希表添加字段 Map<String, String> map = jedis.hgetAll("hashKey"); // 获取整个哈希表的内容
-
列表(List)操作
在列表头部或尾部插入元素:
jedis.lpush("listKey", "item1"); // 在列表左侧添加元素 List<String> list = jedis.lrange("listKey", 0, -1); // 获取列表内所有元素
-
集合(Set)操作
添加/查询集合成员:
jedis.sadd("setKey", "member1"); // 将元素添加到集合中 Set<String> members = jedis.smembers("setKey"); // 获取集合中所有成员
-
有序集合(Sorted Set/ZSet)操作
添加带分数的成员并排序:
jedis.zadd("zsetKey", 1.0, "member1"); // 根据分数添加成员 Set<String> sortedMembers = jedis.zrangeByScore("zsetKey", 0, Double.MAX_VALUE); // 根据分数范围获取成员
除此之外,Jedis 还提供了事务、发布订阅、Lua 脚本、键空间通知等高级功能的API支持。为了确保资源的有效管理,使用完 Jedis 实例后需要调用 jedis.close()
方法关闭连接。
随着 Redis 版本更新和新特性的增加,Jedis API 也在不断扩展和完善,以适应更多的应用场景。
具体测试步骤
1. 新建 maven 项目
配置 pom.xml ,添加 Jedis 依赖
<dependencies><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.6.3</version></dependency>
</dependencies>
2. 编写测试类
测试是否能够连通
先测试是否能连通本地redis (window )
/*** 访问本机*/
public class Test {public static void main(String[] args) {//127.0.0.1 访问的window 上的 redisJedis jedis = new Jedis("127.0.0.1",6379);jedis.auth("zhang");String name = jedis.get("name");System.out.println(name);}
}
注意: 如果 redis 配置了身份验证,可以使用 jedis.auth("") 指定密码即可。
3. 访问配置
a. 测试linux 连通
/*** 1. 防火墙和端口* 2. 修改配置,允许其他站点访问*/
public class TestLinuxRedis {public static void main(String[] args) {Jedis jedis = new Jedis("192.168.184.140",6379);String name = jedis.get("name");System.out.println(name);}
}
注意:默认情况下,连接会超时和失败。
原因:
linux 防火墙或端口问题。可以通过关闭防火墙或开放端口解决
如果开放后,默认仍是无法访问的,因为 redis 默认只允许本机访问。需要修改配置文件 redis.conf
a) 方式一: 修改 bind 127.0.0.1 改为 bind 0.0.0.0
b) 方式二:注释掉 bind 127.0.0.1 同时 修改保护模式为 : protected-mode no
b. 关闭防火墙
[root@localhost bin]# systemctl stop firewalld
c. 再测试,通过!
再次开启防火墙,又不能通过,所以再单独开放 6379 端口即可
[root@zhangpeng bin]# systemctl start firewalld
[root@zhangpeng bin]# firewall-cmd --zone=public --add-port=6379/tcp --permanent
success
[root@zhangpeng bin]# firewall-cmd --reload
开启防火墙命令:
* firewall-cmd --zone=public --add-port=6379/tcp --permanent
* firewall-cmd --reload** # 配置立即生效
4. 问题总结
* 1. 出现 connect timed out 连接超时问题
* a. 检查防火墙和端口是否开放
* b. redis 保护问题,查看配置文件 redis.conf 文件
* bind 127.0.0.1 -::1 注释掉
* protected-mode no
* c. 重新启动,先shutdown,再启动
* 2. 注意:不能向从节点中写数据的
* redis.clients.jedis.exceptions.JedisDataException:
* READONLY You can't write against a read only replica.