有了事务为什么还需要乐观锁和悲观锁

transaction-lock为什么有了事务这东西,还需要乐观锁悲观锁?事务是粗粒度的概念、乐观锁悲观锁可以更细粒度的控制;
比如抢票,假设余票只有1张;隔离级别可以保证事务A和事务B不能读到对方的数据,也不能更新对方正在更新的数据,但是事务A和事务B都认为还有1张余票,于是出票,并更新为0;

事务解决了并发问题,已经不存在并发问题了;

但是事务B读取的是过时数据,依据过时数据做了业务处理;

所以需要乐观锁或者悲观锁,来记录一个信息:当前已经读取的数据,是不是已经过时了!

事务有这么几种实现方式:锁协议、MVCC、时间戳排序协议、有效性检查协议,锁协议是事务的一种实现方式,事务 = 用锁封装的一个函数,可以重用而已,但是这几个事务的函数覆盖面太粗粒度了,所以有时候我们还得借助于锁来进行细粒度控制;
事务不能保证每个操作结果正确,售票时超卖还是会发生。
事务保证整个操作的成一个组,要么全做要么全不做 但是不能保证多个事务同时读取同一个数据
数据对象被加上排它锁时,其他的事务不能对它读取和修改;加了共享锁的数据对象可以被其他事务读取,但不能修改
事务可以用锁实现,可以保证一致性和隔离性,但是锁用来保证并发性;
隔离性和并发性有点类似,但是隔离性只是保证不会出现相互读取中间数据,却无法解决并发的问题

使用PHP连接、操纵Memcached的原理和教程

Memcahced开源分布式内存对象缓存系统通过减少数据库的负担,从而能够加速你的web应用。在本文中我将解释怎样实现一个基于Memcahced的缓存系统。

数据库

实例中使用的数据库表包含一个自增的id,一个标题和一个链接字段:

CREATE TABLE demos
(
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(300), 
link VARCHAR(300), 
);

继续阅读使用PHP连接、操纵Memcached的原理和教程

Python操作Mysql实例代码教程(查询手册)

本文介绍了Python操作MYSQL、执行SQL语句、获取结果集、遍历结果集、取得某个字段、获取表字段名、将图片插入数据库、执行事务等各种代码实例和详细介绍,代码居多,是一桌丰盛唯美的代码大餐。

实例1、取得MYSQL的版本

在windows环境下安装mysql模块用于python开发,请见我的另一篇文章:

MySQL-python Windows下EXE安装文件下载

# -*- coding: UTF-8 -*-

# 安装MYSQL DB for python
import MySQLdb as mdb

con = None

try:
    # 连接mysql的方法:connect('ip','user','password','dbname')
    con = mdb.connect('localhost', 'root',
        'root', 'test');

    # 所有的查询,都在连接con的一个模块cursor上面运行的
    cur = con.cursor()

    # 执行一个查询
    cur.execute("SELECT VERSION()")

    # 取得上个查询的结果,是单个结果
    data = cur.fetchone()
    print "Database version : %s " % data
finally:
    if con:
        # 无论如何,连接记得关闭
        con.close()

执行结果:

Database version : 5.5.25

继续阅读Python操作Mysql实例代码教程(查询手册)

phpmyadmin无法加载mcrypt的解决方法

无法加载 mcrypt (外链,英语) 扩展,请检查您的 PHP 配置:很多朋友在运行phpmyadmin程序都会见到这样的提示,”无法加载 mcrypt (外链,英语) 扩展,请检查您的 PHP 配置”,那么遇到这样的问题应当怎么解决呢?下面我们就一点一点把这个问题解决掉:

无法载入 mcrypt 扩展,请检查 PHP 配置
继续阅读phpmyadmin无法加载mcrypt的解决方法