一致性哈希算法


当我们在做数据库分库分表或者是分布式缓存时,不可避免的都会遇到一个问题:如何将数据均匀的分散到各个节点中,并且尽量的在加减节点时能使受影响的数据最少。Hash 取模随机放置就不说了,会带来很多问题。通常最容易想到的方案就是 hash 取模了。可以将传入的 Key 按照 index = hash(ke

设计模式-策略


策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。这个模式涉及到三个角色:环境(Context)角色:持有一个Strategy的引用。抽象策略(Strategy)角色:这是一个

设计模式-观察者


观察者模式(Observer)又称发布-订阅模式(Publish-Subscribe:Pub/Sub)。它是一种通知机制,让发送通知的一方(被观察方)和接收通知的一方(观察者)能彼此分离,互不影响。观察者接口public interface Observer { public abstract

设计模式-职责链


职责链就是,将不属于自己职责的任务推卸给下一个执行任务的对象。我们将多个这样的对象组成一条链,然后根据组成顺序,任务就能被分配到具体执行的对象上。首先,定义一个表示用来解决问题的抽象类Supportpublic abstract class Support { private String n

热点数据如何处理


热点key定义某个特定key某一时间段突然被大量访问,比如秒杀,热点等。这样会造成流量过于集中,达到例如Redis单实例瓶颈(一般是10W OPS级别),或者物理网卡上限,从而导致这台redis的服务器扛不住,导致宕机,甚至从新缓存之后另一个分片被打挂。如何发现热点key根据业务特点,比如秒杀,能预

Redis几种数据类型及应用场景


Redis支持5种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。何时使用Redis呢?先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的首先Redis内部使用一个redisObject对象来表示所