我们先来聊一聊redis的部署模式(小编自己的理解,如果有不准确的地方希望大家评论在下面)
1,单机部署
redis如果只部署在一台机器上,那么为了防止脏数据,我们就可以使用synchronized关键字进行加锁,因为此时的请求可以理解在多个线程在向这个redis的这个进程来请求资源,这时我们只需要保证在一个进程内多个线程请求资源的不会因为并发性导致出现数据差异,所以此时我们可以选择加锁,因为是单机部署,所以锁只用考虑在一个进程内。
2,分布式部署
redis如果部署在多台机器上,那么我们就需要保证在多台机器中的进程中,不会出现多个请求在不同的进程中不会对同一数据进行多次修改,导致出现数据差异。所以为了避免这种情况,锁就需要在多个进程中实现共享,这样才能保证数据准确,不会出现差异,所以分布式锁就由此诞生。
我们可以先聊一聊这个锁的设计
首先,如果我们需要一些可以带回一些参数的工具,我看网上大多都在推荐 redis的setnx命令,
SETNX key value 如果key的值存在,就把key设置成value,如果不存在则不做处理,如果key值存在则返回1,key值不存在则返回0。(代码明天补)
大致逻辑是
用setnx命令设置一下,并将value的值设置了系统时间+超时时间,如果设置失败返回0,如果设置成功则返回值为1,之后认为请