这些天面试,总会碰到一个问题,解决分布式事务,我总会回答,使用redis实现一个简单的分布式锁,虽然知道应该使用redis的这个命令:set key value [expiration EX seconds|PX milliseconds][NX|XX],但是实际上没有操作过,不知道jedis是用什么方法设置的,然后在IDE里面下载了jedis包,查看jedis和jediscluster里面的方法,发现public String set(final String key, final String value, final SetParams params)这个方法,于是试了试,果然如预期。
public class Test extends Thread {
public static void main(String[] args) {
// Jedis jedis = new Jedis();
new Test().start();
new Test().start();
}
@Override
public void run() {
Set<HostAndPort> hostAndPorts = new HashSet<>();
hostAndPorts.add(new HostAndPort("192.168.209.128", 7000));
...
JedisCluster jedisCluster = new JedisCluster(hostAndPorts);
SetParams setParams = new SetParams();
setParams.px(10000);//ex
setParams.nx();//xx
String set = jedisCluster.set("test_cluster_key", "haha", setParams);
System.out.println(Thread.currentThread().getName() + ",,,," + set);
String test_cluster_key = jedisCluster.get("test_cluster_key");
System.out.println(Thread.currentThread().getName() + ",,,," + test_cluster_key);
}
}
输出结果:
Thread-0,OK
Thread-1,null
Thread-1,haha
Thread-0,haha