zoukankan      html  css  js  c++  java
  • 【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"));
            
    
        }
    }
  • 相关阅读:
    Unity 5.3 Assetbundle热更资源
    自定义协同程序:CustomYieldInstruction
    C# 温故而知新: 线程篇(四)
    C# 温故而知新: 线程篇(三)
    C# 温故而知新: 线程篇(二)
    c# 温故而知新: 线程篇(一)
    C# 温故而知新:Stream篇(六)
    C# 温故而知新:Stream篇(七)
    C# 温故而知新:Stream篇(四)
    Redis高级数据类型
  • 原文地址:https://www.cnblogs.com/frankruby/p/14831741.html
Copyright © 2011-2022 走看看