当并发的魔爪伸向了redis,关键词:php,ci框架,redis,并发

先说状况:php

 

多客户端对redis的同一键的值进行操做.html

 

我使用的语言:phpmysql

我使用的框架:这不重要redis

 

直接来看解决方案:sql

     $this->_redis->watch('a');
        $a=$this->_redis->get('a');
        $a++;
        $pipe=$this->_redis->multi(Redis::MULTI);
        $pipe->set('a',$a);
        return $pipe->exec();

 

接下来是redis相关知识:多线程

首先你得有一个redis相关的库,我把redis的实例赋给了$this->_redis.并发

而后你得知道redis是单进程单线程的,自己是不会出现并发的问题.框架

那么问题来了:php是单进程仍是多进程的,js是单线程仍是多线程的.this

watch(看,监视,监听):spa

事务相关,watch一个redis的key.当redis进入事务后,若watch的key在其余地方发生了改变.

其余地方:当前客户端之外的客户端.

则当前事务将执行失败.队列中的全部操做将做废.

 

multi:

redis进入事务的语法,在个人项目中,是用multi()方法进入.

能够传两个值:Redis:MULTI以及Redis:PIPELINE;

 

multi以及pipeline的区别:

multi:当事务发生错误事务队列将做废.

pipeline:根本就不是事务!只是单纯的将任务放在队列中,相似于mysql中的存储过程.

 

exec(execution 执行)

执行当前事务,将队列中的任务一块儿执行,返回bool值

 

 

 

 

参考资料:

相关文章
相关标签/搜索