精华内容
下载资源
问答
  • Redis作为目前使用较为广泛的中间件之一,大量使用于缓存、分布式锁、业务排行榜甚至是持久化的场景中,性能及可用性是我们关注的重点,本文主要探索Redis部署的几种方式交互原理。 部署方式 单节点    ...

    前言

            Redis作为目前使用较为广泛的中间件之一,大量使用于缓存、分布式锁、业务排行榜甚至是持久化的场景中,性能及可用性是我们关注的重点,本文主要探索Redis部署的几种方式及交互原理。

    部署方式

    单节点

            单节点(standalone)模式即在操作系统实例中单节点启动Redis进程如下图,暴露对应的服务端口号即可。缺点也比较明显,既无法保证高可用,也无法很好的支持横向扩展(只能增加宿主机配置)。
    图片替换文本

    主从部署

            主从(master-slave)部署的方式如下图,一个master节点和n个slave节点,其中slave也可以有更多的slave节点,主从之间同步分为全量或增量。全量同步:master节点通过BGSAVE生成对应的RDB文件,然后发送给slave节点,slave节点接收到写入命令后将master发送过来的文件加载并写入;增量同步:即在master-slave关系建立开始,master每执行一次数据变更的命令就会同步至slave节点。;在主从架构中,客户端针对写请求转发至master节点,读请求多走slave节点。相对于单节点部署,主从架构提高了Redis的性能。
    图片替换文本

    哨兵

           哨兵(Sentinel)部署方式如下图,分别有哨兵集群与Redis的主从集群,哨兵作为操作系统中的一个监控进程,对应监控每一个Redis,如果master服务异常(ping pong其中节点没有回复且超过了一定时间),就会多个哨兵之间进行确认,如果超过一半确认服务异常,则对master服务进行下线处理,并且选举出当前一个slave节点来转换成master节点;如果slave节点服务异常,也是经过多个哨兵确认后,进行下线处理;相对于前面的单节点、主从,哨兵的部署方式使redis集群有了高可用的特性,但横向扩展能力依然是强依赖于宿主机。
    图片替换文本

    集群

           Redis官方集群(cluster)部署方式如下图,属于“去中心化”的一种方式,多个master节点保存整个集群中的全部数据,而数据根据key进行crc-16校验算法进行散列,将key散列成对应16383个slot,而Redis cluster集群中每个master节点负责不同的slot范围。每个master节点下还可以配置多个slave节点,同时也可以在集群中再使用sentinel哨兵提升整个集群的高可用性。
    图片替换文本

           对于Redis客户端来读写数据的流程,如常用的jedis客户端,首先获取集群中机器列表,然后随机向其中一个master节点发起数据读写请求,master节点接收到后,如果该key的校验后slot为自身的范围则直接进行操作,否则给jedis客户端返回一个重定向的异常,客户端便会连接正确的节点进行接下来的操作。

           而由于Redis cluster中每个master节点对应的hash slot都是在集群建立时定死的即预分片效果,因此在对集群中增加节点、移除节点时注意相应的操作顺序(个人觉得Redis集群是分布式hash一致性算法的最佳实践场景,没有使用这个,但是官方推荐使用一些插件和开源代理中有相应的实现方案):

    增加节点

    1. 增加对应机器配置;
    2. 分配对应slot;
    3. 进行slot数据迁移;

    移除节点

    1. 将对应节点slot key进行迁移至目标slot的节点;
    2. 移除机器;

           除此之外,由于集群中每个节点负责不同的slot,因此之前的单节点、主从等方式部署的集群中我们使用的批量操作Mget、Mset等不再集群模式下支持。Redis cluster部署模式很好的解决了Redis横向扩展的瓶颈问题。

    阿里云Redis集群

           我们当前使用的是阿里云集群,使用方式既可以是代理模式,也可以直连集群中的节点。代理模式在我们使用的视角中就相当于是非集群的直连master节点,并且也可以支持批量操作命令如Mget、Mset等,不用在使用jedis客户端时使用集群方式连接,并且与对应key slot节点的交互也全都proxy代理完成。
    图片替换文本
           阿里云集群不仅在横向扩展方面有着优秀的快速升配方案,而且在可用性上,有着跨机房、地域的灾备方案,即master节点下的slave节点会在多处部署,master出现异常时进行替换。

    结语

           本文探索了Redis 多种部署方式及其优劣性,为以后的选型及中间件配置选取可以提供相应参考。

    参考

    阿里云文档:
    https://help.aliyun.com/document_detail/52228.html?spm=a2c4g.11186623.2.21.4ca07d2cKuofBV#section-h69-izd-531

    redis多种部署实践:
    https://blog.csdn.net/xxssyyyyssxx/article/details/72831909#comments_12414256

    redis官网集群模式:
    https://redis.io/topics/cluster-tutorial/

    展开全文
  • 一、原料 硬件:①esp8266-wifi模块②usb转ttl③5v转3.3v模块④杜邦线 软件:安卓下安装...3、模块与手机交互 手机端发送数据 串口工具接收数据后显示 串口工具发送数据AT+CIPSEND 手机接收到数据
  • 项目开发过程中很多地方都需要前端和后台的数据交互,几种典型常用的方法如利用控件的AutopostBack属性、Button提交表单等等。但这些都是有条件的,AutoPostBack具有实时性但会刷新页面,Button提交表单不能实现数据...
  • VTK之交互方式(interactor style)

    千次阅读 2015-04-27 17:27:33
    VTK提供了多种交互方式,最常用的包括joystick和trackball,并且可以分别对actor和camera进行操作。  在VTK中,可以通过集成已有的交互方式类,然后添加自己的功能,则可以完成在触发响应时,完成响应的操作。  ...

        VTK提供了多种交互方式,最常用的包括joystick和trackball,并且可以分别对actor和camera进行操作。

        在VTK中,可以通过集成已有的交互方式类,然后添加自己的功能,则可以完成在触发响应时,完成响应的操作。

        以下是自定义交互方式类的一个实例。该实例实现的是对鼠标点击的物体进行高亮显示。

       

    #include <vtkVersion.h>
    #include <vtkSmartPointer.h>
    #include <vtkMath.h>
    #include <vtkActor.h>
    #include <vtkProperty.h>
    #include <vtkSphereSource.h>
    #include <vtkInteractorStyleTrackballCamera.h>
    #include <vtkObjectFactory.h>
    #include <vtkSphereSource.h>
    #include <vtkPolyDataMapper.h>
    #include <vtkPropPicker.h>
    #include <vtkRenderWindow.h>
    #include <vtkRenderWindowInteractor.h>
    #include <vtkRenderer.h>
     
    // Handle mouse events
    class MouseInteractorHighLightActor : public vtkInteractorStyleTrackballCamera
    {
    public:
      static MouseInteractorHighLightActor* New();
      vtkTypeMacro(MouseInteractorHighLightActor, vtkInteractorStyleTrackballCamera);
     
      MouseInteractorHighLightActor()
      {
        LastPickedActor = NULL;
        LastPickedProperty = vtkProperty::New();
      }
      virtual ~MouseInteractorHighLightActor()
      {
        LastPickedProperty->Delete();
      }
      virtual void OnLeftButtonDown()
      {
        int* clickPos = this->GetInteractor()->GetEventPosition();
     
        // Pick from this location.
        vtkSmartPointer<vtkPropPicker>  picker =
          vtkSmartPointer<vtkPropPicker>::New();
        picker->Pick(clickPos[0], clickPos[1], 0, this->GetDefaultRenderer());
     
        // If we picked something before, reset its property
        if (this->LastPickedActor)
          {
          this->LastPickedActor->GetProperty()->DeepCopy(this->LastPickedProperty);
          }
        this->LastPickedActor = picker->GetActor();
        if (this->LastPickedActor)
          {
          // Save the property of the picked actor so that we can
          // restore it next time
          this->LastPickedProperty->DeepCopy(this->LastPickedActor->GetProperty());
          // Highlight the picked actor by changing its properties
          this->LastPickedActor->GetProperty()->SetColor(1.0, 0.0, 0.0);
          this->LastPickedActor->GetProperty()->SetDiffuse(1.0);
          this->LastPickedActor->GetProperty()->SetSpecular(0.0);
          }
     
        // Forward events
        vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
      }
     
    private:
      vtkActor    *LastPickedActor;
      vtkProperty *LastPickedProperty;
    };
     
    vtkStandardNewMacro(MouseInteractorHighLightActor);
     
    // Execute application.
    int main(int argc, char *argv[])
    {
      int numberOfSpheres = 10;
      if (argc > 1)
        {
        numberOfSpheres = atoi(argv[1]);
        }
      // A renderer and render window
      vtkSmartPointer<vtkRenderer> renderer =
        vtkSmartPointer<vtkRenderer>::New();
      vtkSmartPointer<vtkRenderWindow> renderWindow =
        vtkSmartPointer<vtkRenderWindow>::New();
      renderWindow->AddRenderer ( renderer );
     
      // An interactor
      vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
        vtkSmartPointer<vtkRenderWindowInteractor>::New();
      renderWindowInteractor->SetRenderWindow ( renderWindow );
     
      // Set the custom type to use for interaction.
      vtkSmartPointer<MouseInteractorHighLightActor> style =
        vtkSmartPointer<MouseInteractorHighLightActor>::New();
      style->SetDefaultRenderer(renderer);
     
      renderWindowInteractor->SetInteractorStyle( style );
     
      for (int i = 0; i < numberOfSpheres; ++i)
        {
        vtkSmartPointer<vtkSphereSource> source =
          vtkSmartPointer<vtkSphereSource>::New();
        double x, y, z, radius;
        x = vtkMath::Random(-5,5);
        y = vtkMath::Random(-5,5);
        z = vtkMath::Random(-5,5);
        radius = vtkMath::Random(.5, 1.0);
        source->SetRadius(radius);
        source->SetCenter(x, y, z);
        source->SetPhiResolution(11);
        source->SetThetaResolution(21);
        vtkSmartPointer<vtkPolyDataMapper> mapper =
          vtkSmartPointer<vtkPolyDataMapper>::New();
        mapper->SetInputConnection ( source->GetOutputPort());
        vtkSmartPointer<vtkActor> actor =
          vtkSmartPointer<vtkActor>::New();
        actor->SetMapper ( mapper );
        double r, g, b;
        r = vtkMath::Random(.4, 1.0);
        g = vtkMath::Random(.4, 1.0);
        b = vtkMath::Random(.4, 1.0);
        actor->GetProperty()->SetDiffuseColor(r, g, b);
        actor->GetProperty()->SetDiffuse(.8);
        actor->GetProperty()->SetSpecular(.5);
        actor->GetProperty()->SetSpecularColor(1.0,1.0,1.0);
        actor->GetProperty()->SetSpecularPower(30.0);
        renderer->AddActor ( actor );
        }
     
      renderer->SetBackground ( .3, .4, .5 );
     
      // Render and interact
      renderWindow->Render();
      renderWindowInteractor->Initialize();
      renderWindowInteractor->Start();
     
      return EXIT_SUCCESS;
    }

        在VTK的示例中,对常用的交互方式,以及常用的自定义交互方式都进行了实现,各个示例的源码地址如下:

       

    http://www.vtk.org/Wiki/VTK/Examples/Cxx/Interaction/MoveAGlyph

    http://www.itk.org/Wiki/VTK/Examples/Cxx/Interaction/Game

    http://www.vtk.org/Wiki/VTK/Examples/Cxx/Interaction/TrackballActor

    http://www.vtk.org/Wiki/VTK/Examples/Cxx/Interaction/SelectAnActor

    http://www.vtk.org/Wiki/VTK/Examples/Cxx/Picking/HighlightPickedActor

    http://www.vtk.org/Wiki/VTK/Examples/Cxx/Interaction/Picking

    http://stackoverflow.com/questions/27628493/vtk-interacting-with-multiple-objects

    
    展开全文
  • 1.5 多种脑机交互方式的实现 人机融合是指人和机器物理上的组合或 作用。人机融合已经有了多种形式,包括脑 信号直接与机器交互,已经实现了脑 - 机接 口(BCI)、机 - 脑接口(CBI)、脑 - 脑 接口(BBI)。此外也...

    1.5 多种脑机交互方式的实现

    人机融合是指人和机器物理上的组合或 作用。人机融合已经有了多种形式,包括脑 信号直接与机器交互,已经实现了脑 - 机接 口(BCI)、机 - 脑接口(CBI)、脑 - 脑 接口(BBI)。此外也包括人体与物体的直 接融合、连接,人机的入侵式交互,比如电 子器件嵌入人体、人造肢体的某些神经化等 形成人机混合体。人机一体化实现了图灵和 非图灵计算、人工计算和自然计算、连续变 量处理和离散变量处理的高度融合,并实现 了在空间上生命体与非生命体、生命体之间 的在细胞和分子级别上进行通信或物质交 换,以多种方式突破了生命与非生命的界限。

    脑 - 机接口是获取脑信号再进行利用, 如操控机器或记性进一步计算。一个实例如 UCBC 心理学系的实验,当实验者看某一个 图像时,脑电波波形被计算机记录下来,波 形打碎重新组合,对组合的波形编译的结果, 最后合成的图像就是这个图像,就是说计算 机根据人脑波形重新制造的图像 [32]。见图 4。

    image

    通过获取脑信号操控肢体和机器的成 功实验也出现了,如美国匹兹堡大学的安 德鲁 • 施瓦茨博士等人对两只短尾猴进行了 “意念”操纵机械臂抓取食物的实验,他们在猴子脑部运动神经皮层植入 100 个微 小电极。电极彼此形成网络,每个电极与 一个神经细胞连接,这些电极还通过计算 机与机械臂相连,当脑细胞发出某种活动 指令时,电极会将接收到的信号经计算机 处理后传送给三维机械臂,指挥其完成抓 取放在面前的葡萄等食物的任务 [33-34]。

    脑 - 脑接口通讯,是将脑电波传递给计 算机,计算机把脑电波解码,进行计算机间 的通信,再通过计算机编码合成脑电波,传 递给第二个脑,让这个脑产生第一个脑类似 的思维。当前的实验实现了这一点。这个实 验在印度法国异地做的。一个在印度的人想 了一个问候的一句话,然后通过脑电波识别, 远程传送给法国,法国当地的一个人接受和 理解了这个信号。这两个人在两个国家,脑 电波进行通讯 [35],如图 5 所示,身在印度的 实验者用脑电波对位于法国的人说出了 hola 和 ciao( 西班牙语和意大利语“你好”),对 方通过脑电波理解了这个问候。

    image

    脑 - 机接口实现了以物理装置接收意识 或者以机器制造意识并使人体接受。这是意识 物理化的直接的、可经验和实证的直观证据, 并在一定程度上由意识体之间的直接交互。

    展开全文
  • ②ESP8266与手机交互多种方式

    千次阅读 2019-03-02 00:23:45
    说明:学习edp8266模块与手机发送与接收数据,这节为今后学习8266与8266模块的交互和使用手机控制8266模块的的目的。 一、原料 硬件:①esp8266-wifi模块②usb转ttl③5v转3.3v模块④杜邦线 软件:安卓下安装...

    说明:学习edp8266模块与手机发送与接收数据,这节为今后学习8266与8266模块的交互和使用手机控制8266模块的的目的。

    一、原料

    硬件:①esp8266-wifi模块②usb转ttl③5v转3.3v模块④杜邦线

    软件:安卓下安装“有人网络助手”

    二、TCP

    1、AP模式下模块的tcp服务配置步骤

    在这里插入图片描述

    2、手机作为tcp客户端连接模块

    在这里插入图片描述在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    3、模块与手机交互

    手机端发送数据

    在这里插入图片描述

    串口工具接收数据后显示

    在这里插入图片描述

    串口工具发送数据AT+CIPSEND

    在这里插入图片描述

    在这里插入图片描述
    手机接收到数据

    在这里插入图片描述

    尝试许久之后,你会发现,这样的方式送数据是不是很麻烦,每次都要AT+CIPSEND一次才能发送一次数据。下一章将会讲一下透传模式。
    

    三、UDP

    与TCP一样的配置步骤:
    模块连接好热点AT+CWJAP=”ssid”,”password”
    模块设置为多连接模式AT+CIPMUX=1
    手机在udp server项配置udp端口,和记录手机ip
    模块进行UDP连接AT+CIPSTART=0,”UDP”,”192.168.***.***”,端口号1,端口号2
    (端口号1是指手机udp server的端口号,端口号2是设置模块的端口号)

    会遇到的问题:

    1.为什么连上udp之后,模块能收到手机数据而手机收不到模块数据,或者是手机收的到模块数据而模块收不到手机数据?
    答:检查端口号1和端口号2是否写对,是否写反。

    展开全文
  • 项目开发过程中很多地方都需要前端和后台的数据交互,几种典型常用的方法如利用控件的AutopostBack属性、Button提交表单等等。但这些都是有条件的,AutoPostBack具有实时性但会刷新页面,Button提交表单不能实现数据...
  • 本文主要是总结出应用层与内核驱动层的主要交互方式,并提供示例代码分析交互过程。但不涉及更细节的内核代码的分析。 应用层与内核驱动层交互的方式多种多样,这里只写出了我目前理解到的3种方式,至于其它等以后再...
  • Android客户端与服务器交互方式(1)Android客户端与服务器端的数据交互有多种,最常见的就是webservice和json。为了与服务器端交互主要通过通信协议,常用的就是Http和TCP。Http基于TCP,TCP协议对应传输层,Http协议...
  • 操作对象应支持一种或多种交互方式。每种交互方式都具备“目标选中”和“目标执行”两个属性。系统或应用级别的操作型控件应考虑一种或多种交互方式。如果当前GUI界面中,不同控件的交互方式尽量保持统一,若存在...
  • 概述  一般来说,如果系统是一个纯粹的C/S模式的MIS应用系统,则与外部程序的交互比较少,PB本身提供的功能就足够实现所有的功能;但有的时候,当对系统的界面,性能要求比较严,或是在系统中还有很多其它的...
  • 在真实的区块链项目中,一般会提供多种交互方式,比如提供客户端命令行方式、websocket方式等等,最终由区块链server提供统一的rpc服务。我们目前先实现浏览器方式,以后会逐步扩充。 Http S...
  • 概述: ... 用户空间与内核有多种交互方式,最常用的有以下四种:通过/proc虚拟文件系统,通过/sys虚拟文件系统,通过ioctl系统调用,通过Netlink socket。 其中编写程序时最常使用ioctl,这四种方式...
  • 核心态和用户 态数据的交互方式

    千次阅读 2009-07-30 12:24:00
    核心态和用户 态数据的交互,有多种方式:1:可以通用socket创建特殊套接字,利用套接字实现数据交互;2:通过proc文件系统创建文件来进行数据交互;3:还可以使用设备 文件的方式,访问设备文件会调用设备驱动相应...
  • Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互,传值的方式通过key-value传值。 Intent传参数:...
  • 在今年五一节,海尔以“全球品质 见证经典”为主题率先在业内开启了品质家电的消费热潮,从智能家电产品升级和全流程品质体验入手,以百名网红直播和用户自主体验等多种交互方式开启了“社群交互+用户体验”的五一...
  • pyqt5中的多窗口数据交互多种方式方式1:直接访问控件数据—一般不推荐使用(代码的耦合度高) 方式2:通过信号来传输数据,推荐使用,代码的耦合度低,可操作性强 主窗口的代码: #coding=utf8 import sys ...
  • 电子游戏角色以多种不同方式与世界上的物体互动。 他们爬上,跳下并抓住物体。 他们在冰上滑行,然后潜入水中。 这项工作背后的想法是提供一个模块化且易于使用的框架,以简化创建所有这些不同交互的过程。 注意:...
  • 跨域是我们在项目中经常遇到的,前后端数据交互经常碰到请求跨域,首先我们来想一下为什么会有跨域这个词的出现?本文带你来探讨一下以下几个问题: 跨域是什么? 为什么要跨域? 跨域的几种方式? … 什么是跨域...
  • Shell脚本的多种执行方式解析

    千次阅读 2017-04-12 13:13:12
    当shell脚本以非交互方式运行时,它会先查找环境变量ENV,该变量指定了一个环境文件(通常是.bashrc),然后从该环境变量文件开始执行,当读取了ENV文件之后,SHELL才开始执行shell脚本中的内容。(所以全局变量可以...
  • 微信小程序使用spring boot 做 服务器后台,通过rest_api交互,用户小程序登录后可以利用jwt 来保护rest api 和一此网站资源。 另外也使用相同的spring boot 程序开发一个让管理员使用的后台,如管理微信用户在小...
  • 许多新的设备如雨后春笋般层出不穷,但总体来看,他们都有一些共同的特性,那就是具备高清晰的显示能力,屏幕比较大、有良好的视觉效果,支持友好的触摸交互方式,带有很多新式的传感器模块,如GPS,温度感应器、...
  • Python学习教程(Python学习路线):教你如何在交互式环境中执行Python程序相信接触过Python的伙伴们都知道运行Python脚本程序的方式多种,目前主要的方式有:交互式环境运行、命令行窗口运行、开发工具上运行等,...
  • 命令行中使用非交互式数据库密码备份数据 备份一个库,命令格式如下: [root@frp mnt]# mysqldump -u 数据库中的用户名 -p 备份数据库的库名 > /本地主机物理路径/数据库备份文件名称.sql Enter password: 输入...
  • 通信服务提供接口是web3如何与区块链交互的关键。接口接受JSON-RPC请求并返回响应。... 如果你已经愉快地连接到你...大多数节点都有多种连接方式。如果你尚未确定要使用哪种节点,请转到如何选择要使用的节点? 连接节...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,762
精华内容 704
关键字:

多种交互方式