Jedis

说明

  • jedis:redis官方推荐的操作redis的原生api,是一个jar包。其方法与redis命令集基本一致。要学习使用jedis,学会redis的命令集便可
  • Redis基础教程:http://shuiliumu.eu.org/index.php/archives/132/
  • Redis中文网:https://www.redis.net.cn

1. 依赖

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

2. 基本使用

  • 说明:开启redis服务器,在javaWeb项目中连接,操作redis
Jedis jedis = new Jedis("127.0.0.1",6379); //连接redis
jedis.close(); // 关闭连接
jrfid.xxx   // jedis其他方法与命令终端中的命令相同

Transaction multi = jedis.multi(); // 开启事务
 
multi.xxxx // multi的方法与命令终端中的命令相同,只不过这些命令是以事务方式执行
multi.exec(); //执行事务
multi.discard(); //放弃事务

Jedis

3. Redis连接池配置

  • 注意:以下为spring环境下的配置方式

(1)单点连接池配置

  • 说明:只连接一台redis服务器时,可使用的配置方式

  • 文件名:RedisPoolConfig.java

@Configuration
public class RedisPoolConfig {
     /**
     * 说明:获取jedis对象方式
     *      @Autowird
     *      JedisPool jedisPool;
     *      Jedis jedis = jedisPool.getResource();
     *
     **/
    @Bean
    public JedisPool createJedisPool(){
        
		/******** 配置连接池相关信息 *************/
        // 连接池配置对象,封装了连接池相关配置
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(8); // redis总连接数 默认 8
        jedisPoolConfig.setMaxIdle(8); // 连接池中最大空闲连接 默认 8

        String host = "127.0.0.1";
        Integer port = 6379;
        /******** 创建连接池 *************/
        JedisPool jedisPool = new JedisPool(jedisPoolConfig,host,port);
        return jedisPool;

    }
}

(2)哨兵连接池配置

  • 说明:配置哨兵模式的连接池

1)Redis配置

《1》redis服务器配置
  • 复制多个redis.conf文件,分别给不同Redis服务器使用

  • 修改配置文件中

# win中不支持,不用配
daemonize yes 
# 修改。win中不用配 不与其他服务端口配置相同便可 
pidfile xxx.pid 
# 修改服务端口号 不与其他服务端口配置相同便可 
port xxx 
# 修改rdb文件名 不与其他服务端口配置相同便可 
dbfilename xxx.rdb 
# 修改日志文件名 不与其他服务端口配置相同便可 
logfile “xxx.log” 

# 配置主节点的ip和端口,配置完后,那么使用该配置文件开启的redis服务,变为从节点
replicaof masterip masterport 
# 配置连接主节点密码,若主节点登录要密码,那么将密码配置上。否则从节点无法无法通过验证,连接主节点
masterauth masterpassword 
《2》监控服务配置
  • 新建监控配置文件sentinel.conf并进行配置(若是多哨兵模式,则新建多个文件,分别进行配置)
Linux配置
# Example sentinel.conf
 
# 哨兵sentinel实例运行的端口 默认26379
port 26379
 
# 哨兵sentinel的工作目录
dir /tmp
 
# 哨兵sentinel监控的redis主节点的 ip port 
# master-name  可以自己命名的主节点名字 只能由字母A-z、数字0-9 、这三个字符".-_"组成。
# quorum 当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 客观上认为主节点失联了
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor mymaster 127.0.0.1 6379 1
 
# 当在Redis实例中开启了requirepass foobared 授权密码 这样所有连接Redis实例的客户端都要提供密码
# 设置哨兵sentinel 连接主从的密码 注意必须为主从设置一样的验证密码
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster MySUPER--secret-0123passw0rd
 
 
# 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒
# sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds mymaster 30000
 
# 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,
# 这个数字越小,完成failover所需的时间就越长,
# 但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。
# 可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
# sentinel parallel-syncs <master-name> <numslaves>
sentinel parallel-syncs mymaster 1
 
 
 
# 故障转移的超时时间 failover-timeout 可以用在以下这些方面: 
#1. 同一个sentinel对同一个master两次failover之间的间隔时间。
#2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
#3.当想要取消一个正在进行的failover所需要的时间。  
#4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了
# 默认三分钟
# sentinel failover-timeout <master-name> <milliseconds>
sentinel failover-timeout mymaster 180000
 
# SCRIPTS EXECUTION
 
#配置当某一事件发生时所需要执行的脚本,可以通过脚本来通知管理员,例如当系统运行不正常时发邮件通知相关人员。
#对于脚本的运行结果有以下规则:
#若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10
#若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行。
#如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同。
#一个脚本的最大执行时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,之后重新执行。
 
