要记得

作者: 杨奇懒 | 来源:发表于2018-04-01 16:30 被阅读0次

redis

1,redis是一个单线程的高性能缓存数据库,redis底层采用网络io的多路复用(事件驱动模型)来监听文件读写事件。

2,数据结构: 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

3,持久化方式:RDB,AOF

4, 数据淘汰策略

volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰

volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰

volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰

allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰

allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰

no-enviction(驱逐):禁止驱逐数据

使用场景:缓存基本配置,

dubbo

dubbo是一个分布式服务框架,底层用nio的mina,netty通信,可用于服务治理,

集群容错, 自动发现。

支持多种协议:dubbo协议,hessain,http协议,thrift协议

Dubbo缺省协议采用单一长连接和NIO异步通讯,

适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况

client一个线程调用远程接口,生成一个唯一的ID(比如一段随机字符串,UUID等),Dubbo是使用AtomicLong从0开始累计数字的

将打包的方法调用信息(如调用的接口名称,方法名称,参数值列表等),和处理结果的回调对象callback,全部封装在一起,组成一个对象object

向专门存放调用信息的全局ConcurrentHashMap里面put(ID, object)

将ID和打包的方法调用信息封装成一对象connRequest,使用IoSession.write(connRequest)异步发送出去

当前线程再使用callback的get()方法试图获取远程返回的结果,在get()内部,则使用synchronized获取回调对象callback的锁, 再先检测是否已经获取到结果,如果没有,然后调用callback的wait()方法,释放callback上的锁,让当前线程处于等待状态。

服务端接收到请求并处理后,将结果(此结果中包含了前面的ID,即回传)发送给客户端,客户端socket连接上专门监听消息的线程收到消息,分析结果,取到ID,再从前面的ConcurrentHashMap里面get(ID),从而找到callback,将方法调用结果设置到callback对象里。

监听线程接着使用synchronized获取回调对象callback的锁(因为前面调用过wait(),那个线程已释放callback的锁了),再notifyAll(),唤醒前面处于等待状态的线程继续执行(callback的get()方法继续执行就能拿到调用结果了),至此,整个过程结束。

当前线程怎么让它“暂停”,等结果回来后,再向后执行?

答:先生成一个对象obj,在一个全局map里put(ID,obj)存放起来,再用synchronized获取obj锁,再调用obj.wait()让当前线程处于等待状态,然后另一消息监听线程等到服 务端结果来了后,再map.get(ID)找到obj,再用synchronized获取obj锁,再调用obj.notifyAll()唤醒前面处于等待状态的线程。

正如前面所说,Socket通信是一个全双工的方式,如果有多个线程同时进行远程方法调用,这时建立在client server之间的socket连接上会有很多双方发送的消息传递,前后顺序也可能是乱七八糟的,server处理完结果后,将结果消息发送给client,client收到很多消息,怎么知道哪个消息结果是原先哪个线程调用的?

答:使用一个ID,让其唯一,然后传递给服务端,再服务端又回传回来,这样就知道结果是原先哪个线程的了。

zookeeper

1.ZooKeeper是什么? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务

2.ZooKeeper提供了什么?

1)文件系统:和文件系统一样的,树形目录结构,目录名唯一,

提供持久化节点(客户端与zookeeper断开连接后,该节点依旧存在 ),持久化顺时节点,临时节点(客户端与zookeeper断开连接后,该节点消失 ),临时顺序节点

2)通知机制(watch机制)

监听目录变化,就是监听目录增删改查。

zk的分布式锁的原理: 多个节点同时 创建 临时顺序节点

https://www.cnblogs.com/felixzh/p/5869212.html 把这个里面背下来

相关文章

  • 要记得

    朋友一生一起走 但 始终要记得,每个人都有不同的际遇, 一个人走也有走的漂亮 还有 有什么公不公平, 只要你没有选...

  • 要记得

    redis 1,redis是一个单线程的高性能缓存数据库,redis底层采用网络io的多路复用(事件驱动模型)来监...

  • 要记得。

  • 要记得👉

    就算你身边有很多人追 但你要记住 谁都能对你说晚安 谁都能说爱你 谁都能提醒你早睡早起 谁都能做一系列假装关心你的...

  • 要记得!!!

    •不懂一定要敢问,不确定的时候不能按照自己的想法来,哪怕会被骂也要问清楚,就这样。

  • 要记得

    有没有一个时刻,让你觉得一切都值得了。 现在便是这时刻了,跑步,喝啤酒,吹风,听音乐,看书。 有时候愉快难过,只是...

  • 要记得

    要记得那些黑暗中默默抱紧你的人逗你笑的人,陪你彻夜聊天的人坐车来看望你的人,陪你哭过的人在医院陪你的人,总是以你为...

  • 要记得,确实地记得

    记得台湾灵性导师林世儒老师曾经分享过一个关于佛陀的故事,我特别喜欢。在此我以文字方式分享给有缘人: 传说有一天,释...

  • 要记得爱

    我至始至终都爱着———不知为何——— 总是将写字台对着窗外,看雨拍打窗檐前。 望破晓时分与那雷雨天,紫色布满了世界...

  • 记得,要早睡

    不要在深夜里 孤独总是容易冒犯 虽然 更能轻易地聆听这世界 但黑夜的时间并不属于光年之外 虽然 年轻的人啊,因为不...

网友评论

    本文标题:要记得

    本文链接:https://www.haomeiwen.com/subject/epcacftx.html