深刻理解redis分布式锁和消息队列

最近,博主发现Redis的两种方式,当他们看着redis。不同于以往的Redis的缓存,他们使用redis的有效时间设置键和brpop Redis命令。

分布式锁

因为一些编程语言,如PHP,不能在内存中使用锁,或当java是需要的,更简单的锁需要验证,使用redis分布式锁是不够的。



Redis的分布式锁实际上是对setnx方法基础上实施和Redis的功能设定关键有效时间的基本用法很简单。




公共布尔trylock(弦锁,长expiretime){
串过期= string.valueof(System.currentTimeMillis()+ expiretime + 1);
长期的结果= jedis.setnx(锁、过期);
如果(效果= = 1){
Jedis.expire(锁,expiretime);
返回true;
}
判断键不能删除/超时
串的电流= jedis.get(锁);
如果(Long.parseLong(有效值)<system.currenttimemillis()){
Jedis.set(锁、过期);
Jedis.expire(锁,expiretime);
返回true;
}
返回false;
}
过期是键的值,这里是防止在其他线程锁超时后运行,删除锁。
公共解锁(字符串锁定,字符串过期){
字符串值= jedis.get(锁);
如果(值)!=空值!=到期long.parselong(价值)> System.currentTimeMillis())
Jedis.del(锁);
}



这里是锁定和解锁的方法,我写的一个基于Redis的机制。现在再不推荐setnx,而是直接使用SET命令集(锁定,到期,NX,expiretime,EX),它可以直接作用到包括setnx。

消息队列

消息队列主要应用于网络服务中的异步任务。Redis可以作为消息队列实现生产者/消费者模式和订阅/发布模型。

生产者/消费者模型

生产者/消费者模型需要两方生产者和消费者。在Redis、队列的存储和访问可以通过生产者和消费者为消息队列的应用。这是用java写的代码,它是通过Redis命令说明。



事实上,在使用或lpush队列缓冲区,任务队列中的队列任务,这里有点棘手,其实redis lpush和rpush,这意味着从左侧和右侧的插队到队列中。这是生产者的一部分,插入到指定的队列中的任务。



一部分消费者有些类似,即使用brpop队列10,当然,brpop这里也有相应的blpop,因为队列是为了任务,所以这一侧的左、右两侧做了。应该指出的是,使用brpop和农作物brpop,还有一个原因是等待,是在10的顺序,这是一个等待的时间,以秒,如果队列是空的,所以我不会回来了,我等待10秒,如果一个新的任务的过程中插入,然后我会把新的任务返回,如果没有,返回null。



此外,brpop还支持优先级,这是brpop队列1队列:队列:2 3 10,这意味着连续采集。如果队列1没有得到任务,那么转到队列:2获取它,然后返回到它。

订阅/发布模型

订阅/发布模型只不过是由发布者向所有订阅者发送任务。任何订阅者都可以得到任务。在这里执行redis是使用订阅命令。



出版商可以使用任务发布渠道发布相关的任务,而用户使用订阅频道,这是一个监控命令,redis会监控这个渠道,如果新任务的出版商,监控命令返回的任务直到用户主动退出监控。但redis也超出时间保证的听众有效性。如果60年代没有收到消息,它默认为默认值。当然,这可以配置。



以上是本文的全部内容,希望能对您有所帮助,希望大家多多支持。