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

 

posted @ 2020-10-20 23:17  HOsystem  阅读(316)  评论(0编辑  收藏  举报