闲谈
觉得掌握了一门知识,最主要的是会灵活运用它,如果你知道了这门技术、知识,但是不会运用,也是没用的。所以觉得一个优秀的开发人员,最看重的应是会不会灵活运用知识、技术,第二才是看他掌握的知识点吧,因为知识点谁都可以学,但不是每个人都能灵活运用得到。
一、比如redis里的setnx(String , String )这个知识点,我们都知道它是设置一个值在内存里,设置成功,返回 1 , 设置失败,返回 0 。但是它在我们开发中会有很多地方运用得到,所以这就需要我们判断什么情况下会用到它,灵活运用。
1、比如在分布式中,有一个资源供我们使用,但是我们是分布式的,要是两个服务都共同抢这个资源的话,这时候肯定是不允许的,只能一个用完了,另一个再用,所以我们这时候就可以运用到这个知识点了。在每次使用前都进行setnx一次,如果是返回0的话,表示这个资源还在使用中,返回1就表示这个资源是空闲状态了。然后使用完之后就进行删掉。最主要的是redis是单例的,如果两个服务同时setnx的话,redis里面只能一个一个地来,所以一个设置了之后,另一个就设置不成功的了。所以就不会出现两个服务同时抢这个资源的问题了。
2、比如有个场景,就是一个事件在一定时间内不能重复进行。比如最常见的就是我们刷卡过地铁,在2秒内不能重复刷了。这时候我们也可以运用这个知识点进行处理。首先使用setnx进行设置key值,然后再设置该值的有效期为2秒。有效期过的话,该key不存在了,就可以设置成功了,返回1,有效期还没过的话,就表示该key值还存在,返回0。所以只有当该key值不存在时才能进站,如果该key存在的话,就不能进站了。
其实这就是redis加锁的用法吧,占用着,或是一个的时间内占用着,我们需要用的话就判断是否还在占用着,还有其他场景可以运用到的,所以这些都是需要我们灵活运用的吧,觉得开发的过程中,能做到灵活运用自己懂得的知识点很不错的,所以以后自己还得多加学习,不知这做起来是需要孰能生巧还是长期积累还是根据一个人的能力。也是初学者,有说不对的地方多多指出。