java连接redis

单机连接
  1. pom 文件

     <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.9.0</version>
    </dependency>
    
  2. 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();
    
    }
    

哨兵架构连接
  1. 启动一主二从, 三个哨兵 [谨记最好一次成功, 至少哨兵总数要对, 不然很麻烦, 可尝试删除 id]
  2. 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();
        }
    }
    }
    
    1. 在哨兵的日志中可以看到判断下线以及投票, 设置新的 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">&lt;<span class="hljs-name">dependency</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.springframework.boot<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>spring-boot-starter-data-redis<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</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>