kvm安装

1、在宿主机上准备好yum(只需要本地镜像yum就可以)

2、查看CPU是否支持inter或AMD的虚拟技术

# cat /proc/cpuinfo |grep -E "vmx|svm"

3、安装kvm

# yum install qemu-kvm libvirt virt-install libvirt-python virt-manager virt-install libvirt-client virt-viewer

4、确认是否有装在kvm模块,没有装载可以使用modprobe kvm来装载

# lsmod |grep kvm
kvm_intel 170181 0
kvm 554609 1 kvm_intel
irqbypass 13503 1 kvm

5、启动并设置为开机自启动

# systemctl start libvirtd
# systemctl status libvirtd
# systemctl enable libvirtd

启动报错排查

[root@server ~]# systemctl start libvirtd
Job for libvirtd.service failed because the control process exited with error code. See "systemctl status libvirtd.service" and "journalctl -xe" for details. [root@server ~]# journalctl -xe
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit libvirtd.service has failed.
--
-- The result is failed.
1月 :: server systemd[]: Unit libvirtd.service entered failed state.
1月 :: server systemd[]: libvirtd.service failed.
1月 :: server systemd[]: libvirtd.service holdoff time over, scheduling restart.
1月 :: server systemd[]: start request repeated too quickly for libvirtd.service
1月 :: server systemd[]: Failed to start Virtualization daemon.
-- Subject: Unit libvirtd.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit libvirtd.service has failed.
--
-- The result is failed.
1月 :: server systemd[]: Unit libvirtd.service entered failed state.
1月 :: server systemd[]: libvirtd.service failed. 查看/var/log/messages日志发现:
Jan :: server libvirtd: -- ::44.437+: : error : virModuleLoadFile: : 内部错误:Failed to load module '/usr/lib64/libvirt/storage-backend/libvirt_storage_backend_rbd.so': /usr/lib64/libvirt/storage-backend/libvirt_storage_backend_rbd.so: undefined symbol: rbd_diff_iterate2 解决办法:
# cd /usr/lib64/libvirt/storage-backend
# mv libvirt_storage_backend_rbd.so libvirt_storage_backend_rbd.so.back 再次启动就ok

/var/log/messages日志报错信息:virModuleLoadFile:53

kvm安装虚拟机

图形安装

 --和xen一样的命令,打开虚拟机管理器
# virt-manager   

第一步、

安装方式:         --我这里选择第一个,使用iso直接安装

第二步、

安装路径:/data/CentOS-7-x86_64-DVD-1611.iso                  --写上iso的路径

第三步、

内存大小: 800M          -- 内存如果较小,安装时无法使用图形安装方式,只能使用文本安装方式

cpu个数:2                 --不能大于宿主机器的cpu核数

第四步、

硬盘大小:20G          --我这里定义20G大小;它的默认路径会在/var/lib/libvirt/images/kvm1.qcow2

第五步、

name:kvm1              --自定义一个虚拟机名称

网络现在只能选择default --这是一个nat网络(私有网络),桥接网络不能选,需要后面单独配置后才能选择

命令行安装

# virt-install --hvm --name "kvm1" --memory 800 --vcpus 2  --disk=/var/lib/libvirt/images/kvm1.qcow2,size=20 -l /share/CentOS-7-x86_64-DVD-1611.iso --network bridge=virbr0

--hvm 指使用全虚拟化

kvm主要的管理命令

virsh help
virsh help domain
virsh help network
virsh help monitor --因为参数很多,可以用象domain,network,monitor这种关键字,只查看与关键字有关的参数帮助
......
# virsh  list
Id Name State
----------------------------------------------------
1 kvm1 running # virsh list --all
Id Name State
----------------------------------------------------
1 kvm1 running
- kvm2 shut off

启动、关闭、重启相关

