- 导包
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
- 示例代码
2.1 Jedis基本 demo
public static void testApi() {
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.set("k1", "v1");
jedis.set("k2", "v2");
System.out.println(jedis.get("k3"));
Set<String> sets = jedis.keys("*");
System.out.println(sets.size());
}
2.2 连接池使用demo
public static void testApi() {
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.set("k1", "v1");
jedis.set("k2", "v2");
System.out.println(jedis.get("k3"));
Set<String> sets = jedis.keys("*");
System.out.println(sets.size());
}
2.3 工具类封装
public interface RedisFunction <T,E>{
public T callback(E e);
}
public class RedisService {
private ShardedJedisPool shardedJedisPool;
private <T> T execute(RedisFunction<T, ShardedJedis> fun) {
ShardedJedis shardedJedis = null;
try {
shardedJedis = shardedJedisPool.getResource();
return fun.callback(shardedJedis);
} catch (Exception e) {
e.printStackTrace();
} finally {
shardedJedis.close();
}
return null;
}
public String set(String key, String value) {
return this.execute(new RedisFunction<String, ShardedJedis>() {
@Override
public String callback(ShardedJedis shardedJedis) {
return shardedJedis.set(key, value);
}
});
//下面是原始的写法
// ShardedJedis shardedJedis=null;
// try{
// shardedJedis=shardedJedisPool.getResource();
// return shardedJedis.set(key, value);
// }catch (Exception e){
// e.printStackTrace();
// }finally {
// shardedJedis.close();
// }
//
// return null;
}
public String set(String key, String value,final Integer seconds) {
return this.execute(new RedisFunction<String, ShardedJedis>() {
@Override
public String callback(ShardedJedis shardedJedis) {
String result=shardedJedis.set(key, value);
shardedJedis.expire(key, seconds);
return shardedJedis.set(key, value);
}
});
}
public String get(String key) {
ShardedJedis shardedJedis = null;
try {
shardedJedis = shardedJedisPool.getResource();
return shardedJedis.get(key);
} catch (Exception e) {
e.printStackTrace();
} finally {
shardedJedis.close();
}
return null;
}
public Long expire(final String key, final Integer seconds) {
return this.execute(new RedisFunction<Long, ShardedJedis>() {
@Override
public Long callback(ShardedJedis shardedJedis) {
return shardedJedis.expire(key, seconds);
}
});
}
}
2.4 使用示例
RedisService redisService = new RedisService();
String key = "aaa";
String cacheData = redisService.get(key);
if (StringUtils.isNotBlank(cacheData)) {
return JSONObject.parseObject(cacheData, Stu.class);
}
Stu value = new Stu();//这是个模拟数据应用应是查找得到
redisService.set("key", JSONObject.toJSONString(value),60);
return value;
2.5 事务示例
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);
}