redis集群、哨兵模式

1. 正文

1. redis的集群的其他模式
    哨兵模式:
    去中心化集群

2.Java连接redis.

3.springboot整合redis

4.redis的应用场景: 缓存。

2. 哨兵模式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xSO3wNif-1618973134020)(assets\1618381673848.png)]

修改sentinel.conf的配置

# 127.0.0.1表示redis主节点的ip 
# 6379 表示主节点的端口号
# 2 表示有多少个哨兵选取redis从节点后,该从节点可以当选为主节点。
sentinel monitor mymaster 127.0.0.1 7001 1

启动哨兵

redis-sentinel  sentinel.conf

3. 去中心化集群。

哨兵的缺点

1. 没有解决单节点的问题。
2. 持久化文件始终在一个服务器上。

去中心化

port 8001
bind 0.0.0.0
daemonize yes
appendonly yes
# 开启集群
cluster-enabled yes             833行
# 集群的配置文件,该文件自动生成   
cluster-config-file nodes-8001.conf  841行
# 集群的超时时间
cluster-node-timeout 5000         847行

启动所有的redis

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bH2Q0p0m-1618973134022)(assets\1618387311747.png)]

为主节点分配槽以及分配从节点

cluster-replica:每个主节点跟随的从节点的个数

redis-cli --cluster create --cluster-replicas 1 127.0.0.1:8001 127.0.0.1:8002 127.0.0.1:8003  127.0.0.1:8004  127.0.0.1:8005  127.0.0.1:8006

必须保证aof开启,保证redis中没有数据。

客户端访问:

redis-cli -c -h 127.0.0.1 -p 8001

4.Java连接redis.—jedis

(1)依赖

  <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.3.0</version>
        </dependency>
    </dependencies>

(2)操作

package com.ykq.test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;

import java.util.Set;

/**
 * @Author 闫克起
 * @Date 2021/4/14 16:49
 * @Version 1.0
 */
public class TestJedis {
    public static void main(String[] args) {
        Jedis jedis=new Jedis("192.168.213.188",6379);//必须运行远程连接 必须防火墙放行该端口号
        //关于字符串
        jedis.set("k1","v1");
        jedis.set("k8","18");
        jedis.mset("k2","v2","k3","v3","k4","v4");
        jedis.setnx("k1","12");
        jedis.decr("k8");

        //操作key
        Set<String> keys = jedis.keys("*");
        System.out.println("所有的key:"+keys);
        jedis.del("k1");
        jedis.expire("k2",60);
        jedis.ttl("k2");

    }
}

使用jedis连接池

package com.ykq.test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * @Author 闫克起
 * @Date 2021/4/14 16:59
 * @Version 1.0
 */
public class TestPoolJedis {
    public static void main(String[] args) {
        //连接池的配置
        JedisPoolConfig config=new JedisPoolConfig();
        config.setMaxTotal(100);//设置连接池的最大连接数
        config.setMaxIdle(10);//设置最大空闲的个数
        config.setTestOnBorrow(true);//在从连接池这种获取连接对象前是否测试该对象可以。

        //创建连接池对象
        JedisPool jedisPool=new JedisPool(config,"192.168.213.188",6379);

        //获取jedis对象
        Jedis jedis = jedisPool.getResource();

        System.out.println(jedis.get("k3"));

        jedis.close();//释放资源


    }
}

5. springboot整合redis

springboot为操作redis准备了两个工具类StringRedisTemplate和RedisTemplate。StringRedisTemplate是RedisTemplate的子类。StringRedisTemplate它的泛型key和value都是String类型。 RedisTemplate它的key value的泛型是Object。

步骤:

(1)引入依赖

         <!---->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

(2) 配置


spring.redis.host=192.168.213.188
spring.redis.port=6379
spring.redis.jedis.pool.max-active=20
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.min-idle=0
spring.redis.jedis.pool.max-wait=20000

(3)测试

package com.ykq.springbootredis01;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;

import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.TimeUnit;

@SpringBootTest
class SpringbootRedis01ApplicationTests {

    @Autowired
    private StringRedisTemplate redisTemplate;
    @Test
    void contextLoads() {
        //操作key
        Set<String> keys = redisTemplate.keys("*");
        System.out.println(keys);

        redisTemplate.delete("k8");
        System.out.println(redisTemplate.getExpire("k3"));

        redisTemplate.expire("k3", 60, TimeUnit.SECONDS);

        System.out.println(redisTemplate.getExpire("k3"));

    }

    @Test
    public void testString(){
        ValueOperations<String, String> forValue = redisTemplate.opsForValue();//操作字符串类型
        forValue.set("k1","v1");
        System.out.println(forValue.get("k1"));

        Map<String,String> map=new HashMap<>();
        map.put("k9","v9");
        map.put("k10","v10");
        forValue.multiSet(map);

        List<String> keys=new ArrayList<>();
        keys.add("k1");
        keys.add("k2");
        keys.add("k4");
        List<String> strings = forValue.multiGet(keys);
        System.out.println(strings);

        System.out.println(forValue.setIfAbsent("k2", "v2"));

    }

}

ew ArrayList<>();
keys.add(“k1”);
keys.add(“k2”);
keys.add(“k4”);
List strings = forValue.multiGet(keys);
System.out.println(strings);

    System.out.println(forValue.setIfAbsent("k2", "v2"));

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值