日常笔记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
"
加入集群:把myvm2机器加入集群
docker-machine ssh myvm2 "docker swarm join--token
: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" # 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> # 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 " # 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
参考地址:官方文档服务,官方文档集群(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;