• RedisEclipse


    1.Eclipse配置

    2.HelloWorld

    import redis.clients.jedis.Jedis;

     

    public class TestPing {

    public static void main(String[] args) {

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

    System.out.println(jedis.ping());

    }

    }

    3.Jedis常见操作

    import java.util.Set;

     

    import redis.clients.jedis.Jedis;

     

    public class TestAPI {

    public static void main(String[] args) {

     

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

    jedis.set("k1", "v1");

    jedis.set("k2", "v2");

    jedis.set("k3", "v3");

     

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

    Set<String> sets = jedis.keys("*");

    System.out.println(sets.toString());

    System.out.println(sets.size());

    }

    }

    4.Redis主从复制

    import redis.clients.jedis.Jedis;

     

    public class TestMS {

     

    public static void main(String[] args) {

    Jedis jedisM = new Jedis("127.0.0.1",6379);

    Jedis jedisS = new Jedis("127.0.0.1",6380);

     

    jedisS.slaveof("127.0.0.1",6379);

    jedisM.set("k1", "v1");

    System.out.println(jedisS.get("k1"));

     

    }

    }

    5.Redis事务

    import javax.swing.plaf.basic.BasicTreeUI.TreeCancelEditingAction;

     

    import redis.clients.jedis.Jedis;

    import redis.clients.jedis.Transaction;

     

    public class TestTX {

     

     public boolean transMethod() throws InterruptedException {

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

        int balance;// 可用余额

        int debt;// 欠额

        int amtToSubtract = 10;// 实刷额度

     

        jedis.watch("balance");

    //     jedis.set("balance","5");//此句不该出现,讲课方便。模拟其他程序已经修改了该条目

        Thread.sleep(7000);

        balance = Integer.parseInt(jedis.get("balance"));

        if (balance < amtToSubtract) {

          jedis.unwatch();

          System.out.println("modify");

          return false;

        } else {

          System.out.println("***********transaction");

          Transaction transaction = jedis.multi();

          transaction.decrBy("balance", amtToSubtract);

          transaction.incrBy("debt", amtToSubtract);

          transaction.exec();

          balance = Integer.parseInt(jedis.get("balance"));

          debt = Integer.parseInt(jedis.get("debt"));

     

          System.out.println("*******" + balance);

          System.out.println("*******" + debt);

          return true;

        }

     }

     

     /**

      * 通俗点讲,watch命令就是标记一个键,如果标记了一个键, 在提交事务前如果该键被别人修改过,那事务就会失败,这种情况通常可以在程序中

      * 重新再尝试一次。

      * 首先标记了键balance,然后检查余额是否足够,不足就取消标记,并不做扣减; 足够的话,就启动事务进行更新操作,

      * 如果在此期间键balance被其它人修改, 那在提交事务(执行exec)时就会报错, 程序中通常可以捕获这类错误再重新执行一次,直到成功。

    * @throws InterruptedException

      */

     public static void main(String[] args) throws InterruptedException {

     TestTX test = new TestTX();

        boolean retValue = test.transMethod();

        System.out.println("main retValue-------: " + retValue);

     }

    }

     

    6.Redis线程池

    import redis.clients.jedis.Jedis;

    import redis.clients.jedis.JedisPool;

    import redis.clients.jedis.JedisPoolConfig;

     

    public class JedisPoolUtil {

     

    private static volatile JedisPool jedisPool = null;

     

    private JedisPoolUtil(){}

     

    public static JedisPool getJedisPoolUtil(){

    if(null==jedisPool){

    synchronized(JedisPoolUtil.class){

    if(null==jedisPool){

    JedisPoolConfig poolConfig = new JedisPoolConfig();

    poolConfig.setMaxActive(1000);

    poolConfig.setMaxIdle(32);

    poolConfig.setMaxWait(100*1000);

    poolConfig.setTestOnBorrow(true);

    jedisPool = new JedisPool(poolConfig,"127.0.0.1",6379);

    }

    }

    }

    return jedisPool;

    }

     

    public static void release(JedisPool jedisPool,Jedis jedis){

    if(null!=jedis){

    jedisPool.returnResourceObject(jedis);

    }

    }

    }

    import redis.clients.jedis.Jedis;

    import redis.clients.jedis.JedisPool;

     

    public class TEstPool {

     

    public static void main(String[] args) {

     

    JedisPool jedisPool = JedisPoolUtil.getJedisPoolUtil();

     

    Jedis jedis = null;

    try{

    jedis = jedisPool.getResource();

    jedis.set("aa", "bb");

    }catch(Exception e){

    e.printStackTrace();

    }finally{

    JedisPoolUtil.release(jedisPool, jedis);

    }

    }

    }

    7.RedisPool配置

     

    JedisPool的配置参数大部分是由JedisPoolConfig的对应项来赋值的。

     

    maxActive:控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;如果赋值为-1,则表示不限制;如果pool已经分配了maxActivejedis实例,则此时pool的状态为exhausted

    maxIdle:控制一个pool最多有多少个状态为idle(空闲)jedis实例;

    whenExhaustedAction:表示当pool中的jedis实例都被allocated完时,pool要采取的操作;默认有三种。

     WHEN_EXHAUSTED_FAIL --> 表示无jedis实例时,直接抛出NoSuchElementException

     WHEN_EXHAUSTED_BLOCK --> 则表示阻塞住,或者达到maxWait时抛出JedisConnectionException

     WHEN_EXHAUSTED_GROW --> 则表示新建一个jedis实例,也就说设置的maxActive无用;

    maxWait:表示当borrow一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛JedisConnectionException

    testOnBorrow:获得一个jedis实例的时候是否检查连接可用性(ping());如果为true,则得到的jedis实例均是可用的;

     

    testOnReturnreturn 一个jedis实例给pool时,是否检查连接可用性(ping());

     

    testWhileIdle:如果为true,表示有一个idle object evitor线程对idle object进行扫描,如果validate失败,此object会被从pooldrop掉;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义;

     

    timeBetweenEvictionRunsMillis:表示idle object evitor两次扫描之间要sleep的毫秒数;

     

    numTestsPerEvictionRun:表示idle object evitor每次扫描的最多的对象数;

     

    minEvictableIdleTimeMillis:表示一个对象至少停留在idle状态的最短时间,然后才能被idle object evitor扫描并驱逐;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义;

     

    softMinEvictableIdleTimeMillis:在minEvictableIdleTimeMillis基础上,加入了至少minIdle个对象已经在pool里面了。如果为-1evicted不会根据idle time驱逐任何对象。如果minEvictableIdleTimeMillis>0,则此项设置无意义,且只有在timeBetweenEvictionRunsMillis大于0时才有意义;

     

    lifoborrowObject返回对象时,是采用DEFAULT_LIFOlast in first out,即类似cache的最频繁使用队列),如果为False,则表示FIFO队列;

     

    ==================================================================================================================

    其中JedisPoolConfig对一些参数的默认设置如下:

    testWhileIdle=true

    minEvictableIdleTimeMills=60000

    timeBetweenEvictionRunsMillis=30000

    numTestsPerEvictionRun=-1

  • 相关阅读:
    atitit查询表修改表字段没反应--解锁锁定的表
    atitit.自适应设计悬浮图片的大小and 位置
    .net 科学类型相关问题
    js eval()执行传参函数的写法
    oracle里如何将两个日期的时间差返回**时**分的格式
    .NET开源项目介绍及资源推荐:数据持久层
    highCharts 电流表、电压表
    win7 telnet命令无法使用
    ascx aspx ashx asmx 文件的作用
    Oracle 新建序列值
  • 原文地址:https://www.cnblogs.com/HOsystem/p/13849801.html
Copyright © 2020-2023  润新知