科技新闻

Redis学习

空扰寡人 提交于 2020-03-30 22:15:34
学习自《Redis开发与运维(付磊)》 目录 简介 特性 使用原因 高性能 高并发 典型使用场景 缓存 排行榜 计数器 社交网络 消息队列 API使用 全局命令 支持的数据结构 String Hash List Set Sorted Set (ZSet) 简介 Redis是一种基于键值对(key-value)的NoSQL数据库。 特性 速度快 Redis的数据都存放在内存中,代码通过C语言实现,使用了单线程的IO多路复用机制,这些都使得redis的读写速度非常快。 基于键值对的数据结构服务器 Redis全称是remote dictionary server,即远程字典服务器。很多编程语言都提供了字典的功能,即基于键值对的方式存储数据。Redis中的值不仅可以是字符串,而且还可以是具体的数据结构,这样不仅能便于在许多应用场景的开发,同时也能够提高开发效率。 功能丰富 Redis提供的功能如下: 提供了键过期功能,可以用来实现缓存。 提供了发布订阅功能,可以用来实现消息系统。 支持Lua脚本功能,可以利用Lua创造出新的Redis命令。 提供了简单的事务功能,能在一定程度上保证事务特性。 提供了流水线功能,这样客户端能将一批命令一次性传到Redis,减少了网络的开销。 简单稳定 Redis的简单主要体现在三个方面: Redis的源码很少,早期版本的代码只有2万行左右,3

XMPP协议

时光怂恿深爱的人放手 提交于 2020-03-30 21:54:15
XMPP (Extensible Messageing and Presence Protocol) 可扩展消息与存在协议, 是目前主流的四种IM(即时消息)协议之一,其它三种分别为:即时信息和空间协议( IMPP )、空间和即时信息协议(PRIM)、针对即时通讯和空间平衡扩充的进程开始协议 SIP (SIMPLE)。 在这四种协议中,XMPP是最灵活的。 XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。 1、什么是XMPP ? XMPP的前身是 Jabber ,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分: (1)核心的XML流传输协议 (2) 基于XML流传输的即时通讯扩展应用 XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上,借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。

php7.1 安装amqp扩展

我们两清 提交于 2020-03-30 20:53:55
在php开发中使用rabbitmq消息队列时,需要安装PHP扩展amqp,安装步骤如下: 直接使用pecl进行amqp扩展的安装, /usr/local/php/bin/pecl install amqp 如果缺少librabbitmq库文件,需要先安装librabbitmq,步骤如下: 1 wget https://github.com/alanxz/rabbitmq-c/releases/download/v0.7.1/rabbitmq-c-0.7.1.tar.gz 2 tar -zxvf rabbitmq-c-0.7.1.tar.gz 3 cd rabbitmq-c-0.7.1 4 ./configure --prefix=/usr/local/rabbitmq-c 5 make && make install librabbitmq安装完成后,继续执行 /usr/local/php/bin/pecl install amqp 此时需要输入安装librabbitmq的安装目录/usr/local/rabbitmq-c,此时得到amqp.so扩展模块路径/usr/local/php/lib/php/extensions/no-debug-non-zts-20160303/amqp.so,加入php.ini配置文件, [amqp] extension=/usr/local/php

6.TCP实现聊天

时光总嘲笑我的痴心妄想 提交于 2020-03-30 19:33:40
打电话:需要连接,接通了后才可以 客户端: 通过Socket连接服务器 发送消息 1 package com.Inet.lesson2; 2 3 import java.io.IOException; 4 import java.io.OutputStream; 5 import java.net.InetAddress; 6 import java.net.Socket; 7 8 //客户端 9 public class TcpClientDemo01 { 10 public static void main(String[] args) { 11 Socket socket = null; 12 OutputStream os = null; 13 14 try { 15 //1.要知道服务器的地址 16 InetAddress serverIP = InetAddress.getByName("127.0.0.1"); 17 int port = 9999; 18 //2.创立一个socket连接 19 socket = new Socket(serverIP, port); 20 //3.发送消息 IO流 21 os = socket.getOutputStream(); 22 os.write("你好,世界".getBytes()); 23 24 } catch