# virsh  start kvm1       --启动一个虚拟机
# virsh shutdown kvm1 --正常关闭一个虚拟机(把服务都停掉,再关电源)
# virsh reboot kvm1 --正常重启一个虚拟机,先shutdown再start
# virsh  destroy kvm1     --强制关闭一个虚拟机,类似断电,可以瞬间关闭虚拟机     

# virsh  reset kvm1       --相当于是先destroy,再start

保存、暂停相关

# virsh save kvm1 /etc/libvirt/qemu/kvm1.save      --把kvm1关闭,并把当前状态保存为一个文件    

# virsh restore /etc/libvirt/qemu/kvm1.save    --通过保存的文件,恢复当时save时的状态

# virsh suspend kvm1    --暂停kvm1的状态

# virsh resume kvm1    --由暂停切换为继续的状态

连接虚拟机相关

方法一:

# virt-manager 打开管理器,双击你要连接的虚拟机

方法二:

# virt-viewer  kvm1   --连接一个已经启动的虚拟机,并使用图形查看

方法三:

# ssh x.x.x.x   --非图形方式就可以连,但需要虚拟机配置好ip

方法四:

非图形方式也可以使用console连(此方法不需要虚拟机配置ip都可以连),但需要配置授权

# virsh console kvm1   --字符连接一个虚拟机,但是现在连接不了;因为需要一个串口的授权才可以;

授权做法:

1,在kvm1虚拟机里操作(注意不是在宿主机上操作)
# grubby --update-kernel=ALL --args="console=ttyS0"
# reboot
2,在宿主机virsh console kvm1连接使用 
3,退出的方式
exit只是退出登录的用户而已
要完全退出这个console连接,需要使用的是ctrl+ ] (也就是右中框号的这个键)

虚拟机相关的文件

以kvm1为例:

配置文件在:

/etc/libvirt/qemu/kvm1.xml

磁盘文件默认在:

/var/lib/libvirt/images/kvm1.qcow2

打开虚拟机配置文件的做法:

方法一:

# vim /etc/libvirt/qemu/kvm1.xml

方法二:

# virsh edit kvm1      --此方法默认是调用vi,所以没有颜色,你可以做个软链接,让访问vi实际链接到vim就可以了

命令删除一个虚拟机的做法(假设kvm3)

# virsh destroy kvm3

# virsh undefine kvm3

# rm -rf /var/lib/libvirt/images/kvm3.img

kvm的克隆

--注意:克隆都需要源虚拟机器是关闭或者暂停状态

图形克隆

  • 先关闭kvm1或 virsh suspend kvm1暂停kvm1(使用virsh resume kvm1恢复)
  • virt-manager--》右键点kvm1--》选择clone-->修改克隆后的名字或其它参数--》点clone

文本克隆

1、拷贝配置文件和磁盘文件

# cp /etc/libvirt/qemu/kvm1.xml /etc/libvirt/qemu/kvm3.xml

# cp /var/lib/libvirt/images/kvm1.qcow2 /var/lib/libvirt/images/kvm3.qcow2

2、修改拷贝的配置文件

# vim /etc/libvirt/qemu/kvm3.xml

<domain type='kvm'>
<name>kvm3</name> --名字改成kvm3
<uuid>811d69e8-b1d8-cfbf-684a-69f2e0af6b88</uuid> --uuid随便改几个数字
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>2</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source file='/var/lib/libvirt/images/kvm3.qcow2'/> --磁盘路径改成kvm3.qcow2的路径
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</disk>
<disk type='block' device='cdrom'>
<driver name='qemu' type='raw'/>
<target dev='hdc' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='1' target='0' unit='0'/>
</disk>
<controller type='usb' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<interface type='bridge'>
<mac address='52:54:00:5c:3a:2d'/> --网卡地址随便改下,只改后三位
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<input type='tablet' bus='usb'/>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes'/>
<sound model='ich6'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</sound>
<video>
<model type='cirrus' vram='9216' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</memballoon>
</devices>
</domain>

3、保存后,使用virsh list --all查看不到的,需要define一下

