一、jedis
jedis 是 redis推荐的java客户端。通过Jedis我们可以很方便地使用java代码的方式,对redis进行操作。jedis使用起来比较简单,它的操作方法与redis命令相类似。对于初次使用redis的人来说,上手更快,更能适应。jedis在github上的下载地址为https://github.com/xetorthio/jedis 。本例子使用maven,需要添加如下依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.6.0</version>
</dependency>
二、相关实例
2.1、测试联通
2.2、常用API操作
1、创建 jedis对象
2、键操作:
3、字符串操作:
4、整数和浮点数操作:
5、列表(List)操作:
6、集合(Set)操作:
7、哈希(Hash)操作:
8、有序集合(Zsort)操作:
9、排序操作:
2.3、事物
package com.atguigu.redis.test; 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;// 实刷额度 //加watch监控 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); } } |
2.4、Jedis池
获取Jedis实例需要从JedisPool中获取,用完Jedis实例需要返还给JedisPool。
package com.atguigu.redis.test; 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 getJedisPoolInstance() { 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); } } } |
package com.atguigu.redis.test; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; public class TestPool { public static void main(String[] args) { JedisPool jedisPool = JedisPoolUtil.getJedisPoolInstance(); JedisPool jedisPool2 = JedisPoolUtil.getJedisPoolInstance(); System.out.println(jedisPool == jedisPool2); Jedis jedis = null; try { jedis = jedisPool.getResource(); jedis.set("aa","bb"); } catch (Exception e) { e.printStackTrace(); }finally{ JedisPoolUtil.release(jedisPool, jedis); } } } |