【Redis Jedis联通 04】

一、jedis依赖的jar包:jedis,commons-pool

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

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.9.0</version>
        </dependency>

二、连接redis

Jedis jedis = new Jedis("172.16.203.152",6379);

测试连接时,容易报“连接拒绝/连接超时”的错误

解决办法:

修改redis.conf,修改如下内容为:

bind 127.0.0.1  改为  0.0.0.0

并关闭防火墙

systemctl stop firewalld.service   //停止firewall

systemctl disable firewalld.service #禁止firewall开机启动

三、常用API

其实就是五大类型+key

//        1、String类型
        jedis.set("k1","v1");
        jedis.set("k2","v2");
        jedis.set("k3","v3");

        //单独获取一个key
        System.out.println(jedis.get("k1"));
        //获取多个key
        Set<String> keys = jedis.keys("*");
        Iterator<String> it = keys.iterator();
        while (it.hasNext()){
            System.out.print(it.next()+" ");
        }
        //验证一个key是否存在
        System.out.println(jedis.exists("k2"));
        //设置key的有效时间
        jedis.expire("k1",10);
        System.out.println(jedis.ttl("k1"));
        //设置多个key和value
        jedis.mset("k4","v4","k5","v5");
        System.out.println(jedis.keys("*"));
        System.out.println(jedis.mget("k2","k3","k4","k5"));

//        2、list类型
        jedis.lpush("list1","l1","l2","l3");
        jedis.rpush("list2","rl1","rl2","rl3");
        List<String> list1 = jedis.lrange("list1", 0, -1);
        for(String element: list1){
            System.out.print(element+",");
        }

上面的代码只写了String类型和list类型,set、hash、zset类型基本写法一直

四、事务提交

package com.wufq.redis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;

/**
 * @Description  事务
 * @Author wufq
 * @Version
 * @Date 2021/5/31 14:25
 */
public class TranctionTest {
    public static void main(String[] args){
        TranctionTest test = new TranctionTest();
        Boolean retValue=test.transMonth();
        System.out.println("retValue --------> "+retValue);

    }

    /*
        * 通俗点讲,watch命令就是标记一个键,如果标记了一个键, 在提交事务前如果该键被别人修改过,那事务就会失败,这种情况通常可以在程序中
        * 重新再尝试一次。
        * 首先标记了键balance,然后检查余额是否足够,不足就取消标记,并不做扣减; 足够的话,就启动事务进行更新操作,
        * 如果在此期间键balance被其它人修改, 那在提交事务(执行exec)时就会报错, 程序中通常可以捕获这类错误再重新执行一次,直到成功。
    * */

    private Boolean transMonth() {
        Jedis jedis = new Jedis("172.16.203.152", 6379);

        int balabce; //可用余额
        int detb; //欠额
        int amtToSubtract =10;//实刷额度


        jedis.set("balance","100");
        jedis.set("detb","0");

        //监控key
        jedis.watch("balance");
        balabce = Integer.parseInt(jedis.get("balance"));
        detb = Integer.parseInt(jedis.get("detb"));

            if(balabce<amtToSubtract){
                //取消key的监控
                jedis.unwatch();
                System.out.println("modify...");
                return false;
            }else {
                System.out.println("tranction start--------->");
                //开启事务
                Transaction trans = jedis.multi();
                //decrBy按照设置数字成倍相减,incrBy按照设置的数字成倍相加
                trans.decrBy("balance",amtToSubtract);
                trans.incrBy("detb",amtToSubtract);
                //执行事务
                trans.exec();

                System.out.println("balance ------> "+balabce);
                System.out.println("debt ------> "+detb);
                return true;
            }
    }
}

五、主从复制

设置主从命令:SLAVEOF  主机ip  主机port

取消准备:SLAVEOF  no one

package com.wufq.redis;

import redis.clients.jedis.Jedis;

/**
 * @Description 主从复制
 * @Author wufq
 * @Version
 * @Date 2021/5/31 15:16
 */
public class SlaveOfTest {
    public static void main(String[] args){
        Jedis jedis_M = new Jedis("172.16.203.152", 6379);
        Jedis jedis_S1 = new Jedis("172.16.203.152", 6380);
        Jedis jedis_S2 = new Jedis("172.16.203.152", 6381);

        jedis_S1.slaveof("172.16.203.152",6379);
        jedis_S2.slaveof("172.16.203.152",6379);

        jedis_M.set("test","testNu");

        System.out.println(jedis_S1.get("test")+"::"+jedis_S2.get("test"));
        

    }
}
原文地址:https://www.cnblogs.com/frankruby/p/14831741.html