介绍
redis新看了点东西,跟分布式锁相关的
# node 中的redis
因为node本身的问题,基本不会用到锁相关的部分,然后redis相关的库基本都主要用于缓存,不怎么强调更深层的功用。我感觉redis应该没有这么简单,就看了下《redis入门指南》,再沿着一些文章看了一遍,感觉好像分布式锁已经是个常识了,所以我这一章就写短点
附:redis的基本数据结构很重要!我下次写!ioredis文档里有些东西没有明写的
# 分布式锁
假设多台机器都需要去访问一个redis,彼此之间会有先后顺序,如果前一个在改资源的过程中,后一个进场,那么数据同时被多个机器操作,最后成啥样也不知道了,为了防止这种情况,就有了分布式锁这个概念,希望一个机器在操作过程中,不要有其他角色干扰。
主体麻烦有很多:
- 死锁问题,锁总归需要释放的
- 误释放,b机器把a的锁给释放了
- 锁超时
# lua实现
具体代码我懒得贴了。。太多了。说句题外话,lua真心才像个脚本语言,简简单单,生怕我看不懂,js哪里是脚本语言啊淦...
基本的思路就是,机器只能释放释放自己加的锁,再设定超时的一个处理策略
# 进一步
其实解决这些,在js层去解决也没啥问题(应该吧, 但有关于某个部分的执行,最好还是在这个部分最近的地方进行 就好像数据从前端到写入数据库,格式检验可以在前端,后端,乃至于数据库门口进行(虽然为了安全,每个阶层都会做一遍),但格式检验或转化,最好是在数据库处去做(因为本质上数据最后目的地还是数据库,在输入数据库过程中做事一是好管理,二是数据库的包也会有相应的方法提供) 所以redis内部的一些操作,最好就用lua脚本去操作
还比如对数据的排序等,ioredis是有对应的方法,虽然文档没写,不需要你取出来在外面排序(优先考虑就近原则