DNS BIND之rndc介绍及使用

  categories:资料  author:
rndc(Remote Name Domain Controllerr)是一个远程管理bind的工具,通过这个工具可以在本地或者远程了解当前服务器的运行状况,也可以对服务器进行关闭、重载、刷新缓存、增加删除zone等操作。
使用rndc可以在不停止DNS服务器工作的情况进行数据的更新,使修改后的配置文件生效。在实际情况下,DNS服务器是非常繁忙的,任何短时间的停顿都会给用户的使用带来影响。因此,使用rndc工具可以使DNS服务器更好地为用户提供服务。在使用rndc管理bind前需要使用rndc生成一对密钥文件,一半保存于rndc的配置文件中,另一半保存于bind主配置文件中。rndc的配置文件为/etc/rndc.conf,在CentOS或者RHEL中,rndc的密钥保存在/etc/rndc.key文件中。rndc默认监听在953号端口(TCP),其实在bind9中rndc默认就是可以使用,不需要配置密钥文件。
rndc与DNS服务器实行连接时,需要通过数字证书进行认证,而不是传统的用户名/密码方式。在当前版本下,rndc和named都只支持HMAC-MD5认证算法,在通信两端使用预共享密钥。在当前版本的rndc 和 named中,唯一支持的认证算法是HMAC-MD5,在连接的两端使用共享密钥。它为命令请求和名字服务器的响应提供 TSIG类型的认证。所有经由通道发送的命令都必须被一个服务器所知道的 key_id 签名。为了生成双方都认可的密钥,可以使用rndc-confgen命令产生密钥和相应的配置,再把这些配置分别放入named.conf和rndc的配置文件rndc.conf中。

一、语法

    # /home/slim/bind/sbin/rndc -h  
    Usage: rndc [-b address] [-c config] [-s server] [-p port]  
            [-k key-file ] [-y key] [-V] command  
      
    command is one of the following:  
      
      addzone zone 阅读全文

Linux下使用Webmin搭建DNS服务器

  categories:资料  author:
搭建DNS服务器,对于系统、网络玩的熟的人,大概几十分钟就能搞定。对于玩的不熟的人来说,也许几个小时才能摸清门路。我就属于第二种,光了解概念就花了不少时间,总结一下吧。


先了解几个概念:
DNS 是计算机域名系统 (Domain NameSystem Domain Name Service) 的缩写,它是由解析器以及域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。DNS使用TCPUDP端口号都是53,主要使用UDP,服务器之间备份使用TCP当我们在浏览器的地址栏里敲入地址:www.163.com访问网易网站的时候,事实上www.163.com最终会被解析成218.60.31.75这个IP地址,而我们的浏览去访问这个
阅读全文

mBlock和Scratch2.0的区别

  categories:资料  author:
很多新客户不太了解mBlock软件跟Scratch2.0软件有什么异同,现在紫薇来给大家分享一下这两个软件之间的区别和联系。首先是官方Scratch2.0软件,考虑到新客户对Scratch2.0还不是很了解,那就简单介绍一下什么是Scratch。


什么是Scratch?
Scratch是一个免费下载并且开源的图形化编程软件。由美国麻省理工学院实验室研发,只需要使用图示拼贴方式,就可简易地创作出具有互动性故事,游戏,动画,音乐,美术或简报作品,更可即时上传作品到互联网,与世界各地的朋友一同分享,是低门槛,高效益的自主学习和创作工具。8岁及以上的学生们都可以用scratch来实现编程。现在总共有两个版本:一个是Scratch1.4版,另外一个是2.0版。本帖提到的Scratch软件默认指最新版Scratch2.0。
Scratch2.0软件界面




什么是mBlock?
mBlock软件由深圳市创客工场科技有限公司基于开源Scaratch2.0软件研发出来。由于Scratch只能在电脑显示,跟外面物理世界是完全隔离开的,为了提高同学们的编程兴趣以及更加广泛地学习电子知识,我们完善了Scratch源代码,在这基础上添加了电子模块指令,将学生从电脑的虚拟世界带到了现实的物理世界。极大的扩展了学生的编程领域,同时也让同学们了解更多的知识。



