java连接redis
单机连接
-
pom 文件
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
-
java 代码
// 连接池配置文件 JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxTotal(20); jedisPoolConfig.setMaxIdle(10); jedisPoolConfig.setMinIdle(5); // 创建连接池 , 配置文件,ip, 端口, 超时, 密码 JedisPool jedisPool = new JedisPool(jedisPoolConfig, "192.168.150.100", 6379, 3000, null); Jedis jedis = null; try { // 获取连接 jedis = jedisPool.getResource(); System.out.println(jedis.set("jamin", "666")); System.out.println(jedis.get("jamin")); } catch (Exception e) { e.printStackTrace();
}
哨兵架构连接
- 启动一主二从, 三个哨兵 [谨记最好一次成功, 至少哨兵总数要对, 不然很麻烦, 可尝试删除 id]
- java 代码 (用来延时故障转移, 程序启动,kill 6379 的进程 切记 sentinel 的监听 master 的 ip 为局域网 ip 127.0.0.1 是连接不上的)
// 连接池配置 JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxTotal(2000); jedisPoolConfig.setMaxIdle(1000); jedisPoolConfig.setMinIdle(5); //master 名称 String masterName = "mymaster"; // 哨兵 HashSet<String> hashSet = new HashSet<>(); hashSet.add(new HostAndPort("192.168.150.100", 26379).toString()); hashSet.add(new HostAndPort("192.168.150.100", 26380).toString()); hashSet.add(new HostAndPort("192.168.150.100", 26381).toString()); // 创建连接池 JedisSentinelPool jedisSentinelPool = new JedisSentinelPool(masterName, hashSet, jedisPoolConfig, 3000, null); Jedis jedis = null; int i = 1; while (true) { try { jedis = jedisSentinelPool.getResource(); jedis.set("sentinel" + i, "sentinel" + i); System.out.println("sentinel" + i); i++; Thread.sleep(3000); } catch (Exception e) { e.printStackTrace(); } } }
- 在哨兵的日志中可以看到判断下线以及投票, 设置新的 master 的一个过程,java 客户端当 6379 被干掉持续请求, 但是连接被拒绝, 直到新的 master 被分配处理请求新的 master
- 在哨兵的日志中可以看到判断下线以及投票, 设置新的 master 的一个过程,java 客户端当 6379 被干掉持续请求, 但是连接被拒绝, 直到新的 master 被分配处理请求新的 master
集群架构
```java
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMinIdle(5);
// 最大空闲数量
jedisPoolConfig.setMaxIdle(10);
jedisPoolConfig.setMaxTotal(20);
// 创建集群节点
HashSet<HostAndPort> jedisClusterNode = new HashSet<>();
jedisClusterNode.add(new HostAndPort("192.168.150.101", 8001));
jedisClusterNode.add(new HostAndPort("192.168.150.102", 8002));
jedisClusterNode.add(new HostAndPort("192.168.150.103", 8003));
jedisClusterNode.add(new HostAndPort("192.168.150.101", 8004));
jedisClusterNode.add(new HostAndPort("192.168.150.102", 8005));
jedisClusterNode.add(new HostAndPort("192.168.150.103", 8006));
JedisCluster cluster = null;
try {
// 第一个 5000 连接超时时间 第二个 5000 等待返回超时时间 10 最大尝试连接次数 jamin 密码
cluster = new JedisCluster(jedisClusterNode, 5000, 5000, 10, "jamin", jedisPoolConfig);
System.out.println(cluster.set("test11", "111"));
System.out.println(cluster.get("test11"));
} catch (Exception e) {
e.printStackTrace();
}
}
</code></pre>
<h6 id="使用springboot进行连接redis">使用springboot进行连接redis<button class="cnblogs-toc-button" title="显示目录导航" aria-expanded="false"></button></h6>
<ol>
<li>连接单机
<ol>
<li>pom.xml<pre class="highlighter-hljs" highlighted="true"><code class="language-xml highlighter-hljs hljs"><span class="hljs-tag"><<span class="hljs-name">dependency</span>></span>
<span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-starter-data-redis<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span>
<span class="hljs-tag"></<span class="hljs-name">dependency</span>></span>
</code></pre>
</li>
<li>配置文件</li>
</ol>
<pre class="highlighter-hljs" highlighted="true"><code class="language-yml highlighter-hljs hljs language-yaml"><span class="hljs-attr">spring:</span>
<span class="hljs-attr">redis:</span>
<span class="hljs-comment">#单机</span>
<span class="hljs-comment"># host: 192.168.150.100</span>
<span class="hljs-comment"># port: 6380</span>
<span class="hljs-comment"># 哨兵</span>
<span class="hljs-comment"># sentinel:</span>
<span class="hljs-comment"># master: mymaster</span>
<span class="hljs-comment"># nodes: 192.168.150.100:26379,192.168.150.100:26380,192.168.150.100:26381</span>
<span class="hljs-comment"># 集群</span>
<span class="hljs-attr">cluster:</span>
<span class="hljs-attr">nodes:</span> <span class="hljs-number">192.168</span><span class="hljs-number">.150</span><span class="hljs-number">.101</span><span class="hljs-string">:8001,192.168.150.101:8002,192.168.150.102:8003,192.168.150.102:8004,192.168.150.103:8005,192.168.150.103:8006</span>
<span class="hljs-comment"># 密码</span>
<span class="hljs-attr">password:</span> <span class="hljs-string">jamin</span>
</code></pre>
<ol start="3">
<li>java代码<pre class="highlighter-hljs" highlighted="true"><code class="language-java highlighter-hljs hljs"><span class="hljs-keyword">package</span> cn.jaminye.springbootredissentinel.test;
<span class="hljs-keyword">import</span> org.springframework.beans.factory.annotation.Autowired;
<span class="hljs-keyword">import</span> org.springframework.boot.test.context.SpringBootTest;
<span class="hljs-keyword">import</span> org.springframework.data.redis.core.RedisTemplate;
<span class="hljs-keyword">import</span> org.springframework.data.redis.core.StringRedisTemplate;
<span class="hljs-comment">/**
* <span class="hljs-doctag">@author</span> Jamin
* <span class="hljs-doctag">@date</span> 2020/8/1 12:21
* 测试springboot连接redis
*/</span>
<span class="hljs-meta">@SpringBootTest</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title class_">Test</span> {
<span class="hljs-meta">@Autowired</span>
RedisTemplate redisTemplate;
<span class="hljs-meta">@Autowired</span>
StringRedisTemplate stringRedisTemplate;
<span class="hljs-meta">@org</span>.junit.jupiter.api.Test
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">test</span><span class="hljs-params">()</span> {
<span class="hljs-comment">//set值 redisTemplate使用的是jdk的序列化策略 存入数据库的是不可读的例如"\xac\xed\x00\x05t\x00\x03key"也只能使用 redisTemplate取出</span>
redisTemplate.opsForValue().set(<span class="hljs-string">"key"</span>, <span class="hljs-string">"value"</span>);
<span class="hljs-comment">// stringRedisTemplate使用的是String的redis序列化策略 是易读的 存入数据库的是可读 也只能使用 stringRedisTemplate取出</span>
stringRedisTemplate.opsForValue().set(<span class="hljs-string">"key"</span>, <span class="hljs-string">"value"</span>);
<span class="hljs-comment">//get值</span>
<span class="hljs-type">String</span> <span class="hljs-variable">value</span> <span class="hljs-operator">=</span> String.valueOf(redisTemplate.opsForValue().get(<span class="hljs-string">"key"</span>));
<span class="hljs-type">String</span> <span class="hljs-variable">values</span> <span class="hljs-operator">=</span> stringRedisTemplate.opsForValue().get(<span class="hljs-string">"key"</span>);
System.out.println(value);
System.out.println(values);
}
}
</code></pre>
</li>
</ol>
</li>
</ol>