赞
踩
setnx就可以实现加锁,del实现解锁,但是这样不具备原子性,存在无法释放的可能。
因此可以使用在加锁时增加过期时间命令,做到原子性的加锁并且可以自动释放。
一些问题:
解决:
可重入性需要自己开发,安全性方面可能丢失锁(redis主从复制)
可以了解一下基于多节点的高可用分布式锁的算法 RedLock。
加入缓存就不可避免的引入数据一致性的问题,所以在这里讨论,先说结论,我在项目上使用的是旁路缓存模式——
读策略:
从缓存中读取数据;如果缓存命中,则直接返回数据;如果缓存不命中,则从数据库中查询数据;查询到数据后,将数据写入到缓存中,并且返回给用户。
写策略:
更新数据库中(HBASE,Redis)的记录;删除缓存记录。
然后探讨一下各种模式的优缺点以及相应的解决方案。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。