mBlock软件界面

mBlock的改进:1.菜单方面
跟官方Scratch版本相比,mBlock新增如下菜单
A.示例程序:提供电子模块跟Scratch结合的案例,让用户快速入门。
B.串口: mBlock可以通过USB串口与Arduino兼容的主控板通讯。
C.蓝牙连接:也可以通过主控板上的
蓝牙模块与mBlock进行无线通讯。
D.网络: 在同一个局域网内,多个mBlock可以互相通讯。
E.固件版本: mBlock右上角有一个显示主控板固件版本的功能,当没有检测到主控板或没有安装固件时,软件会显示“未知固件”。



红色方框就是mBlock增加的选项




2.脚本方面
跟Scratch的模块相比,mBlock脚本区跟Scratch有如下区别:
A.默认脚本字体:mBlock的默认字体比Scratch的字体会大一些,这样小盆友们就不会因字体太小而伤眼睛。
同时也可以保存字体大小的设置,不会因为Mblock重启后字体还原。



Scratch字体大小



mBlock字体大小B. 新增脚本: Scratch指令方块区中的“更多模块”指令改为“机器人模块”,里面的指令分别包含三个部分
1.Arduino部分:里面的模块兼容所有的Arduino主控板的Scratch编程。
2.Makeblock部分:
阅读全文

MongoDB在58同城百亿量级数据下的应用实践

  categories:资料  author:

58同城作为中国最大的生活服务平台,涵盖了房产、招聘、二手、二手车、黄页等核心业务。58同城发展之初,大规模使用关系型数据库(SQL Server、MySQL等),随着业务扩展速度增加,数据量和并发量演变的越来越有挑战,此阶段58的数据存储架构也需要相应的调整以更好的满足业务快速发展的需求。

MongoDB经过几个版本的迭代,到2.0.0以后,变的越来越稳定,它具备的高性能、高扩展性、Auto-Sharding、Free-Schema、类SQL的丰富查询和索引等特性,非常诱惑,同时58同城在一些典型业务场景下使用MongoDB也较合适,2011年,我们开始使用MongoDB,逐步扩大了使用的业务线,覆盖了58帮帮、58交友、58招聘、信息质量等等多条业务线。

随着58每天处理的海量数据越来越大,并呈现不断增多的趋势,这为MongoDB在存储与处理方面带来了诸多的挑战。面对百亿量级的数据,我们该如何存储与处理,本文将详细介绍MongoDB遇到的问题以及最终如何“完美”解决。

本文详细讲述MongoDB在58同城的应用实践:MongoDB在58同城的使用情况;为什么要使用MongoDB;MongoDB在58同城的架构设计与实践;针对业务场景我们在MongoDB中如何设计库和表;数据量增大和业务并发,我们遇到典型问题及其解决方案;MongoDB如何监控。

MongoDB在58同城的使用情况

MongoDB在58同城的众多业务线都有大规模使用:58转转、58帮帮、58交友、58招聘、58信息质量、58测试应用等,如[图1]所示。

图1 MongoDB典型的使用场景:转转

为什么要使用MongoDB?

MongoDB这个来源英文单词“humongous”,homongous这个单词的意思是“巨大的”、“奇大无比的”,从MongoDB单词本身可以看出它的目标是提供海量数据的存储以及管理能力。MongoDB是一款面向文档的NoSQL数据库,MongoDB具备较好的扩展性以及高可用性,在数据复制方面,支持Master-Slaver(主从)和Replica-Set(副本集)等两种方式。通过这两种方式可以使得我们非常方便的扩展数据。

MongoDB较高的性能也是它强有力的卖点之一,存储引擎使用的内存映射文件(MMAP的方式),将内存管理工作交给操作系统去处理。MMAP的机制,数据的操作写内存即是写磁盘,在保证数据一致性的前提下,提供了较高的性能。

除此之外,MongoDB还具备了丰富的查询支持、较多类型的索引支持以及Auto-Sharding的功能。在所有的NoSQL产品中,MongoDB对查询的支持是最类似于传统的RDBMS,这也使得应用方可以较快的从RDBMS转换到MonogoDB。