# virsh define /etc/libvirt/qemu/kvm3.xml
# virsh list --all        --再查就可以查看到kvm3
Id Name State
----------------------------------------------------
- kvm1 shut off
- kvm1-clone shut off
- kvm2 shut off
- kvm3 shut off

4、再启动

# virsh start kvm3   --可以启动克隆的机器了

命令克隆

# virt-clone -o kvm1 -n kvm4 -f /var/lib/libvirt/images/kvm4.img
Allocating kvm4.img 7% [- ] 34 MB/s | 957 MB 05:29 ETA

--把kvm1克隆成kvm4,指定磁盘路径为/var/lib/libvirt/images/kvm4.img;如果kvm1有多个硬盘,那么克隆时也要对应的克隆成多个路径

kvm网络管理

只查看与网络有关的帮助参数

# virsh  help network
# virsh net-list --all
Name State Autostart
-----------------------------------------
default active yes --这是一个NAT网络,私有网络
# virsh net-info default
Name default
UUID 704eb1b7-3feb-4a38-8642-9c3fe2f023bb
Active: yes
Persistent: yes
Autostart: yes
Bridge: virbr0

default网段的配置文件的路径为:

/etc/libvirt/qemu/networks/default.xml
# virsh net-destroy default        --停掉default网络,由virsh net-list --all去查看,状态变为inactive
# virsh net-start default --启动default网络,状态变为active

图形增加私有网络

virt-manager打开图形--》edit --》connections details --》 virtual networks--》点左下角的+号增加一个私有网络(选择名字,网络分配地址范围,dhcp的分配范围)

注意:这里最后一步有三种网络:

1、isolated 相当vmware的hostonly,没有NAT,也没有网关(完全和vmware的hostonly类型一样)

2、NAT 有网关,有NAT,可以通过宿主上外网(和vmware的NAT类型一样)

3、routed 也是相当于hostonly,在isolated的基础上就是加了一个网关(仍然是和vmware的hostonly一致,但多了一个网关)

把上面的步骤做完后,直接在宿主机用ifconfig或virsh net-list --all,就可以看到新加的网络了

手动增加私有网络

1、拷贝一个网络配置文件并编辑

# cp /etc/libvirt/qemu/networks/default1.xml /etc/libvirt/qemu/networks/default2.xml
# vim /etc/libvirt/qemu/networks/default2.xml
<network>
<name>default2</name> --修改名字为default2
<uuid>243166ddb-e2fd-9983-1997-5e8efdc06c42</uuid> --uuid随便修改一下
<bridge name='virbr2' stp='on' delay='0' /> --virbr1改成virbr2
<mac address='52:54:00:AF:27:25'/> --MAC地址改一下,只改后面三位
<ip address='192.168.101.1' netmask='255.255.255.0'> --IP改为101
<dhcp>
<range start='192.168.101.128' end='192.168.101.254' /> --dhcp地址范围也改成101的
</dhcp>
</ip>
</network>

2、定义一下,然后就可以使用virsh  net-list --all去查看,状态为inactive,autostart的状态为no

# virsh net-define /etc/libvirt/qemu/networks/default2.xml

3、启动

# virsh net-start default2

4、查看

# ifconfig virbr2 |head -2    --查看就有了
virbr2 Link encap:Ethernet HWaddr 52:54:00:AF:27:25
inet addr:192.168.101.1 Bcast:192.168.101.255 Mask:255.255.255.0
# ls /etc/libvirt/qemu/networks/autostart/
default1.xml default.xml

5、设置为开机自动启动

# virsh net-autostart default2

# ls /etc/libvirt/qemu/networks/autostart/    --这里就会多了default2.xml了,其实都是网络配置文件的软链接
default1.xml default2.xml default.xml

刚加的网络配置文件都在下面的目录

# ls /etc/libvirt/qemu/networks
autostart default1.xml default2.xml default.xml

修改一个网络

1、编辑配置文件

# vim /etc/libvirt/qemu/networks/default2.xml    

