苏州网站建设推广咨询平台,专门给别人做网站,制作网页的工具主要有哪些,加强网站建设管理办法文章目录 0.前言1. 发布和订阅消息2. 事务操作3. 管道操作4. jedis 支持哨兵模式5. jedis 支持集群模式5. 参考链接 0.前言
Jedis是Redis的Java客户端#xff0c;它支持所有的Redis原生命令#xff0c;使用方便#xff0c;且可以与Java项目无缝集成。 该库的最新版本支持Re… 文章目录 0.前言1. 发布和订阅消息2. 事务操作3. 管道操作4. jedis 支持哨兵模式5. jedis 支持集群模式5. 参考链接 0.前言
Jedis是Redis的Java客户端它支持所有的Redis原生命令使用方便且可以与Java项目无缝集成。 该库的最新版本支持Redis 5.0、6.0、6.2、7.0和7.2。 最新依赖
dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion5.0.0/version
/dependency有关Jedis版本与Redis版本和JDK的兼容性的信息
Jedis版本支持的Redis版本JDK兼容性3.95.0和6.2系列8, 11 4.05.0至当前版本8, 11, 17 5.06.0至当前版本8, 11, 17
具体和最准确的信息建议参考官方Jedis文档。
1. 发布和订阅消息
这是一种典型的发布/订阅模式Jedis提供了subscribe方法和publish方法来实现。在这个例子中我们首先创建了一个Jedis对象和一个消息监听器然后通过subscribe方法订阅了一个频道之后在这个频道上通过publish方法发布了一条消息消息监听器接收到消息后会打印出消息内容和频道名。如果不再需要订阅该频道可以通过unsubscribe方法来取消订阅。最后记得关闭Jedis对象来释放资源。
// 创建Jedis对象
Jedis jedis new Jedis(localhost, 6379);// 创建消息监听器
JedisPubSub jedisPubSub new JedisPubSub() {Overridepublic void onMessage(String channel, String message) {System.out.println(Received message: message from channel: channel);}
};// 订阅频道
jedis.subscribe(jedisPubSub, channel);// 发布消息
jedis.publish(channel, Hello Redis!);// 取消订阅
jedisPubSub.unsubscribe(channel);// 关闭连接
jedis.close();2. 事务操作
Jedis也支持Redis的事务操作可以通过multi方法开启一个事务然后在事务中进行一系列的操作最后通过exec方法提交事务如果需要放弃事务可以使用discard方法。在这个例子中我们在一个事务中进行了两次set操作然后提交了事务。
// 创建Jedis对象
Jedis jedis new Jedis(localhost, 6379);// 开启事务
Transaction transaction jedis.multi();// 执行事务操作
transaction.set(key1, value1);
transaction.set(key2, value2);// 提交事务
transaction.exec();// 关闭连接
jedis.close();3. 管道操作
管道是一种可以一次性发送多个命令到服务器的方式服务器会一次性返回所有命令的结果这样可以大大提高效率。在这个例子中我们使用了Jedis的pipelined方法创建了一个管道对象然后在管道中执行了三次get命令通过sync方法提交了管道然后通过Response对象获取了命令的返回结果。
// 创建Jedis对象
Jedis jedis new Jedis(localhost, 6379);// 创建管道对象
Pipeline pipelined jedis.pipelined();// 批量执行命令
ResponseString response1 pipelined.get(key1);
ResponseString response2 pipelined.get(key2);
ResponseString response3 pipelined.get(key3);// 提交命令
pipelined.sync();// 获取命令结果
String value1 response1.get();
String value2 response2.get();
String value3 response3.get();// 关闭连接
jedis.close();4. jedis 支持哨兵模式
在使用Jedis的哨兵模式之前你需要先配置好Redis的哨兵模式。这需要至少3个Redis实例一个作为主节点(master)两个作为从节点(slave)。然后在每个Redis实例上运行一个哨兵进程。
Redis Sentinel哨兵配置 主节点配置文件 redis.conf 示例 bind 127.0.0.1
port 6379从节点配置文件 redis-slave.conf 示例 bind 127.0.0.1
port 6380
slaveof 127.0.0.1 6379哨兵配置文件 sentinel.conf 示例 sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000sentinel monitor mymaster 127.0.0.1 6379 2 表示哨兵监控的主节点名称叫mymaster地址127.0.0.1端口63792表示至少需要2个哨兵同意才确认主节点挂掉。sentinel down-after-milliseconds mymaster 60000 表示如果60秒内master节点无响应那么哨兵将master节点标记为主观下线(subjectively down)。sentinel failover-timeout mymaster 180000 表示如果180秒内master节点还是无响应那么开始进行故障转移。
使用Jedis连接Redis Sentinel 引入Jedis依赖。在pom.xml中添加 dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion3.7.0/version
/dependencyJava代码 SetString sentinels new HashSetString();
sentinels.add(127.0.0.1:26379); //添加哨兵地址
JedisSentinelPool sentinelPool new JedisSentinelPool(mymaster, sentinels); //创建JedisSentinelPoolmymaster是在哨兵配置中定义的主节点名称
Jedis jedis null;
try {jedis sentinelPool.getResource(); //获取Jedis对象jedis.set(key, value); //进行Redis操作String value jedis.get(key);System.out.println(value);
} finally {if (jedis ! null) {jedis.close(); //关闭连接}
}Jedis会自动处理故障转移无需我们手动切换。当Redis主节点出现故障哨兵会自动选举新的主节点Jedis也会自动连接到新的主节点。
5. jedis 支持集群模式
在使用Jedis的集群模式之前你需要先配置好Redis的集群模式。这需要至少6个Redis实例其中3个作为主节点3个作为从节点。每个主节点都有一个对应的从节点。
Redis Cluster集群配置 主节点配置文件 redis-7000.conf 示例 port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes从节点配置文件 redis-7001.conf 示例 port 7001
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 5000
appendonly yes通过Redis自带的redis-cli工具创建集群
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1使用Jedis连接Redis Cluster 引入Jedis依赖。在pom.xml中添加 dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion3.7.0/version
/dependencyJava代码 以下是一个使用Jedis连接Redis Cluster的完整Java代码示例
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;import java.util.HashSet;
import java.util.Set;public class JedisClusterExample {public static void main(String[] args) {// 创建集群节点集合SetHostAndPort jedisClusterNodes new HashSetHostAndPort();// 向集合中添加新的节点jedisClusterNodes.add(new HostAndPort(127.0.0.1, 7000));jedisClusterNodes.add(new HostAndPort(127.0.0.1, 7001));jedisClusterNodes.add(new HostAndPort(127.0.0.1, 7002));jedisClusterNodes.add(new HostAndPort(127.0.0.1, 7003));jedisClusterNodes.add(new HostAndPort(127.0.0.1, 7004));jedisClusterNodes.add(new HostAndPort(127.0.0.1, 7005));// 创建JedisCluster对象JedisCluster jedisCluster new JedisCluster(jedisClusterNodes);try {// 保存数据jedisCluster.set (myKey, Hello, JedisCluster!);// 获取数据String value jedisCluster.get(myKey);System.out.println(Value stored in Redis : value);} catch (Exception e) {e.printStackTrace();} finally {if (jedisCluster ! null) {try {// 关闭JedisCluster对象jedisCluster.close();} catch (Exception e) {e.printStackTrace();}}}}
}5. 参考链接
https://github.com/redis/jedis/wiki/Getting-started