Redis连接测试代码及相关问题

2024-06-02 18:08

本文主要是介绍Redis连接测试代码及相关问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

pom.xml

<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version>
</dependency>

简单测试

public static void main(String[] args) {Jedis jedis = new Jedis("192.168.1.213");jedis.set("foo", "bar");String value = jedis.get("foo");System.out.println(value);
}

如果用这种方法连集群,会看到如下的错误

Exception in thread "main" redis.clients.jedis.exceptions.JedisMovedDataException: MOVED 12182 192.168.1.214:6382

Redis集群测试

public static void main(String[] args) {Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();// Jedis集群将尝试自动发现集群节点jedisClusterNodes.add(new HostAndPort("192.168.1.214", 6379));// jedisClusterNodes.add(new HostAndPort("192.168.1.214", 6380));// jedisClusterNodes.add(new HostAndPort("192.168.1.214", 6381));JedisCluster jc = new JedisCluster(jedisClusterNodes);jc.set("foo", "bar");jc.set("foo1", "bar1");jc.set("foo2", "bar2");jc.set("foo3", "bar3");jc.set("foo4", "bar4");jc.set("foo5", "bar5");jc.set("foo6", "bar6");System.out.println(jc.get("foo"));System.out.println(jc.get("foo1"));System.out.println(jc.get("foo2"));System.out.println(jc.get("foo3"));System.out.println(jc.get("foo4"));System.out.println(jc.get("foo5"));System.out.println(jc.get("foo6"));System.out.println("===================");Map<String, JedisPool> map = jc.getClusterNodes();for (Map.Entry<String, JedisPool> e : map.entrySet()) {System.out.println(e.getKey());System.out.println("===================");}}

运行时报错:

Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the poolat redis.clients.util.Pool.getResource(Pool.java:53)at redis.clients.jedis.JedisPool.getResource(JedisPool.java:226)at redis.clients.jedis.JedisSlotBasedConnectionHandler.getConnectionFromSlot(JedisSlotBasedConnectionHandler.java:66)
...
...

因为在之前创建创建集群时使用的IP是127.0.0.1,当返回(error) MOVED 10439 127.0.0.1:6381时,系统尝试连接本地的端口,然后连不上失败了

修改Redis配置文件,绑定到正确的IP上,然后重新创建集群指定具体的IP地址:

./redis-trib.rb create --replicas 1 192.168.1.214:6379 192.168.1.214:6381 192.168.1.214:6382 192.168.1.214:6383 192.168.1.214:6384 192.168.1.214:6385

#杀掉redis进程
ps -ef | grep redis | awk '{print $2}' | xargs kill#删除
rm -f /data/redis/d63*/dump.rdb
rm -f /data/redis/d63*/nodes.conf#批量替换
sed -i 's/192.168.1.214/0.0.0.0/' */redis.conf

Jedis客户端分片测试

分片使用一种称为“一致哈希”的技术,并根据一些散列算法(md5和murmur,后者不太标准,但速度更快)在一组redis服务器上同等地分配key值。这样的节点被称为“分片”。优点是每个分片只会占总内存的 1/n(对于n是分片数量)。

先配置三个独立的redis服务

直连接方式

public static void main(String[] args) {List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();JedisShardInfo si = new JedisShardInfo("192.168.1.213", 6380);shards.add(si);si = new JedisShardInfo("192.168.1.213", 6381);shards.add(si);si = new JedisShardInfo("192.168.1.213", 6382);shards.add(si);// 直接连接ShardedJedis jedis = new ShardedJedis(shards);jedis.set("a", "foo");jedis.set("a1", "foo1");jedis.set("a2", "foo2");jedis.set("a3", "foo3");jedis.set("a4", "foo4");System.out.println(jedis.get("a"));System.out.println(jedis.get("a1"));System.out.println(jedis.get("a2"));System.out.println(jedis.get("a3"));System.out.println(jedis.get("a4"));ShardInfo<?> sinfo = jedis.getShardInfo("a");System.out.println(sinfo);jedis.disconnect();jedis.close();
}

连接池方式

public static void main(String[] args) {List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();JedisShardInfo si = new JedisShardInfo("192.168.1.213", 6380);shards.add(si);si = new JedisShardInfo("192.168.1.213", 6381);shards.add(si);si = new JedisShardInfo("192.168.1.213", 6382);shards.add(si);// 池连接JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();ShardedJedisPool pool = new ShardedJedisPool(jedisPoolConfig, shards);try (ShardedJedis jedis = pool.getResource()) {jedis.set("x", "foo");jedis.set("x1", "foo1");jedis.set("x2", "foo2");}try (ShardedJedis jedis2 = pool.getResource()) {jedis2.set("y", "bar");jedis2.set("y1", "bar1");jedis2.set("y2", "bar2");}try (ShardedJedis jedis = pool.getResource()) {System.out.println(jedis.get("x"));System.out.println(jedis.get("x1"));System.out.println(jedis.get("x2"));}try (ShardedJedis jedis2 = pool.getResource()) {System.out.println(jedis2.get("y"));System.out.println(jedis2.get("y1"));System.out.println(jedis2.get("y2"));}pool.close();
}

这篇关于Redis连接测试代码及相关问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1024708

相关文章

linux生产者,消费者问题

pthread_cond_wait() :用于阻塞当前线程,等待别的线程使用pthread_cond_signal()或pthread_cond_broadcast来唤醒它。 pthread_cond_wait() 必须与pthread_mutex 配套使用。pthread_cond_wait()函数一进入wait状态就会自动release mutex。当其他线程通过pthread

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

RecastNavigation之Poly相关类

Poly分成正常的Poly 和 OffMeshPoly。 正常的Poly 又分成 原始的Poly 和 Detail化的Poly,本文介绍这两种。 Poly的边分成三种类型: 1. 正常边:有tile内部的poly与之相邻 2.border边:没有poly与之相邻 3.Portal边:与之相邻的是外部tile的poly   由firstLink索引 得到第一个连接的Poly  通

2024.6.24 IDEA中文乱码问题(服务器 控制台 TOMcat)实测已解决

1.问题产生原因: 1.文件编码不一致:如果文件的编码方式与IDEA设置的编码方式不一致,就会产生乱码。确保文件和IDEA使用相同的编码,通常是UTF-8。2.IDEA设置问题:检查IDEA的全局编码设置和项目编码设置是否正确。3.终端或控制台编码问题:如果你在终端或控制台看到乱码,可能是终端的编码设置问题。确保终端使用的是支持你的文件的编码方式。 2.解决方案: 1.File -> S

【Altium】查找PCB上未连接的网络

【更多软件使用问题请点击亿道电子官方网站】 1、文档目标: PCB设计后期检查中找出没有连接的网络 应用场景:PCB设计后期,需要检查是否所有网络都已连接布线。虽然未连接的网络会有飞线显示,但是由于布线后期整板布线密度较高,虚连,断连的网络用肉眼难以轻易发现。用DRC检查也可以找出未连接的网络,如果PCB中DRC问题较多,查找起来就不是很方便。使用PCB Filter面板来达成目的相比DRC

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

vcpkg安装opencv中的特殊问题记录(无法找到opencv_corexd.dll)

我是按照网上的vcpkg安装opencv方法进行的(比如这篇:从0开始在visual studio上安装opencv(超详细,针对小白)),但是中间出现了一些别人没有遇到的问题,虽然原因没有找到,但是本人给出一些暂时的解决办法: 问题1: 我在安装库命令行使用的是 .\vcpkg.exe install opencv 我的电脑是x64,vcpkg在这条命令后默认下载的也是opencv2:x6

问题-windows-VPN不正确关闭导致网页打不开

为什么会发生这类事情呢? 主要原因是关机之前vpn没有关掉导致的。 至于为什么没关掉vpn会导致网页打不开,我猜测是因为vpn建立的链接没被更改。 正确关掉vpn的时候,会把ip链接断掉,如果你不正确关掉,ip链接没有断掉,此时你vpn又是没启动的,没有域名解析,所以就打不开网站。 你可以在打不开网页的时候,把vpn打开,你会发现网络又可以登录了。 方法一 注意:方法一虽然方便,但是可能会有

Windows/macOS/Linux 安装 Redis 和 Redis Desktop Manager 可视化工具

本文所有安装都在macOS High Sierra 10.13.4进行,Windows安装相对容易些,Linux安装与macOS类似,文中会做区分讲解 1. Redis安装 1.下载Redis https://redis.io/download 把下载的源码更名为redis-4.0.9-source,我喜欢跟maven、Tomcat放在一起,就放到/Users/zhan/Documents

vue同页面多路由懒加载-及可能存在问题的解决方式

先上图,再解释 图一是多路由页面,图二是路由文件。从图一可以看出每个router-view对应的name都不一样。从图二可以看出层路由对应的组件加载方式要跟图一中的name相对应,并且图二的路由层在跟图一对应的页面中要加上components层,多一个s结尾,里面的的方法名就是图一路由的name值,里面还可以照样用懒加载的方式。 页面上其他的路由在路由文件中也跟图二是一样的写法。 附送可能存在