<network>
<name>default2</name>
<uuid>243166ddb-e2fd-9982-1996-5e8efdc06c42</uuid>
<forward dev='eth0' mode='route'>
<interface dev='eth0'/>
</forward>
<bridge name='virbr2' stp='on' delay='0' />
<mac address='52:54:00:AF:166:45'/>
<ip address='192.168.102.1' netmask='255.255.255.0'> --我这里把以前的192.168.101.0的IP范围都改成了192.168.102.0
<dhcp>
<range start='192.168.102.128' end='192.168.102.254' />
</dhcp>
</ip>
</network>

保存后,使用ifconfig virbr1 查看,还是192.168.102.1, 没有改变

需要做下面三步:

2、定义一个网络,使你的修改被他知道

# virsh net-define /etc/libvirt/qemu/networks/default2.xml  --定义一个网络,使你的修改被他知道
Network default2 defined from /etc/libvirt/qemu/networks/default3.xml

3、停一下这个网络

# virsh net-destroy default2    --停一下这个网络
Network default2 destroyed

4、再启动这个网络

# virsh net-start default2    --再启这个网络
Network default2 started

ifconfig virbr2查看,成功修改成192.168.102.1

上面的第一步和第二步可以统一成一步来做:

# virsh  net-edit default2   --使用这个命令打开,修改,然后就直接net-destroy和net-start,不需要去net-define

删除一个网络

图形删除一个网络

virt-manager打开图形--》edit --》connections details --》 virtual networks--》选择你要删除的网络,然后左下角,先停,再删除就可以了

命令删除一个网络

# virsh net-destroy default2    --停掉要删除的网络,用virsh net-list --all命令去查就变成了inactive状态

# virsh net-undefine default2  --这下就删除了这个网络定义了,并且物理上的配置文件也没了

增加一个桥接网络

把物理网卡enp2s0桥接到br0(这个名字是自己定义的)

1、在宿主机上创建一个桥接网络

# systemctl stop NetworkManager
# systemctl status NetworkManager
# systemctl disable NetworkManager
# vim /etc/sysconfig/network-scripts/ifcfg-br0  --此文件不存在,br0这个名字是自定义的
DEVICE=br0 --名字对应好
TYPE=Bridge --这里的Birdge,B要大写,后面的irdge要小写
BOOTPROTO=static
IPADDR=172.16.13.X
NETMASK=255.255.255.0
GATEWAY=172.16.13.254
DNS1=114.114.114.114
ONBOOT=yes

2、把一个物理网卡加到一个桥接网络里,这里是把enp2s0加到br0

# vim /etc/sysconfig/network-scripts/ifcfg-enp2s0     --原物理网卡enp2s0里的配置只留下这三句就可以了
DEVICE="enp2s0"
ONBOOT="yes"
BRIDGE=br0

3、重启网络

/etc/init.d/network restart 或者 systemctl restart network

在宿主机上ifconfig 查看就会有br0这个网卡,有IP;而原enp2s0网卡没有IP;这是正常的

修改虚拟机的网卡连接

图形修改

virt-manager打开图形,双击你要修改的虚拟机--》点击左上的一个!号(centos7里看到的是一个像灯泡一样的符号)按钮show virtual hardware detail-->>找个网卡,修改成你想要改的网络

命令修改

# virsh edit kvm3

    <interface type='network'>
<mac address='52:54:00:07:8d:e5'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface> 改成下面的样子 <interface type='bridge'> --network改成了bridge
<mac address='52:54:00:07:8d:e5'/>
<source bridge='br0'/> --network改成了bridge;default改成了br0
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
# virsh shutdown kvm1

# virsh start kvm1    --重启后,虚拟机就是桥接网络

kvm磁盘管理

图形添加硬盘设备

virt-manager--》 双击打开kvm4--》点左上角的灯泡符号show virtual hardware details --》点左下角add devices 直接添加,并写上相关参数就可以(注意参数,device type都选择virtio,不需要重启虚拟机,可以直接生效,并且磁盘名叫vda,vdb,vdc...;如果你第一次加硬盘选择IDE disk,需要重启,并且磁盘名叫sda,sdb,sdc...)

