
方法论
文章平均质量分 78
方法论
小手WA凉
一名zzuli在校生
展开
-
手写redis分布式锁
1.独占性:任何时候有且仅有一个线程持有锁2.放死锁:有超时控制机制或撤销操作,得有个释放锁的兜底方案3.不乱抢:不能张冠李戴,不能unlock别人加的锁4.可重入性:自己加的锁自己还可以再次获得基于setnx命令实现分布式锁,setnx成功返回1,失败返回0。原创 2024-07-11 11:23:41 · 597 阅读 · 0 评论 -
设计模式之单例模式(Java)
在序列化的过程中,只是将枚举对象的名字(即枚举常量的名字)写入到序列化文件中;这保证了在反序列化过程中无论如何都只会得到枚举中定义的枚举常量,而不会重新创建新的对象。因此,枚举类型的单例模式在反序列化过程中也能保持单例的状态,不会被破坏。解决方法只需要在单例类里加上一个readResolve()方法即可,原因就是在反序列化的过程中,会检测readResolve()方法是否存在,如果存在的话就会反射调用readResolve()这个方法。枚举类型的构造器是私有的,并且编译器会确保枚举常量只能被实例化一次。原创 2024-07-06 21:45:20 · 805 阅读 · 0 评论 -
缓存与数据库数据一致性问题
还是前面的例子,一个读线程从缓存中没有查到值,然后查数据库查到10,这时候恰好一个写线程删缓存更新数据库为20,然后读线程更新缓存为10。如果读写次序是:读线程先读缓存,缓存没有,查数据库值假如为10,这时候更新缓存和数据库的写操作执行了写数据库和缓存为20,然后读线程接着又更新缓存它从数据库查到的10。在用了redis缓存的系统中,正常情况下,一个读操作会先查缓存,如果在缓存中查到了,则直接返回,如果缓存中没有,则会查数据库,再将查到的数据写到redis中,然后返回。所以更新缓存就不太行。原创 2024-07-05 17:56:49 · 783 阅读 · 0 评论