随笔分类 -  Redis

摘要:为什么是16384(2^14)个? 在redis节点发送心跳包时需要把所有的槽放到这个心跳包里,以便让节点知道当前集群信息,16384=16k,在发送心跳包时使用bitmap压缩后是2k(2 * 8 (8 bit) * 1024(1k) = 2K),也就是说使用2k的空间创建了16k的槽数。 虽然使用CRC16算法最多可以分配65535(2^16-1)个槽位,65535=65k,压缩后就是8k(8 * 8 (8 bit) * 1024(1k) = 8K),也就是说需要需要8k的心跳包,作者认为这样做不太值得;并且一般情况下一个redis集群不会有超过1000个master节点,所以16k的槽位是个比较合适的选择。 作者原话: 1、普通心跳数据包携带节点的完整配置,该配置可以用旧配置以幂等方式替换,以便更新旧配置。这意味着它们包含原始形式的节点的槽配置,16k的槽配置需要使用2k内存空间,但是使用65k槽将使用8k的内存空间。 2、同时,由于其他设计折衷,Redis集群不可能扩展到超过1000个节点。 阅读全文
posted @ 2020-12-10 19:42 手下留情 阅读(2007) 评论(0) 推荐(1)
摘要:缓存机制 一.工作原理 1.为什么redis适合做缓存? 缓存的两个特征,分别是可以快速访问;缓存写满时,数据需要被淘汰。而 Redis 天然就具有高性能访问和数据淘汰机制,正好符合缓存的这两个特征的要求,所以非常适合用作缓存。 2.redis做缓存的两种模式 只读缓存和读写缓存, 读写缓存提供了同步直写和异步写回这两种模式, 同步直写模式侧重于保证数据可靠性, 而异步写回模式则侧重于提供低延迟访问, 我们要根据实际的业务场景需求来进行选择。 举个例子,在商品大促的场景中,商品的库存信息会一直被修改。如果每次修改都需到数据库中处理,就会拖慢整个应用,此时,我们通常会选择读写缓存的模式。而在短视频 App 的场景中,虽然视频的属性有很多,但是,一般确定后,修改并不频繁,此时,在数据库中进行修改对缓存影响不大,所以只读缓存模式是一个合适的选择。 3.只读缓存和使用直写策略的读写缓存有什么区别吗? 只读缓存是牺牲了一定的性能,优先保证数据库和缓存的一致性,它更适合对于一致性要求比较要高的业务场景。 阅读全文
posted @ 2020-12-03 11:14 手下留情 阅读(1531) 评论(0) 推荐(0)
摘要:启动redis客户端时,提示"目标计算机积极拒绝,无法连接" 阅读全文
posted @ 2020-08-11 16:19 手下留情 阅读(8296) 评论(0) 推荐(0)