日常笔记19/2/28-19/3/03

一:19/2/28   周四

1):  Servlet之cookie和session

简介:因为HTTP是无状态的请求,为记录客户端与服务端交互数据,Servlet基于浏览器的cookie机制实现了Session来解决客户端与服务端的交互数据。

Cookie    是存储在客户端计算机上的文本文件(浏览器可以存储多个cookie并以一种map的形式管理这些cookie)

Session   相反Session是存储在服务端的数据(存储在内存中)  ,数据是一种key=value形式,其中value是一种map集合(即一个key对应多个key1=value2的属性)

**)   客户端(浏览器或手机)一旦与服务器交互(无论是get或post请求),服务器只有需要(request.getSession()  返回新创建的或之前的Session对象)时才会创建一个session对象,并相应返回一个sessionid(即该对象的id)给客户端。客户端会把该信息存储在浏览器的cookie集合中,如下图。

 

备注:由浏览器存储sessionID的形式,我们可以推断,服务器就是创建了一个Cookie("JSESSION",SESSIONID)相应给浏览器(下面的就是我在服务端创建的Cookie)。

**)   一旦服务器相应cookie给客户端(比如显示设置了1个),客户端每次发送请求到给服务端都会携带该多个cookie(数量为显示设置的cookie数加一)。故我们不应该设施太多cookie值,避免和服务器交互时产生多余的数据。

备注:  故我们可以手动创建cookie,来实现session功能。

***): JavaScript也实现了一种cookie机制(JavaScript 可以使用 document.cookie 属性来创建 、读取、及删除 cookie。),注意他两不是一回事。

备注1:document.cookie可以查看和修改服务器返回的cookies,(修改后的值也传送到服务器了??是的验证过)

备注2:通过document.cookie创建的cookie不会传送到服务器。(也可以理解是一种保护机制^_^,但为什么可以修改??)

git 地址 

 

二:19/3/02   周六

 

1): Docker 之docker-compose.yml文件

前言:在介绍 docker-compose.yml文件之前你必须已经了解docker的镜像和容器以及服务(Service)的关系(可以理解为服务是生成中的容器(官方定义:Services are really just “containers in production.”))。

使用目的:设置集群,该文件就是集群的管理文件,它可以实现动态部署容器的个数,实现负载均衡的目的

eg: 一个简单的docker-compose.yml文件

version: "3"    //定义版本
services:
  web:        //
    # replace username/repo:tag with your name and image details
    image: username/repo:tag      //镜像地址
    deploy:          //部署
      replicas: 5     //部署5个容器
      resources:      //定义每个容器的使用资源
        limits:
          cpus: "0.1"    
          memory: 50M
      restart_policy:   //定义每个容器 重启策略  
        condition: on-failure    //如果一个失败,立即重启容器。
    ports:
      - "4000:80"  //定义容器报漏端口和容器端口
    networks:
      - webnet
networks:
  webnet:   //webnet使用默认设置(负载平衡的覆盖网络)定义网络。

使用步骤:

步骤一: 定义docker-compose.yml文件内容如上。

步骤二: 定义集群

      创建集群机器:

      docker-machine create --driver virtualbox myvm1
      docker-machine create --driver virtualbox myvm2 
初始化集群:把myvm1设置称管理器  
docker-machine ssh myvm1 "docker swarm init --advertise-addr <myvm1 ip>" 
加入集群:
把myvm2机器加入集群
docker-machine ssh myvm2 "docker swarm join
--token <token>
<ip>:2377"
复制docker-compose.yml到myvm1虚拟机的home目录:
docker-machine scp docker-compose.yml myvm1:~

步骤三 

进入myvm1机器并执行命令:启动集群
docker-machine ssh myvm1 "docker stack deploy -c docker-compose.yml getstartedlab"
附加:
docker-machine使用命令
docker-machine create --driver virtualbox myvm1 # Create a VM (Mac, Win7, Linux)
docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1 # Win10
docker-machine env myvm1                # View basic information about your node
docker-machine ssh myvm1 "docker node ls"         # List the nodes in your swarm
docker-machine ssh myvm1 "docker node inspect <node ID>"        # Inspect a node
docker-machine ssh myvm1 "docker swarm join-token -q worker"   # View join token
docker-machine ssh myvm1   # Open an SSH session with the VM; type "exit" to end
docker node ls                # View nodes in swarm (while logged on to manager)
docker-machine ssh myvm2 "docker swarm leave"  # Make the worker leave the swarm
docker-machine ssh myvm1 "docker swarm leave -f" # Make master leave, kill swarm
docker-machine ls # list VMs, asterisk shows which VM this shell is talking to
docker-machine start myvm1            # Start a VM that is currently not running
docker-machine env myvm1      # show environment variables and command for myvm1
eval $(docker-machine env myvm1)         # Mac command to connect shell to myvm1
& "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env myvm1 | Invoke-Expression   # Windows command to connect shell to myvm1
docker stack deploy -c <file> <app>  # Deploy an app; command shell must be set to talk to manager (myvm1), uses local Compose file
docker-machine scp docker-compose.yml myvm1:~ # Copy file to node's home dir (only required if you use ssh to connect to manager and deploy the app)
docker-machine ssh myvm1 "docker stack deploy -c <file> <app>"   # Deploy an app using ssh (you must have first copied the Compose file to myvm1)
eval $(docker-machine env -u)     # Disconnect shell from VMs, use native docker
docker-machine stop $(docker-machine ls -q)               # Stop all running VMs
docker-machine rm $(docker-machine ls -q) # Delete all VMs and their disk images
View Code

参考地址:官方文档服务官方文档集群(Swarms)

三:19/3/03   周日

mysql数据库存储引擎

前言:前几天有同事在我们QQ小群发个一个面试题(听说是某个大公司的),由于刚看过官方文档不久,而且当时也关注了一些数据引擎的,自我感觉没啥大用处😄。但看了这个问题“mysql除了innoDB引擎你还知道那些引擎?”突然好无语,故借今天借故重游一下。不想深究只做概述。

概述:数据库引擎是用于存储、处理和保护数据的核心服务。个人理解:不同的数据库引擎就是对数据的增,删,改以及集群和持久化的数据的不同性能表现

1):  innoDB 优势

它的DML操作遵循 ACID模型, 具有 提交, 回滚和 崩溃恢复 功能的事务来保护用户数据

行级锁定和Oracle风格的一致性读取可提高多用户并发性和性能。

InnoDB表格将您的数据排列在磁盘上,以根据主键优化查询 每个 InnoDB表都有一个称为聚簇索引的主键索引 ,用于组织数据以最小化主键查找的I / O.

2):  MyISAM   

  MyISAM基于旧的(不再可用)ISAM存储引擎,但有许多有用的扩展。

* 5.0之前默认的数据库引擎

* 不支持事务

3): MEMORY 

  数据存储在内存中,该数据易受硬件因素,断电等因素影响。

4): CSV

  以文本形式(***.csv)存储数据,并且该文本可以被其它工具修改,不支持索引。

*******等等,官方文档罗列了8个数据库引擎(其它还有),但不支持第三方引擎。

备注:数据库引擎是在创建表时指定(CREATE TABLE t1 (i INT) ENGINE = INNODB;),对于不指定引擎使用默认数据库引擎(5.7以上版本默认是innoDB)

          修改表引擎:ALTER TABLE t ENGINE = InnoDB;

 



posted @ 2019-03-03 20:23  爱我-中华  阅读(142)  评论(0编辑  收藏  举报