c++学习笔记:多态

僤鯓⒐⒋嵵緔 提交于 2020-03-30 17:21:18
1.多态:通常是指对于同一个消息、同一种调用,在不同的场合,不同的情况下,执行不同的行为--->重载便是简单的多态 ------->指同一个操作作用于不同的对象就会产生不同的响应; 多态性分为静态多态性和动态多态性   其中函数重载和运算符重载属于静态多态性, 虚函数属于动态多态性---->C++是依靠虚函数来实现动态多态的。 2.C++编译器根据传递给函数的参数和函数名决定具体要使用哪一个函数,称为联编:   1)在编译过程中进行的联编叫静态联编(static binding)或早期联编(early binding)。   2)在程序运行时完成,动态联编”(dynamic binding)也叫晚期联编(late binding)---->C++通过虚函数来实现动态联编 3.虚函数:vitual   1.与基类的虚函数有相同的参数个数;   2.与基类的虚函数有相同的参数类型;   3.与基类的虚函数有相同的返回类型。   注意点:1. 基类的成员函数定义为虚函数,那么,它在所有派生类中也保持为虚函数;即使在派生类中省略了virtual关键字,也仍然是虚函数。       2.构造函数不可为虚函数--->一旦为虚函数相当于重新,在构造子类时无法找到基类构造函数从而无法构造对象。       ( 1. 根据继承的性质,构造函数执行顺序是: A() B() 2. 根据虚函数的性质

运用cookie登陆人人网爬取数据

夙愿已清 提交于 2020-03-30 11:01:28
   浏览器访问WEB服务器的过程 在用户访问网页时,不论是通过URL输入域名或IP,还是点击链接,浏览器向WEB服务器发出了一个HTTP请求(Http Request),WEB服务器接收到客户端浏览器的请求之后,响应客户端的请求,发回相应的响应信息(Http Response),浏览器解析引擎,排版引擎分析返回的内容,呈现给用户。WEB应用程序在于服务器交互的过程中,HTTP请求和响应时发送的都是一个消息结构    什么是cookie cookie在http请求和http响应的头信息中,cookie是消息头的一种很重要的属性. 当用户通过浏览器首次访问一个域名时,访问的WEB服务器会给客户端发送数据,以保持WEB服务器与客户端之间的状态保持,这些数据就是Cookie,它是 Internet 站点创建的 ,为了辨别用户身份而储存在用户本地终端上的数据,Cookie中的信息一般都是经过加密的,Cookie存在缓存中或者硬盘中,在硬盘中的是一些小文本文件,当你访问该网站时,就会读取对应网站的Cookie信息,Cookie有效地提升了我们的上网体验。一般而言,一旦将 Cookie 保存在计算机上,则只有创建该 Cookie 的网站才能读取它。    为什么需要cookie Http协议是一个无状态的面向连接的协议,Http协议是基于tcp/ip协议层之上的协议

kafka常见面试题

瘦欲@ 提交于 2020-03-30 08:52:57
https://blog.csdn.net/qq_28900249/article/details/90346599 1、为什么要使用 kafka,为什么要使用消息队列 缓冲和削峰 解耦和扩展性 冗余 健壮性 异步通信 2、kafka的分区与消费者关系 分区(partition) kafka中的topic可以细分为不同的partition,一个topic可以将消息存放在不同的partion中。 leader和follower 每个partition可以设置一个leader和多个follower。kafka的消息没有设置读写分离,每个消息发送时,都是发送至对应的partition的leader-partition,follower-partition主要是为了备份数据而存在,当leader-partion出现故障时,数据已经完全同步的follower-partition也会切换成leader-partition。 AR和ISR AR:分区中所有的副本统称为AR。 ISR:所有与leader节点保持同步的副本(包括leader节点)组成的节点,生产者首先将消息发送给leader副本,然后follower从leader中同步消息。 ISR是AR的子集 。 数据的存储 在partion中,一个topic中的数据存放在不同的partion中,一个分区的内容会存储成一个log文件

微信公众号开发(三)----服务号客服消息

旧巷老猫 提交于 2020-03-30 08:50:33
因为订阅号没有客服消息,所以只能在用户发送消息以后,进行被动的回复。而服务号可以通过客服消息主动给用户发消息,下面我就介绍一下这个功能怎么使用。 客服消息主要是向公众号服务器发送HTTPS请求,所以这部分的内容可以使用PostMan等工具进行测试和验证。那么下面就开始吧。 1. 获取AccessToken 发送客服消息需要用到AccessToken,可以用appId和AppSecrect来获取。获取的接口文档为 获取AccessToken , AppId和AppSecrect可以在 公众号主页 ---> 开发 --> 基本设置 获取,如下图所示。 注意: AppID是对于公众号是固定的。 AppSecrect需要公众号的管理员才可以查看。 需要把本机的公网IP添加到白名单。 AccessToken是有有效期的,在失效以后要再次更新才能使用。 公众平台 公众号调试平台获取AccessToken 2. 获取关注者的openid 可以通过接口获取关注者的列表,文档在 获取关注者的列表 。 公众号调试平台获取关注者列表 3. 发送客服消息 有关注者的openid和AccessToken的情况下,就可以发送客服消息了。客服消息有很多类型,这里我们用文本消息来做演示。文本消息的格式文章在 客服文本消息 ,微信公众平台的调试如下。 公众号调试平台发送客服消息 收到客服消息的效果展示 至此

还不知道事务消息吗?这篇文章带你全面扫盲!

旧城冷巷雨未停 提交于 2020-03-30 08:16:23
在分布式系统中,为了保证数据一致性是必须使用分布式事务。分布式事务实现方式就很多种,今天主要介绍一下使用 RocketMQ 事务消息,实现分布事务。 文末有彩蛋,看完再走 为什么需要事务消息? 很多同学可能不知道事务消息是什么,没关系,举一个真实业务场景,先来带你了解一下普通的消息存在问题。 上面业务场景中,当用户支付成功,将会更新支付订单,然后发送 MQ 消息。手续费系统将会通过拉取消息,计算手续费然后保存到另外一个手续费数据库中。 由于计算手续费这个步骤可以离线计算,所以这里采用 MQ 解耦支付与计算手续费的流程。 流程主要涉及三个步骤: 更新订单数据 发送消息给 MQ 手续费系统拉取消息 上面提到的步骤,任何一个都会失败,如果我们没有处理,就会使两边数据不一致,将会造成下面两种情况: 订单数据更新了,手续费数据没有生成 手续费数据生成,订单数据却没有更新 这可是涉及到真正的钱,一旦少计算,就会造成 资损 ,真的赔不起! 对于最后一步来讲,比较简单。如果消费消息失败,只要没有提交消息确认,MQ 服务端将会自动重试。 最大的问题 在于我们无法保证更新操作与发送消息一致性。无论我们采用先更新订单数据,再发送消息,还是先发送消息,再更新订单数据,都在存在一个成功,一个失败的可能。 如下所示,采用先发送消息,然后再更新数据库的方式。 上面流程消息发送成功之后,再进行本地事务的提交

RPC原理及实现

旧时模样 提交于 2020-03-30 04:44:12
RPC概述:   RPC(Remote Procedure Call)即远程过程调用,一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。 组件:   客户端(Client),服务的调用方。   客户端存根(Client Stub),存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。   服务端(Server),真正的服务提供者。   服务端存根(Server Stub),接收客户端发送过来的消息,将消息解包,并调用本地的方法。 调用过程:   1)服务消费方(client)调用以本地调用方式调用服务;   2)client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;   3)client stub找到服务地址,并将消息发送到服务端;   4)server stub收到消息后进行解码;   5)server stub根据解码结果调用本地的服务;   6)本地服务执行并将结果返回给server stub;   7)server stub将返回结果打包成消息并发送至消费方;   8)client stub接收到消息,并进行解码;   9)服务消费方得到最终结果。 使用的技术:   动态代理:生成 client stub和server stub需要用到 Java 动态代理技术   序列化