在58同城,我们的业务特点是具有较高的访问量,并可以按照业务进行垂直的拆分,在每个业务线内部通过MongoDB提供两种扩展机制,当业务存储量和访问量变大,我们可以较易扩展。同时我们的业务类型对事务性要求低,综合业务这几点特性,在58同城使用MongoDB是较合适的。

如何使用MongoDB?

MongoDB作为一款NoSQL数据库产品,Free Schema是它的特性之一,在设计我们的数据存储时,不需要我们固定Schema,提供给业务应用方较高的自由度。那么问题来了,Free Schema真的Free吗?

第一:Free Schema意味着重复Schema。在MongoDB数据存储的时候,不但要存储数据本身,Schema(字段key)本身也要重复的存储(例如:{“name”:”zhuanzhuan”, “infoid”:1,“infocontent”:”这个是转转商品”}),必然会造成存储空间的增大。

第二:Free Schema意味着All Schema,任何一个需要调用MongoDB数据存储的地方都需要记录数据存储的Schema,这样才能较好的解析和处理,必然会造成业务应用方的复杂度。

那么我们如何应对呢?在字段名Key选取方面,我们尽可能减少字段名Key的长度,比如:name字段名使用n来代替,infoid字段名使用i来代替,infocontent字段名使用c来代替(例如:{“n”:”zhuanzhuan”, “i”:1, “c”:”这个是转转商品”})。使用较短的字段名会带来较差的可读性,我们通过在使用做字段名映射的方式( #defineZZ_NAME  (“n”)),解决了这个问题;同时在数据存储方面我们启用了数据存储的压缩,尽可能减少数据存储的量。

MongoDB提供了自动分片(Auto-Sharding)的功能,经过我们的实际测试和线上验证,并没有使用这个功能。我们启用了MongoDB的库级Sharding;在CollectionSharding方面,我们使用手动Sharding的方式,水平切分数据量较大的文档。

MongoDB的存储文档必须要有一个“_id”字段,可以认为是“主键”。这个字段值可以是任何类型,默认一个ObjectId对象,这个对象使用了12个字节的存储空间,每个字节存储两位16进制数字,是一个24位的字符串。这个存储空间消耗较大,我们实际使用情况是在应用程序端,使用其他的类型(比如int)替换掉到,一方面可以减少存储空间,另外一方面可以较少MongoDB服务端生成“_id”字段的开销。

在每一个集合中,每个文档都有唯一的“_id”标示,来确保集中每个文档的唯一性。而在不同集合中,不同集合中的文档“_id”是可以相同的。比如有2个集合Collection_A和Collection_B,Collection_A中有一个文档的“_id”为1024,在Collection_B中的一个文档的“_id”也可以为1024。

MongoDB集群部署

MongoDB集群部署我们采用了Sharding+Replica-Set的部署方式。整个集群有Shard Server节点(存储节点,采用了Replica-Set的复制方式)、Config Server节点(配置节点)、Router Server(路由节点、Arbiter Server(投票节点)组成。每一类节点都有多个冗余构成。满足58业务场景的一个典型MongoDB集群部署架构如下所示[图2]:… 阅读全文

Spring Boot中使用MongoDB数据库

  categories:资料  author:

前段时间分享了关于Spring Boot中使用Redis的文章,除了Redis之后,我们在互联网产品中还经常会用到另外一款著名的NoSQL数据库MongoDB。

下面就来简单介绍一下MongoDB,并且通过一个例子来介绍Spring Boot中对MongoDB访问的配置和使用。

MongoDB简介

MongoDB是一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库之间的产品,其主要目标是在键/值存储方式(提供了高性能和高度伸缩性)和传统的RDBMS系统(具有丰富的功能)之间架起一座桥梁,它集两者的优势于一身。

MongoDB支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型,也因为他的存储格式也使得它所存储的数据在Nodejs程序应用中使用非常流畅。

既然称为NoSQL数据库,Mongo的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

但是,MongoDB也不是万能的,同MySQL等关系型数据库相比,它们在针对不同的数据类型和事务要求上都存在自己独特的优势。在数据存储的选择中,坚持多样化原则,选择更好更经济的方式,而不是自上而下的统一化。

较常见的,我们可以直接用MongoDB来存储键值对类型的数据,如:验证码、Session等;由于MongoDB的横向扩展能力,也可以用来存储数据规模会在未来变的非常巨大的数据,如:日志、评论等;由于MongoDB存储数据的弱类型,也可以用来存储一些多变json数据,如:与外系统交互时经常变化的JSON报文。而对于一些对数据有复杂的高事务性要求的操作,如:账户交易等就不适合使用MongoDB来存储。

MongoDB官网

访问MongoDB

在Spring Boot中,对如此受欢迎的MongoDB,同样提供了自配置功能。

引入依赖

Spring Boot中可以通过在pom.xml中加入spring-boot-starter-data-mongodb引入对mongodb的访问支持依赖。它的实现依赖spring-data-mongodb。是的,您没有看错,又是spring-data的子项目,之前介绍过spring-data-jpa、spring-data-redis,对于mongodb的访问,spring-data也提供了强大的支持,下面就开始动手试试吧。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
快速开始使用Spring-data-mongodb

若MongoDB的安装配置采用默认端口,那么在自动配置的情况下,我们不需要做任何参数配置,就能马上连接上本地的MongoDB。下面直接使用spring-data-mongodb来尝试对mongodb的存取操作。(记得mongod启动您的mongodb)

创建要存储的User实体,包含属性:id、username、age

public class User {

@Id
private Long id;

private String username;
private Integer age;

public User(Long

阅读全文

linux下TUN/TAP虚拟网卡的使用

  categories:资料  author:

tun/tap 驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装。利用tun/tap 驱动,可以将tcp/ip协议栈处理好的网络分包传给任何一个使用tun/tap驱动的进程,由进程重新处理后再发到物理链路中。
开源项目openvpn (http://openvpn.sourceforge.net)和Vtun(http://vtun.sourceforge.net)都是利用tun/tap驱动实现的隧道封装。

一、Tun/Tap驱动程序工作原理

做为虚拟网卡驱动,Tun/Tap驱动程序的数据接收和发送并不直接和真实网卡打交道,他在Linux内核中添加了一个TUN/TAP虚拟网络设备的驱动程序和一个与之相关连的字符设备 /dev/net/tun,字符设备tun作为用户空间和内核空间交换数据的接口。当内核将数据包发送到虚拟网络设备时,数据包被保存在设备相关的一个队 列中,直到用户空间程序通过打开的字符设备tun的描述符读取时,它才会被拷贝到用户空间的缓冲区中,其效果就相当于,数据包直接发送到了用户空间。通过 系统调用write发送数据包时其原理与此类似。

在linux下,要实现内核空间和用户空间数据的交互,有多种方式:可以通用socket创建特殊套接字,利用套接字实现数据交互;通过proc文件系统创建文件来进行数据交互;还可以使用设备文件的方式,访问设备文件会调用设备驱动相应的例程,设备驱动本身就是内核空间和用户空间的一个接口,Tun/tap驱动就是利用设备文件实现用户空间和内核空间的数据交互。

从结构上来说,Tun/tap驱动并不单纯是实现网卡驱动,同时它还实现了字符设备驱动部分。以字符设备的方式连接用户空间和内核空间。下面是示意图:

145340221.jpg

Tun/tap 驱动程序中包含两个部分,一部分是字符设备驱动,还有一部分是网卡驱动部分。利用网卡驱动部分接收来自TCP/IP协议栈的网络分包并发送或者反过来将接收到的网络分包传给协议栈处理,而字符驱动部分则将网络分包在用户空间和内核空间之间传送,模拟物理链路的数据接收和发送。Tun/tap驱动很好的实现了两种驱动的结合。

二、Tun/Tap网卡创建

1. 确认内核是否支持tun/tap

  • 确认内核是否有tun模块
      [root@hunterfu]# modinfo tun
      filename:       /lib/modules/2.6.34.7-56.fc13.i686.PAE/kernel/drivers/net/tun.ko
      alias:          char-major-10-200
      license:        GPL
      author:         (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
      description:    Universal TUN/TAP device driver
      srcversion:     880DE258930FE60D765B735
      
阅读全文

SoftEther VPN Server 架设教程

  categories:资料  author:
如果你不知道它是啥不小心看到的先移步谷歌百度“SoftEther VPN”。简言之我们需要一个 Windows 环境下的 VPN 服务端架设,同时它还要有客户端,并且最好不适用动态 IP 地址。那你还在等什么,只要…好的,废话二三段就差不多了进入正题。文中涉及的网址可能,需要你先找个方法,翻墙…教程比较长 – 胡来的左手

SoftEther VPN 客户端 的使用方法:底部

SoftEther VPN Server 架设教程 – YouTube:底部

SoftEther VPN 客户端 和 SoftEther VPN Server 下载地址:http://www.softether.org/5-download

因为我不想重装但是又找不到某些界面的按钮,所以教程会少几张图片。

好的我们已经下载到了服务端软件,那么进入操作,首先是安装,安装什么的下一步就可以了,界面已经是中文的了。

安装完后启动软件:

2014072507011135

点击【连接】后会要求你设定管理员密码,输入后【确定】;

接着会弹出“SoftEther VPN Server / Bridge 简单安装”界面,勾选上第一个【远程访问 VPN

阅读全文

研墨与墨汁的墨色区别

  categories:儿童画  author:
研墨与墨汁的区别你能看出来吗?

对于专业书画家创作来说,砚台研墨像是一顿细品的美味,墨汁却像一杯无味的快餐。

研墨与墨汁的墨色区别

研墨(墨韵层次丰富、分明)

墨汁(墨韵层次模糊、单一)

继续对比

(以下为研墨

研墨墨色变化微妙

研墨墨色变化微妙

研墨墨色变化微妙

研墨墨色变化微妙

(以下为墨汁

墨汁是死墨一团

墨汁是死墨一团

研墨与墨汁的区别你能看出来吗?

墨汁的缺点对比好墨块而言:

1、部分为降低成本,用的是工业用碳黑,不是传统烟料,这就是好的墨块表明古法取烟的原因。

2、胶重.

 

书写是带来的差异:

墨分五色的效果不够明显.好的墨块带出的墨色从浓到淡,从润到枯变化大的多.墨汁逊色,尤其是润的部分不够柔和。

胶重腻笔,写小楷会拉不开笔,尤其是在生一点的纸上。

裱画时,尤其小楷要注意。

 

孩子初学毛笔字,还是用研墨练字好。使用墨汁省时省力,可是对于锻炼孩子手指和腕力不太有利。

为孩子选用墨锭,以墨质轻润,坚实黝黑,磨起来无刮擦之声的为好。一般的松烟墨就行,如果为了写上乘字也可选用淡姻、油烟墨锭。初学书法不必用好墨,好墨价格昂贵且不容易得到。

教孩子研墨,要每天使用新水,放入砚台的水不要太多,随研磨随加入清水。研出的墨汁,以能够摹写1、2篇大字为宜。研磨时手部要重重按住墨锭上部,轻轻推进,循环往复,先向远处推出,后向近处折回,柔软有余力,俗语说:“磨墨如病夫,捏笔如壮士”。

研出的墨汁不可太浓;如果研得稀淡,可再用墨锭调研一下,直到墨汁不洇淡为止。墨研得过浓,下笔滞重;墨研得过淡,运笔无力。练习楷书,研墨要研得干些,但不宜太干燥了,以免拉不开笔,如果用宿墨,下笔粘滞,不宜常用。练习行草,研墨要干湿得当,笔感应流利顺畅。练字后,用清水冲洗掉余墨,不可使其成为“宿墨”。

使用墨汁练字,对初学的孩子很方便,避免研墨弄脏衣服、纸张,但是不利于孩子手部、腕部肌肉力度的发展,所以有利有弊。如果使用墨汁练字,每次练习时应当用多少倒入砚台内多少,不然倒多了用不干净,积成宿墨,下次不好使用。

一、研墨有必要,尤其是书写重要作品或小楷,跟墨汁差很多,老手一定同意。至於日常练习则无所谓,方便就好。 
二、现成墨汁胶质重,研墨较轻,因此研墨更流畅顺手,粒子及层次更丰富。尤其是三十年以上的老墨,非常好用,一次上瘾。 
三、好墨须搭配好砚及好纸才能有效发挥,这讲究起来没完没了,但为了使作品更出色,一切都值得。孙过庭书谱有云:「纸墨相发,一合也。」乃千古名训,洵不诬也。 
四、研墨颇费时,然而一般专业书家使用的方法有二: 
1.买台电动磨墨机,但市售品大多不合用,仍有改进空间。 
2.现成墨汁调合一半份量的清水,再以墨条研开,效果不错。 
五、千万别相信有些书论所提到「不择笔墨」这句话,有此能力的书家历史上可能不到十位。
阅读全文

虚拟网卡 TUN/TAP 驱动程序设计原理

  categories:资料  author:

简介

虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装。本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱动程序在linux环境下的设计思路。

tun/tap驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装。利用tun/tap驱动,可以将tcp/ip协议栈处理好的网络分包传给任何一个使用tun/tap驱动的进程,由进程重新处理后再发到物理链路中。开源项目openvpn( http://openvpn.sourceforge.net)和Vtun( http://vtun.sourceforge.net)都是利用tun/tap驱动实现的隧道封装。


使用tun/tap驱动

在linux 2.4内核版本及以后版本中,tun/tap驱动是作为系统默认预先编译进内核中的。在使用之前,确保已经装载了tun/tap模块并建立设备文件:

#modprobe tun
#mknod /dev/net/tun c 10 200

参数c表示是字符设备, 10和200分别是主设备号和次设备号。

这样,我们就可以在程序中使用该驱动了。

使用tun/tap设备的示例程序(摘自openvpn开源项目 http://openvpn.sourceforge.net,tun.c文件)

int open_tun (const char *dev, char *actual, 
阅读全文

深入理解乐观锁与悲观锁

  categories:资料  author:

在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。

乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。

无论是悲观锁还是乐观锁,都是人们定义出来的概念,可以认为是一种思想。其实不仅仅是关系型数据库系统中有乐观锁和悲观锁的概念,像memcache、hibernate、tair等都有类似的概念。

针对于不同的业务场景,应该选用不同的并发控制方式。所以,不要把乐观并发控制和悲观并发控制狭义的理解为DBMS中的概念,更不要把他们和数据中提供的锁机制(行锁、表锁、排他锁、共享锁)混为一谈。其实,在DBMS中,悲观锁正是利用数据库本身提供的锁机制来实现的。

下面来分别学习一下悲观锁和乐观锁。

悲观锁

在关系数据库管理系统里,悲观并发控制(又名“悲观锁”,Pessimistic Concurrency Control,缩写“PCC”)是一种并发控制的方法。它可以阻止一个事务以影响其他用户的方式来修改数据。如果一个事务执行的操作都某行数据应用了锁,那只有当这个事务把锁释放,其他事务才能够执行与该锁冲突的操作。
悲观并发控制主要用于数据争用激烈的环境,以及发生并发冲突时使用锁保护数据的成本要低于回滚事务的成本的环境中。

悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度(悲观),因此,在整个数据处理过程中,将数据处于锁定状态。 悲观锁的实现,往往依靠数据库提供的锁机制 (也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)

在数据库中,悲观锁的流程如下:

在对任意记录进行修改前,先尝试为该记录加上排他锁(exclusive locking)。

如果加锁失败,说明该记录正在被修改,那么当前查询可能要等待或者抛出异常。 具体响应方式由开发者根据实际需要决定。

如果成功加锁,那么就可以对记录做修改,事务完成后就会解锁了。

其间如果有其他对该记录做修改或加排他锁的操作,都会等待我们解锁或直接抛出异常。

MySQL InnoDB中使用悲观锁

要使用悲观锁,我们必须关闭mysql数据库的自动提交属性,因为MySQL默认使用autocommit模式,也就是说,当你执行一个更新操作后,MySQL会立刻将结果进行提交。set autocommit=0;

//0.开始事务
begin;/begin work;/start transaction; (三者选一就可以)
//1.查询出商品信息
select status from t_goods where
阅读全文



快乐成长 每天进步一点点      京ICP备18032580号-1