java操作redis

  1. 导包
<dependency>
   <groupId>redis.clients</groupId>
   <artifactId>jedis</artifactId>
   <version>2.9.0</version>
</dependency>
  1. 示例代码

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);
	  }	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值