澳门美高梅手机网站CentOS6.x安装Redis及Redis扩展for PHP

正文简单介绍了CentOS下Redis单机单实例的设置、配置、启动暨安装Redis扩展for
PHP(对PHPer们的爱\_),适合刚踏入Redis之门的道友们修啊~。

于stackOverflow网站上见到这同样提问,下文是局部摘抄问题简述:

1.下载安装包

此间选择redis-3.2.8.tar.gz稳定版,下载地址是http://download.redis.io/releases/redis-3.2.8.tar.gz

Java cluster, run task only once

We have a java process, which listen’s to a directory X on the file
system using apache commons vfs. Whenever a new file is exported to
this directory, our process kicks in. We first rename the file to
filename.processing and parse the file name, get some information from
the file and insert into tables, before sending this file to a
Document management system. This is a single-threaded application per
cluster. Now consider this running in a cluster environment, we have 5
server’s. So 5 different VM’s are trying to get access of the same
file. The whole implementation was on the basis that only one process
can rename the file to .processing at a given time, as OS will not
allow multiple processes modifying the file at the same time. Once a
cluster get’s holds and renames file to .processing, other cluster’s
will ignore files which are of format .processing.

2.解压、编译、安装

tar zxvf redis-3.2.8.tar.gz
cd redis-3.2.8
make && make install

安装完成后会见在/usr/local/bin目录下生成几只可执行文件,如下图所示

足执行redis-server –v翻redis版本号,如下图所示

(若提示redis-server command not
found,则需将/usr/local/bin目录上加到环境变量)

上述问题大概,就是要是软件里发出一个监听某个文件变化以及命名服务,这在单机部署时或多或少题材还不曾,但是当多机集群时,如果无加额外逻辑限制,那么每个集群节点都见面错过实践多单监听和命名服务,对于文件系统,这是大惊险的。
还有按,软件里有一个定时发送email的劳动,单机部署,那么接收方最多接一模一样卖email。当多机集群部署时,如果不失去额外限制,接收方应当收取至大半只email。
问题是是附加的逻辑限制应当如何去规划也?
解决方案当然不止一栽。

3.改配置文件

为了有利于Redis后期的管制,首先创建这样几只目录

mkdir /etc/redis # Redis配置文件存放目录
mkdir /var/redis # Redis运行时生成文件存放目录
mkdir /var/redis/run # PID文件存放目录
mkdir /var/redis/log # 日志文件存放目录
mkdir /var/redis/data # RDB快照文件存放目录

自打安包目录复制一卖配置文件到/etc/redis目录下

cp redis.conf /etc/redis/redis.conf

修改/etc/redis/redis.conf配置文件里之以下几独参数
daemonize yes # 设置以守护进程的方式运行
pidfile /var/redis/run/redis.pid # 指定PID文件路径
logfile "/var/redis/log/redis.log" # 指定日志文件路径
dir /var/redis/data # 指定RDB快照文件存放目录

Via a shared database

先是种植而可以采用数据库,建立job表。
觅来用实施之job,然后去实施其,大致逻辑类似这样。

SELECT *
FROM jobs
WHERE state = 'NotRun'
  ORDER BY run_time ASC

UPDATE jobs
SET state = 'Running'
WHERE job_id = :id
  AND state = 'NotRun'

4.启动Redis服务

从今安包目录下之utils目录复制一客redis启动脚本到/etc/init.d目录下

cp utils/redis_init_script /etc/init.d/redis

改脚论中的pid及conf路径为实在路径
PIDFILE=/var/redis/run/redis.pid
CONF="/etc/redis/redis.conf"

启动Redis服务

service redis start

只要想装Redis服务开机自启动,使用如下命令即可

chkconfig redis on

或出现报错提示,如下

这就是说是为启动脚本缺少启动先期级信息,编辑/etc/init.d/redis启动脚论上加而下图所记的有限行信息

填补加好后重试即可。

Via a cluster singleton

因集群单例即可。
咱们来探望akka-cluster中针对cluster singleton的描述。

For some use cases it is convenient and sometimes also mandatory to
ensure that you have exactly one actor of a certain type running
somewhere in the cluster.

俺们明白akka的架是树状层级结构。就是说每一个节点都针对诺在一个path。当akka.actor.providerLocalProvider是,ActorPath是从/user/somePath起来。当集群时,也就是是akka.actor.providerClusterProvider或者RemoteProvider时,ActorPath是由akka.tcp://systemName@hots:port/user/somePath组成。

代码解析:

system.actorOf(
  ClusterSingletonManager.props(
    singletonProps = Props(classOf[Consumer], queue, testActor),
    terminationMessage = End,
    settings = ClusterSingletonManagerSettings(system).withRole("worker")),
  name = "consumer")
  val proxy = system.actorOf(
  ClusterSingletonProxy.props(
    singletonManagerPath = "/user/consumer",
    settings = ClusterSingletonProxySettings(system).withRole("worker")),
  name = "consumerProxy")

上述代码分为两手续。第一步是创建一个集群单例对象,第二步创建单例对象的代理对象。
那为什么用如此设计啊?代理对象是逻辑地址,第一步创建的是单例的莫过于地址。

以下代码应用单例实现只实行同样软的语义。

class OnlyExecuteOnce[A](exe: () => A) extends Actor {
  override def preStart(): Unit =
    exe()

  override def receive: Receive = {
    case _ => ()
  }
}


object OnlyExecuteOnce {
  // /user/onlyExecuteOnce1234
  // /user/onlyExecuteOnce1234Proxy
  def apply[A](id: String)(exe: () => A)(implicit system: ActorSystem) = {
    system.actorOf(
      ClusterSingletonManager.props(Props(classOf[OnlyExecuteOnce[A]], exe), PoisonPill, ClusterSingletonManagerSettings(system)),
      name = s"onlyExecuteOnce${id}")
    system.actorOf(ClusterSingletonProxy.props(s"/user/onlyExecuteOnce${id}", ClusterSingletonProxySettings(system)),
      name = s"onlyExecuteOnce${id}Proxy")
  }
}

参数id用于构建单例对象的path。

5.安装Redis扩展for PHP

这里选择的Redis扩展安装包之版本号是2.2.8,下载地址是http://pecl.php.net/get/redis-2.2.8.tgz
(如果系统装的是PHP7,则须挑选3.0.0之上版本的Redis扩展安装包)

设置过程命令

tar zxvf redis-2.2.8.tgz
cd redis-2.2.8
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

装好后编辑php.ini配置文件,添加一行配置如下
extension="redis.so"

双重启php-fpm,用如下命令(前提是设拿php-fpm启动脚论上加到系统服务啊~)

service php-fpm restart

动phpinfo()函数查看转

OK!大功告成。

发表评论

电子邮件地址不会被公开。 必填项已用*标注