#通知型脚本:当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本,
#这时这个脚本应该通过邮件,SMS等方式去通知系统管理员关于系统不正常运行的信息。调用该脚本时,将传给脚本两个参数,
#一个是事件的类型,
#一个是事件的描述。
#如果sentinel.conf配置文件中配置了这个脚本路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则sentinel无法正常启动成功。
#通知脚本
# sentinel notification-script <master-name> <script-path>
  sentinel notification-script mymaster /var/redis/notify.sh
 
# 客户端重新配置主节点参数脚本
# 当一个master由于failover而发生改变时,这个脚本将会被调用,通知相关的客户端关于master地址已经发生改变的信息。
# 以下参数将会在调用脚本时传给脚本:
# <master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>
# 目前<state>总是“failover”,
# <role>是“leader”或者“observer”中的一个。 
# 参数 from-ip, from-port, to-ip, to-port是用来和旧的master和新的master(即旧的slave)通信的
# 这个脚本应该是通用的,能被多次调用,不是针对性的。
# sentinel client-reconfig-script <master-name> <script-path>
sentinel client-reconfig-script mymaster /var/redis/reconfig.sh

Win配置
# 多哨兵模式,修改服务端口号 不与其他哨兵进程相同便可 
port 26379
# 多哨兵模式,修改myid 不与其他哨兵进程相同便可(不配也可,会自动生成)
sentinel myid 36722fcfb2a09c023aa59366290b3fe39526cac4 
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 127.0.0.1 6381 1
sentinel down-after-milliseconds mymaster 5000
《3》服务开启
redis-sentinel 哨兵模式监控配置文件名.conf  # linux中启动哨兵模式
redis-server.exe 哨兵模式监控配置文件名.conf --sentinel # win中开启哨兵模式
redis-server [配置文件] #开启所有redis服务

2)配置类

@Configuration
public class RedisPoolConfig {
 /**
     * 说明:获取jedis对象方式
     *      @Autowird
     *      JedisSentinelPool jedisSentinelPool;
     *      Jedis jedis = jedisSentinelPool.getResource();
     *
     **/
    @Bean
    public JedisSentinelPool createJedisSentinelPool(){

        /******** 配置连接池相关信息 *************/
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(10);
        jedisPoolConfig.setMaxIdle(5);
        jedisPoolConfig.setMinIdle(5);
        /******** 配置redis服务器信息封装 *************/
        // String格式: 服务器host:哨兵port  表示
        //  "127.0.0.1:26379" 表示 127.0.0.1 地址中所有redis服务器,均被使用26379端口的哨兵监控
        Set<String> sentinels = new HashSet<String>(Arrays.asList(
                "127.0.0.1:26379",
                "127.0.0.1:26380",
                "127.0.0.2:26379",
                "127.0.0.2:26380"

        ));

        // 主节点名字名称
        String masterName = "mymaster";
        /******** 创建连接池 *************/
        JedisSentinelPool jedisSentinelPool = new JedisSentinelPool(masterName, sentinels, jedisPoolConfig);

        return  jedisSentinelPool;
    }
}

3)测试

@Autowired
JedisSentinelPool jedisSentinelPool;
@Test
void test4() {

    Jedis resource = jedisSentinelPool.getResource();
    resource.set("key2","HelloFromSentinelPool");

    String result = resource.get("key2");

    System.out.println(result);
}

(3)集群连接池配置(待完善)

  • 说明:多redis服务器成集群,为每个服务器配置一个连接池。每个redis服务器均可进行读写操作。JedisCluster对象通过随机抽取方式选取池连接
@Configuration
public class RedisPoolConfig {    

	/**
     * 说明:获取JedisCluster对象方式(其继承有操作redis七大数据类型的所有方法)
     *      @Autowird
     *      JedisCluster jedisCluster;
     *      jedisCluster.xxxxx
     *		
     **/
    @Bean
    public JedisCluster createJedisCluster(){

        /******** 配置连接池相关信息 *************/
        // 连接池配置对象,封装了连接池相关配置
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(8); // redis总连接数 默认 8
        jedisPoolConfig.setMaxIdle(8); // 连接池中最大空闲连接 默认 8

        /******** 配置redis客户端相关信息 *************/
        String hostA = "168.192.0.1";
        Integer portA = 6379;
        // Host,Port封装对象
        HostAndPort hostAndPortA = new HostAndPort(hostA,portA);

        String hostB = "168.192.0.2";
        Integer portB = 6379;
        HostAndPort hostAndPortB = new HostAndPort(hostB,portB);



        /******** 封装HostAndPort *************/
        Set<HostAndPort> set  = new  HashSet<HostAndPort>();
        set.add(hostAndPortA);
        set.add(hostAndPortB);


        /******** 创建连接池 *************/
        JedisCluster jedisCluster = new JedisCluster(set,jedisPoolConfig);
        return jedisCluster;

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值