2018年8月

vmware-tool安装及设置共享目录

宿主计算机为windows系统,虚拟机为Cent OS 6.10
用VMware Workstation安装的时候会报错,这里是从VMware官网下载的包安装的

1. 下载vmtool安装包

2. 解压

unzip VMware-Tools-10.0.9-3917699.zip

3. 挂载linux iso文件

cd VMware-Tools-10.0.9-3917699/vmtools/
mkdir /tmp/vmware
mount -o loop linux.iso /tmp/vmware

4. 解压出安装包文件

cd /tmp/vmware/
cp VMwareTools-10.0.9-3917699.tar.gz /tmp/
cd /tmp/
chmod 777 VMwareTools-10.0.9-3917699.tar.gz
tar -zxvf VMwareTools-10.0.9-3917699.tar.gz

5. 安装,碰到选项一直回车就行

cd vmware-tools-distrib
# 给777权限,不然后面安装的时候会权限不足
chmod 777 -R vmware-tools-distrib
# 安装
./vmware-install.pl

6. 在 VMware 的虚拟机设置->选项中添加共享目录,我这里添加的名称为 share-dir(这个名称在第7步有用),windows路径为 E:\share-dir

7. 在linux虚拟机中把共享的目录挂载在虚拟机的目录上

mount -t vmhgfs .host:/share-dir /tmp/target-share-dir

ok了,如果需要开机就挂载的话,可以把第7步的命令放到开机脚本中

redis 学习-11 lua脚本及php中的lua脚本

简介

用于高效地处理 CAS (check-and-set)命令,整个脚本会以原子性的方式执行

关于lua语言相关的就不说了,这里记录下再php中怎么使用lua,注意这里使用的是predis

/**
 * 定义命令类,需继承 ScriptCommand 类
 * Class MyMultipleSetNx
 */
class MyMultipleSetNx extends Predis\Command\ScriptCommand
{
    /**
     * key的数量
     * @return int
     */
    public function getKeysCount()
    {
        // 参数个数,等于-1则代表最后一个参数,其他的全部是key
        return 3;
    }

    /**
     * 脚本代码
     * @return string
     */
    public function getScript()
    {
        return <<<LUA
local result = {}
for key,value in pairs(KEYS) do
    if redis.call('exists', value) == 1 then
        result[key] = 0
    else
        result[key] = 1
        redis.call('set', value, ARGV[key])
    end
end
return result
LUA;
    }
}

$redisClient = new \Predis\Client('tcp://127.0.0.1:6379');
// 定义命令
$redisClient->getProfile()->defineCommand('myMsetNx', 'MyMultipleSetNx');
// 调用
$result = call_user_func_array([$redisClient, 'myMsetNx'], ['myMultipleNxKey1', 'myMultipleNxKey2', 'myMultipleNxKey3', 'myMultipleNxValue1', 'myMultipleNxValue2', 'myMultipleNxValue3']);

var_dump($result);

输出

[root@jin redis-test]# php-5.6.13 tes-redis.php 
/www_new/redis-test/tes-redis.php:42:
array(3) {
  [0] =>
  int(0)
  [1] =>
  int(0)
  [2] =>
  int(0)
}

redis 学习-10 pipeline及php中的pipeline

概念

redis执行一条命令分为四个过程

  1. 发送命令
  2. 命令排队
  3. 命令执行
  4. 返回结果

其中1和4称为Round Trip Time(RTT,往返时间)
pipeline的原理就是减少往返时间来提高速度,但是需要注意一点,如果pipeline中的命令过多,可能会导致阻塞redis,所以在使用pipeline时,需要把握好度,不然就得不偿失了

php中pipeline的用法

注意:以下实例全部是以Predis为基础来写的
需要注意下,不同命令的返回值是不一样的,需要区别对待

# 代码
$redisClient = new \Predis\Client('tcp://127.0.0.1:6379');

// 回调方式使用
$result = $redisClient->pipeline(function ($client){
    /* @var \Predis\Client $client */
    $client->set('commandA', 'aaa');
    $client->sadd('commandC', 'bbb');
});

// 接口形式调用
$result = $redisClient->pipeline()->set('commandA', 'aaa')
    ->sadd('commandC', 'bbb')
    ->execute();

var_dump($result);

# 输出
array(2) {
  [0] =>
  class Predis\Response\Status#12 (1) {
    private $payload =>
    string(2) "OK"
  }
  [1] =>
  int(0)
}