博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
中间件
阅读量:6611 次
发布时间:2019-06-24

本文共 1596 字,大约阅读时间需要 5 分钟。

hot3.png

redis

redis常用5种基本类型:string,hash.list,set,zset

HypeLoglog:二进制存储0,1(存在)允许一定的错误率,大概8%(不确定)。

布隆过滤器:通过多个hash函数到bitmap上,一般用了解决缓存穿透问题(大量请求缓存中不存在的数据,去请求数据库);缓存雪崩(缓存大量同时失效,去请求数据库)随机设置过期时间

redis设置过期时间: 定期删除(redis默认每隔100ms去随机扫描设置了过期时间的key,如果过期就进行删除)和惰性删除(每次使用之前都去查询下是否过期,过期进行删除)

持久化: 

事务: MULTI、EXEC、WATCH ;lua脚本;事务不能回滚,redis最终一致性

淘汰机制:

1.设置过期时间内最少使用的数据2.所有数据最少使用---常用3.设置过期时间随机淘汰4.所有数据随机淘汰5.快要过期数据进行淘汰6。不淘汰,写入数据报错,几乎不用

Zookeeper

数据结构:znode树形结构,数据存放在内存中,zk可以实现高吞吐量和低延迟,适合读多写少

fbf97e07e9160df041bb6e2a46fcb42df35.jpg

使用场景:

1.分布式锁实现:

8698a77c2b4846be230defe557e18005d9e.jpg

2.存储-znode 元数据(version 当前数据的版本,cversion 上个节点的版本,aversion 当前acl版本)

3.集群中的注册中心

三种角色:领导者,追随者,观察者(不参加选举,提供读的能力,提升集群的读性能)

zab协议:保证数据一致性的协议/算法,单调一致性,定义三种节点状态(观察者,领导者,追随者(不参与选举))

zookeeper选举过程主要经过三个步骤:1.选举通过各个节点比较最大的事务zxid和节点信息选出准leader2.发现发现最大事务zxid和事务日志,根据事务日志准leader更新日志3.同步最新事务zxid和事务日志同步到从节点,当一半确定同步,准leader变成leader4.广播  二阶段提交客户端写入请求给任意从节点,从节点将写入请求转发给主节点(1)客户端发送写请求,主节点接收写请求,生成单调递增的事务id和事务日志,将事务id和事务日志同步给从节点,从节点写入日志成功后,返回ack消息给主节点(2)当主节点收到从节点一半的ack消息,主节点返回成功给客户端,并且发送commit请求给从节点特点:顺序一致性,原子性,单一系统映像,可靠性(更改效果持久化)

Znode:元数据data,子节点引用child,访问权限ACL,事务id和版本号和时间戳stat;

Znode并不是用来存储大规模业务数据,而用于存储少量状态和配置信息

分布式锁三种实现方式:

1.数据库建立唯一索引,同时提交到数据库,数据库保证只有一个提交成功,锁表。缺点:强依赖性,如果单点数据库挂了,整个业务系统都无法使用(主从同步);锁没有失效时间,如果解锁失败,导致锁记录一直在数据库中,其他线程无法获取锁(定时清理过期数据);锁非重入,同一个线程未释放锁之前无法再次获取锁,因为记录以及存在(while循环,直到成功获取锁);非阻塞,插入失败会sql报错,没有获取锁的队列不能进入排队队列,要想获取锁只能再次触发获取锁的操作(在数据库表中加个字段,记录当前获得锁的机器的主机信息和线程信息,那么下次再获取锁的时候先查询数据库,如果当前机器的主机信息和线程信息在数据库可以查到的话,直接把锁分配给他就可以了。)2.redis  setnx 原子性操作,设置过期时间,分布式下用redlock3.zookeeper分布式锁实现的复杂性角度(从低到高): Zookeeper >= 缓存 > 数据库性能角度: 数据库-> Zookeeper ->缓存可靠性角度: 数据库> 缓存 > Zookeeper

转载于:https://my.oschina.net/u/3098425/blog/2999737

你可能感兴趣的文章
java算法-递归算法思想
查看>>
领域驱动的设计
查看>>
16.1 Tomcat介绍
查看>>
Tumblr 爬虫
查看>>
B站,N站,汤站,爬虫下载资源总结与技巧(二)
查看>>
QuickBI助你成为分析师——数据源FAQ小结
查看>>
速记 UWP Unit Test 异常:ailed to initialize client proxy: could not connect to test process
查看>>
十周三次课
查看>>
解读POI操作之表格导出(生成多个sheet)
查看>>
安装redis 解压后的文件及操作
查看>>
Docker安装mysql8主从结构
查看>>
S/4HANA服务订单Service Order的批量创建
查看>>
iOS ShareSDK桥接技术
查看>>
spring源码解析bean定义@Configuration、@Import、@Bean(2)
查看>>
技术工坊|WASM应用区块链虚拟机的技术实践(上海)
查看>>
常见前端面试题
查看>>
工业大数据分析平台的应用价值探讨
查看>>
一周第五次课(系统目录结构、ls命令、文件类型、alias命令 )
查看>>
NFS搭建 (资源)
查看>>
shell实例100例《八》
查看>>