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. [阿里DIN] 深度兴趣网络源码分析 之 如何建模用户序列

    [阿里DIN] 深度兴趣网络源码分析 之 如何建模用户序列 目录 [阿里DIN] 深度兴趣网络源码分析 之 如何建模用户序列 0x00 摘要 0x01 DIN 需要什么数据 0x02 如何产生数据 2 ...

  2. C#Socket通讯(1)

    前言 因为自己需要开发一款自己的游戏,因为设计网络方面,所以我找了很多的资料,再加上考虑到Unity游戏客户端直接连接数据库很容易导致数据库泄露,再加上网上很多的服务端都是用控制台做的,所以我就想做个 ...

  3. 面试不再慌,看完这篇保证让你写HashMap跟玩一样

    今天这篇文章给大家讲讲hashmap,这个号称是所有Java工程师都会的数据结构.为什么说是所有Java工程师都会呢,因为很简单,他们不会这个找不到工作.几乎所有面试都会问,基本上已经成了标配了. 在 ...

  4. 没事学些KVM(三)虚拟机基础管理

    创建完成虚拟机后,需要对虚拟机进行基础管理学习 virsh list #查看虚拟机列表 改命令只能查看正在运行或挂起的虚拟机 如果需要查看所有的虚拟机需要添加--all 参数 virsh start ...

  5. 跨站资源共享CORS原理深度解析

    我相信如果你写过前后端分离的web应用程序,或者写过一些ajax请求调用,你可能会遇到过CORS错误. CORS是什么? 它与安全性有关吗? 为什么要有CORS?它解决了什么目的? CORS是怎样运行 ...

  6. java 封装多态继承

    java 面向对象思想 封装多态继承 面向过程与面向对象 编程分为面向对象编程和面向对象编程,汇编,C语言是面向过程写代码,C++/Java是面向对象 其实面向过程和面向对象在本质都是一样写代码,然后 ...

  7. error:docker-ce conflicts with 2:docker-1.13.1-74.git6e3bb8e.el7.centos.x86_64

    问题原因:安装docker之前有安装cockpit-docker服务 解决方法:卸载docker-ce [root@localhost ~]# yum list installed | grep do ...

  8. python自动化测试,读取excal数据报"'str' object has no attribute 'items'"问题解决

    通过python进行自动化测试,为了方便,对代码和数据进行了分离,此处把测试数据放到了excal表格中.requests.post请求时报"'str' object has no attri ...

  9. LoadRunner接口脚本web_submit_data编写过程中遇到的问题及分享

    工作中需要接口测试,报文编辑器一条条手工发费时费力,因此考虑利用web_submit_data函数POST方法进行报文编辑.在报文编辑中主要遇到了三个问题,其中一个问题耗时两天查到问题所在,在这里与大 ...

  10. shell脚本之编程基础介绍

    1.shell脚本简介 1.1 shell是什么? shell是一个命令解释器,它在操作系统的最外层负责直接与用户对话,把用户的输入解释给操作系统:并处理各种各样的操作系统的输入,将结果输出到屏幕返回 ...