注意:用图形方式在线删除磁盘后,还要去物理上把它的磁盘xxx.qcow2文件给rm掉

命令添加硬盘设备

1、使用dd命令创建一个磁盘文件

# dd if=/dev/zero of=/var/lib/libvirt/images/kvm4-2.img bs=1M count=1 seek=4000000
--seek是指跳过多少个BS块,这里就是产生一个4T大小的文件(实际大小只1M)
# qemu-img info /var/lib/libvirt/images/kvm4-2.img
image: /var/lib/libvirt/images/kvm4-2.img
file format: raw --格式为raw(这是老版本的默认格式,新版本是qcow2格式)
virtual size: 3.8T (4194305048576 bytes)
disk size: 1.0M
# cd /var/lib/libvirt/images/
# qemu-img convert -f raw -O qcow2 kvm4-2.img kvm4-2.qcow2 --把kvm4-2.img文件转换成一个新文件kvm4-2.qcow2(格式也转换成qcow2)
# rm kvm4-2.img -rf --原来的这个文件不用了就可以删除掉了
# qemu-img info /var/lib/libvirt/images/kvm4-2.qcow2
image: /var/lib/libvirt/images/kvm4-2.qcow2
file format: qcow2 --转化后的新文件格式就为qcow2格式了
virtual size: 3.8T (4194305048576 bytes)
disk size: 256K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false

2、编辑虚拟机的配置文件

# virsh edit kvm4
<devices>与</devices>之间加上下面的一段,也可以把其它磁盘的配置定义拷贝一段进行修改 <disk type='file' device='disk'>
<driver name='qemu' type='qcow2' /> --格式为qcow2
<source file='/var/lib/libvirt/images/kvm4-2.qcow2'/> --路径名称改成kvm4-2.qcow2
<target dev='vdb' bus='virtio'/> --新加的硬盘,就叫vdb
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/> --slot也改一下,我这里是把0x07改成0x09(只要这个编号没有被重复占用就可以)
</disk>

3、重启虚拟机后(有可能reboot还不行,需要force off再启动),登录使用fdisk就能查看到这个4T大小的硬盘了

迁移磁盘目录

比如宿主机的/var目录空间不够,想把磁盘文件改到气他目录(如/data/kvm/目录)

# virsh destroy kvm1  --先停掉kvm1

# mv /var/lib/libvirt/images/kvm1.qcow2 /data/kvm/

# virsh edit kvm1
......
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' />
<source file='/data/kvm/kvm1.qcow2'/> --把这个路径改成mv后的新路径
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</disk>
...... # virsh start kvm1

