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已经分配了maxActive个jedis实例,则此时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实例均是可用的;

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

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

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

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

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

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

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

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

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

testWhileIdle=true

minEvictableIdleTimeMills=60000

timeBetweenEvictionRunsMillis=30000

numTestsPerEvictionRun=-1

RedisEclipse的更多相关文章

随机推荐

  1. 因果推理综述——《A Survey on Causal Inference》一文的总结和梳理

    因果推理 本文档是对<A Survey on Causal Inference>一文的总结和梳理. 论文地址 简介 关联与因果 先有的鸡,还是先有的蛋?这里研究的是因果关系,因果关系与普通 ...

  2. Git Push 避免输入用户名和密码方法

    1 创建文件存储GIT用户名和密码 在%HOME%目录中,一般为C:\users\Administrator,也可以是你自己创建的系统用户名目录,反正都在C:\users\中.文件名为.git-cre ...

  3. 使用.NET Core创建Windows服务详细步骤

    目录 #创建步骤 1.使用Visual Studio创建 2.使用命令行创建 #项目结构说明 #将应用转换成Window服务 1.引入Microsoft.Extensions.Hosting.Wind ...

  4. SpringBoot第二集:注解与配置(2020最新最易懂)

    2020最新SpringBoot第二集:基础注解/基础配置(2020最新最易懂) 一.Eclipse安装SpringBoot插件 Eclipse实现SpringBoot开发,为便于项目的快速构建,需要 ...

  5. Java到处运行的基础之 Class 文件

    Java 实现一次编译到处运行的基础,来源于 Java 虚拟机屏蔽了操作系统的底层细节.使用 class 文件存储编译后的源程序,使得 Java 程序的编译与操作系统解耦.正是因为 Java clas ...

  6. Object of type Decimal is not JSON serializable

    json遇到Decimal 型数据无法正确处理 解决方案 import json result = [ {'name': '小红', 'age': 26, 'balance': decimal.Dec ...

  7. Java集合(类)框架(一)

    集合类均在java.util包之下 集合类方法的功能基本为增.删.改.查,部分外加方法除外(如toArray().toString()等) 1.List接口 底层为Object 数组,存放的数据可以重 ...

  8. 微信小程序获取高宽uniapp

    代码片段 <template> <view> <view class="text" id="w">补充文字</view ...

  9. Java_数组, 懒得整理了 ---------------------> 未完, 待续

    待续 public class TestArray { public static void main(String[] args) { String[] s1 = {"双儿", ...

  10. 【QT】继承QRunnable+QThreadPool实现多线程

    往期链接: <QThread源码浅析> <子类化QThread实现多线程> <子类化QObject+moveToThread实现多线程> 本文章实例的源码地址:ht ...