摘要:MESI(Modified, Exclusive, Shared, Invalid)是一种缓存一致性协议,用于解决多处理器系统中,多个处理器对同一块内存的并发读写可能导致的数据不一致性问题。MESI协议维护了每个缓存行的四种状态: Modified(M): 表示缓存行已被修改,并且是唯一的拷贝。当其
阅读全文
摘要:在Redis中,可以使用Lua脚本结合SET命令和EXPIRE命令来实现自动续期和加锁的操作。可以在给定的超时时间内自动续期锁。 local lockKey = KEYS[1] -- 锁的键名 local lockValue = ARGV[1] -- 锁的值 local lockTimeout =
阅读全文
摘要:Zset也就是sortset,它的底层数据结构包括ziplist或skiplist,在同时满足下列两个条件的时候使用ziplist: 有序集合保存的元素数量小于128个 有序集合保存的所有元素的长度小于64字节 其他时候使用skiplist,主要用在比如成绩排序啊,比如点赞数量,排行榜等。
阅读全文
摘要:事情的开头是因为在阿里巴巴开发手册上看见了这个,建议在jdk8 的环境下,使用LongADDer对象,会比AtomicLong效率高。 实践得出。。。。的确高了一个位,在这里记录一哈。。 保证i++的操作: volatile不能保证原子性和线程安全,加同步锁可以,但是过于复杂,,杀鸡焉用牛刀?? 可
阅读全文
摘要:快排的原理是: 选择一个关键值作为基准值,(可以选择第一个,也可以选择最后一个,或者随便选一个,我习惯选第一个)。 将比基准值大的都放在右边的序列中,将比基准值小的都放在左边的序列中。 具体循环过程:从后向前比较,用基准值和最后一个值进行比较。如果比基准值小,则换位,如果比基准值大,则继续比较下一个
阅读全文
摘要:读写锁的代码实现。使用到了juc下的一个接口,ReentrantReadWriteLock。可重入的读写锁。 package deadlock; import java.util.HashMap; import java.util.Map; import java.util.concurrent.T
阅读全文
摘要:使用syn锁对from和to进行资源的加锁。如果转账者和被转账的人都获取了相应的锁而不释放,则会造成必然的死锁。 package deadlock; /** * @author leon * @描述 转账时候遇到死锁,一旦打开注释。便会发生死锁。 */ public class TransferMo
阅读全文