Linux-KVM虚拟化的更多相关文章

  1. kvm虚拟化学习笔记(二)之linux kvm虚拟机安装

    KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...

  2. Linux中安装配置KVM虚拟化

    KVM 概述: KVM 即 Kernel-based Virtual Machine 基于内核的虚拟机. KVM,是一个开源的系统虚拟化模块,自 Linux 2.6.20 之后集成在 Linux 的各 ...

  3. [原] KVM 虚拟化原理探究(1)— overview

    KVM 虚拟化原理探究- overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验.同时希望借此系列博客,能够对KVM底层 ...

  4. [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化

    KVM 虚拟化原理探究(6)- 块设备IO虚拟化 标签(空格分隔): KVM [toc] 块设备IO虚拟化简介 上一篇文章讲到了网络IO虚拟化,作为另外一个重要的虚拟化资源,块设备IO的虚拟化也是同样 ...

  5. [原] KVM 虚拟化原理探究(5)— 网络IO虚拟化

    KVM 虚拟化原理探究(5)- 网络IO虚拟化 标签(空格分隔): KVM IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理.作为一个完整的风诺依曼计算机系统,必然有输 ...

  6. [原] KVM 虚拟化原理探究(3)— CPU 虚拟化

    KVM 虚拟化原理探究(3)- CPU 虚拟化 标签(空格分隔): KVM [TOC] CPU 虚拟化简介 上一篇文章笼统的介绍了一个虚拟机的诞生过程,从demo中也可以看到,运行一个虚拟机再也不需要 ...

  7. [原] KVM 虚拟化原理探究(2)— QEMU启动过程

    KVM 虚拟化原理探究- QEMU启动过程 标签(空格分隔): KVM [TOC] 虚拟机启动过程 第一步,获取到kvm句柄 kvmfd = open("/dev/kvm", O_ ...

  8. kvm虚拟化平台搭建入门

    KVM虚拟化有两种网络模式:1)Bridge网桥模式2)NAT网络地址转换模式Bridge方式适用于服务器主机的虚拟化.NAT方式适用于桌面主机的虚拟化. 环境: 本次实验要开启VMWare中对应Ce ...

  9. linux网络虚拟化

    图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN http://smilejay.com/2012/08/qemu-kvm-networking-m ...

  10. KVM虚拟化技术

    KVM虚拟化技术 Qemu-kvm kvm virt-manager VNC Qemu-kvm创建和管理虚拟机 一.KVM简介 KVM(名称来自英语:Kernel-basedVirtual Machi ...

随机推荐

  1. js或jquery实现点击某个按钮或元素显示div,点击页面其他任何地方隐藏div

    点击某个元素显示div,点击页面其他任何地方隐藏div,可用javascript和jquery两种方法实现: 一:javascript实现方法技巧<script>//定义stopPropa ...

  2. WebGL或OpenGL关于模型视图投影变换的设置技巧

    目录 1. 具体实例 2. 解决方案 1) Cube.html 2) Cube.js 3) 运行结果 3. 详细讲解 1) 模型变换 2) 视图变换 3) 投影变换 4) 模型视图投影矩阵 4. 存在 ...

  3. Dynamics 365-关于Solution的那些事(二)

    接着上一篇的说,现在有一个已知前提:Solution的增量特性.然后我们再思考这么一个场景,项目开发过程中,存在多次迭代的情况,每次迭代可能涉及到的solution是同一个,唯一区别的,就是solut ...

  4. Android为TV端助力之Webview与JS双向交互

    package com.hhzt.iptv.adservice; import android.app.Activity;import android.graphics.Bitmap;import a ...

  5. 从零学习Fluter(六):Flutter仿boss直聘v1.0重构

    今天继续学习flutter,觉得这个优秀的东西,许多方面还需要完善,作为一个后来者,要多向别人学习.俗话说,“学无先后,达者为师”.今天呢,我又重新把flutter_boss这个项目代码 从头到脚看了 ...

  6. dotnet core如何编译exe

    dotnet core 有一个转变,他用dll格式来代替exe作为通用执行格式,然后要命令行dotnet yourApp.dll 来运行程序.为了提高逼格,双击可以运行,可以采用以下方案: 方案一 用 ...

  7. MyDAL - .UpdateAsync() 之 .SetSegment 根据条件 动态设置 要更新的字段 使用

    索引: 目录索引 一.API 列表 1.SetSegment 属性,指示 根据条件 动态拼接 要修改的字段 见如下示例. 二.API 单表-完整 方法 举例 // update 要赋值的变量 var ...

  8. django csrf token添加

    #views.py from django.shortcuts import render_to_response, RequestContext from django.views.decorato ...

  9. 理解SignalR

    ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现即时通信(即:客户端(Web页面)和服务器端可以互相实时的通知消息及调用方法),即时通讯W ...

  10. Bloom Filter(布隆过滤器)如何解决缓存穿透

    本文摘抄自我的微信公众号"程序员柯南",欢迎关注!原文阅读 缓存穿透是什么? 关于缓存穿透,简单来说就是系统处理了大量不存在的数据查询.正常的使用缓存流程大致是,数据查询先进行缓存 ...