加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

RedisEclipse

发布时间:2020-12-16 04:36:22 所属栏目:安全 来源:网络整理
导读: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.ut

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

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读