php 远程调用redis

<?php
$redis_conf = array (
"active_code"=>array(
"host" => "14.29.64.112",
"port" => "8899",
"pass" => "funova2014"
)

);

#微信签名
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];

$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );

if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
#连接redis
function getSocket(){
include_once ("phpRedis.class.php");
$phpRedis = new phpRedis ();
$phpRedis->master = "active_code";
include ("redis.conf.php");
#授权
$phpRedis->auth ($redis_conf ["active_code"][‘pass‘]);
return $phpRedis;
}
#获取激活码
function index($key){
#连接redis
$redis=$this->getSocket();
$redis->connect();
return $redis->lpop("$key");
#return $redis->hgetall(‘code_hash‘);
}
#把已经读取的激活码写入redis中
function set_code($code,$userid){
#连接redis
$redis=$this->getSocket();
$redis->connect();
return $redis->hset(‘code_hash_wx‘,$code,$userid);
#return $redis->hgetall(‘code_hash‘);
}

<?php
#class Php5RedisException extends Exception {}
class phpRedis
{
/*
* $port 端口 6379
* $host 主机 192.168.1.28
*/
// redisS务器的地址

private $md5key = "funova_aws_redis";

public $master="active_code";

static private $_sock = NULL;
// 保存数据库连接资源
public static $linkID = array ();
/**
* 链接redis服务器
*/
public function connect() {
error_reporting(E_ALL ^ E_NOTICE);

include("redis.conf.php");
$this->host = $redis_conf [$this->master][‘host‘];
$this->port = $redis_conf [$this->master][‘port‘];

if (!is_null(self::$linkID[$this->master]))
return;
$sock = fsockopen ( $this->host, $this->port, $errno, $errstr );

if ($sock) {
self::$linkID [$this->master] = $sock;
$this->debug(‘Connected‘);
return;
}
$msg = "Cannot open socket to {$this->host}:{$this->port}";
if ($errno || $errmsg)
$msg .= "," . ($errno ? " error $errno" : "") . ($errmsg ? " $errmsg" : "");
error_log ( "$msg." ,3,"/tmp/hivePhpLog/redis.log");

}
/**
* 错误提示
* @param unknown_type $msg
*/
private function debug($msg){
//echo sprintf("[php_redis] %s\n", $msg);
}
/**
* 对cmd接收到的函数进行处理
* 并且返回数据
*/
private function cmdResponse() {
// Read the response
$s = trim ( $this->read () );
switch ($s [0]) {
case ‘-‘ : // Error message
throw new Php5RedisException ( substr ( $s, 1 ) );
break;
case ‘+‘ : // Single line response
return substr ( $s, 1 );
case ‘:‘ : //Integer number
return substr ( $s, 1 ) + 0;
case ‘$‘ : //Bulk data response
$i = ( int ) (substr ( $s, 1 ));
if ($i == - 1)
return null;
$buffer = ‘‘;
if ($i == 0){
$s = $this->read ();
}
while ( $i > 0 ) {
$s = $this->read ();
$l = strlen ( $s );
$i -= $l;
if ($i < 0)
$s = substr ( $s, 0, $i );
$buffer .= $s;
}
return $buffer;
break;
case ‘*‘ : // Multi-bulk data (a list of values)
$i = ( int ) (substr ( $s, 1 ));
if ($i == - 1)
return null;
$res = array ();
for($c = 0; $c < $i; $c ++) {
$res [] = $this->cmdResponse ();
}
return $res;
break;
default :
error_log ( ‘Unknown responce line: ‘ . $s,3,"redis.log");
break;
}
}
/**
* 接收命令并且返回结果集
* @param unknown_type $command
*/
private function cmd($command) {
$this->debug(‘Command: ‘.$command);
$this->connect ();
$s = $command . "\r\n";
while ( $s ) {
$i = fwrite ( self::$linkID [$this->master], $s );
if ($i == 0)
break;
$s = substr ( $s, $i );
}
return $this->cmdResponse ();
}
/**
* 读取指定长度的字符
* @param unknown_type $len
*/
private function read($len = 1024) {
if ($s = fgets ( self::$linkID [$this->master] )) {
$this->debug(‘Read: ‘.$s.‘ (‘.strlen($s).‘ bytes)‘);
return $s;
}
$this->disconnect ();
error_log ( "Cannot read from socket.",3,"redis.log" );
}
/**
* 关闭redis链接
*/
private function disconnect() {
if (self::$linkID [$this->master])
@fclose ( self::$linkID [$this->master] );
self::$linkID [$this->master] = null;
}
/**
* L_C_48单一数据
* @param $key
* @param $value
*/
function set($key, $value) {
return $this->cmd ("SET $key $value");
}
/**
* 批量L_C_48数据
* @param $array
*/
function setArray($array) {
if(is_array($array)){
foreach($array as $key =>$val){
$this->cmd ("SET $key $val");
}
}
return;
}
/**
* 根据$key获取数据
* @param $key
*/
function get($key) {
return $this->cmd ("GET $key");
}
/**
* 返回匹配指定模式的所有key
* @param $pattern
*/
function keys($pattern) {
return $this->cmd ("KEYS $pattern");
}
/**
* 设定L_C_181
*/
function setExpire($key,$expire){
return $this->cmd ("expire $key $expire ");
}
/**
* 从队到左边入队一个元素
*/
function lpush($key,$value){
if ($this->master == "debug") { // 内部
return $this->cmd("lpush $key $value");
} else {
return $this->cmd("lpush $key ‘$value‘");
}
}
/**
* 从队到左边出队一个元素
*/
function lpop($key){
return $this->cmd("lpop $key");
}
/**
* 验证密码
*/
function auth ( $pass ){
return $this->cmd("auth $pass");
}
/**
* 发送信息
*/
function publish($key,$content){
/**
* 当前是否在开发模式
*/
if ($this->master == "debug") { // 内部
return $this->cmd("publish $key $content");
} else {
return $this->cmd("publish $key ‘$content‘");
}
}
/**
* setnx
*/
function setnx($key,$value){
return $this->setnx("SETNX $key $value");
}
/**
* L_C_26记录
*/
function delete($key){
return $this->cmd("DEL $key");
}
/**
* 监听频道
*/
function subscribe($key){
return $this->cmd("SUBSCRIBE $key");
}
/**
* 读取list文件
*/
function lrange($key){
return $this->cmd("LRANGE $key 0 -1");
}
/**
* 插入hash数组
*/
function hset($key,$filed, $value){
return $this->cmd("hset $key $filed $value");
}
/**
* 删除list
*/
function lrem($key,$value){
return $this->cmd("lrem $key -2 ".$value);
}
/**
*获取所有的值
*/
function hgetall($key){
return $this->cmd("hgetall $key");
}
/**
*判断key是否存在
*/
function exists_key($key){

return $this->cmd("EXISTS $key");
}
/**
*判断判断key中有没有当前这个域
*/
function exists_filed($key,$field){
return $this->cmd("hexists $key $field");
}
/**
*返回并删除链表尾元素
*/
function rpop($key){
return $this->cmd("rpop $Key");
}
/**
*
*/
function rpush($key,$value){

return $this->cmd("rpush $Key $value");

}

}
?>

时间: 2024-07-29 17:30:48

php 远程调用redis的相关文章

远程调用原理初探(附c#代码示例)

分布式系统有很多成熟的解决方案.如:微软的WCF.WCF太过于复杂,配置也麻烦.其实可以自己动手设计一个小的分布式系统.系统的原理完全在自己掌握之中,可以根据业务随机而变.这里展示远程调用最核心最基本的处理逻辑,其实远程调用并不复杂神秘. 分布式系统其实是数据流的交换.数据必须快速的从一段传送到另一端,否则系统性能就大打折扣.对于.net,本人设计一个非常优化易于使用的网络库(EasyNetMessage).使用该库,不需要关心底层细节,所有处理对象是string.byte:发送时,不需要处理分

Sql Server远程调用失败

这篇文章主要为大家介绍了SQL server服务显示远程过程调用失败的解决方法,还为大家提供了解决SQL SERVER 2008 R2配置管理器出现"远程过程调用失败"(0x800706be)错误提示的方案,感兴趣的小伙伴们可以参考一下 刚刚打开SQL Server 2008,想要新建一个数据库,却发现出现了一个问题,这个问题由于之前没有遇到过,所以下面整理解决SQL server服务远程调用失败的几个方法,供大家参考,具体内容如下 先看看出现的问题: 出现上面这个错误的原因可能是由于

C#远程调用技术WebService葵花宝典

一.课程介绍 直接开门见山吧,在学习之前阿笨想问大家一句,关于WebService远程过程调用技术(RPC) 你真的会了吗?不要跟老夫扯什么WebService技术已经过时,如果你的内心有在偷偷告诉你其实我是真的不会WebService的话,那么恭喜你,因为你在这茫茫的IT编程世界里找到了这本<C#远程调用技术WebService葵花宝典>!曾经有一位不知名的讲师说过这么一句名言: 一门RPC技术不会,那么千万万门RPC技术将都不会! 本次阿笨的分享课包含以下知识点. 1.C# WebServ

RHEL6-X Window System-8.图形桌面的本地调用与远程调用解析

Linux的X或X11 (X Window System)是一个基础的图形框架接口,拥有基本的图形显示.在此框架基础之上,有诸如GNOME/KDE之类的图形桌面窗口管理应用软件(Window manager).而且图形框架X11包括两大部分X Client与X Server,采用C/S主从架构.所以它是一个system而不单单只是一个组件. Linux图形桌面的本地调用与远程调用解析如图 说明: 通过图形还是文本控制台传递命令,经过内核处理后,返回相应的数据给对方 本地情况: 1.如果是图形,则

远程调用方式概述

在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI.MINA.ESB. Burlap.Hessian.SOAP.EJB和JMS 等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那 深入了解这些技术背后的机制就是必须的了,本文中我们将来一探究竟,抛砖引玉,欢迎大家提供更多的实现远程通讯的技术和原理的介绍. 基本原理 要实现网络机器间的通讯

如何基于Vert.x实现远程调用?

Vert.x的微服务 最近关于微服务的概念到处都在宣传,而Vert.x的verticle本身就是很好的一种服务定义,你可以把verticle看成一个service,也可以把verticle看成一个actor.这样你的视角会切到Actor模型里.本文我们将讨论如何基于Vert.x实现远程调用. 传统Java开发人员受EJB以及Spring的影响比较深,所以对面向接口编程了解的比较多.哪怕跨JVM也可以通过接口来调用对方提供的方法.这是非常友好方便的开发方式,因为框架层面做了服务发现以及服务生命周期

JBOSS EAP 6.2 -EJB远程调用-客户端的配置

EJB访问方式分为远程客户端访问.本地客户端访问和WebService客户端. 所谓的EJB的远程调用是说客户端与服务端的EJB对象不在同一个JVM进程中. 本地客户端是说客户端与服务端的EJB对象在同一个JVM进程中. WebService客户端可以访问无状态会话Bean的接口,只有在业务逻辑方法被标识为@WebMethod的时候,webService客户端才可以访问到. 远程调用 在没有远程调用的时候,我们需要用到别人的数据了,就直接把别人的接口和实现都拿过来了,接着打到自己的包中,这样做一

玩转PowerShell第二节——【利用PsExec进行远程调用】-技术&amp;分享

概述 PowerShell用的最多的地方就是远程调用,在远程机器上执行脚本,监控远程机器的状态,如NLB状态,EventLog,SqlServer DataBase状态等. 本篇将讲到用PsExec.exe这个工具进行远程调用. 1.首次运行PowerShell.exe 双击PowerShell.exe,同意licence条款. 2.查看PowerShell帮助 3.常用参数 computer   计算机名称,如果省略,则在本机执行,如果是\\*,则在域里面的所有的机器上执行脚本 -u 远程机器

EC应用之多平台接口远程调用

在传统的网络应用编写中都是通过接收消息处理然后应答,但在.net 3.0后提供了一个基于业务接口调用的网络交互体系WCF.基于WCF .NET程序可以通过接口调用的方式进行远程业务调用处理.由于WCF是MS提供的体系,所以在mono和xamarin所支持的其他平台都没有良好地被支持.但随便着mono和xamarin的迅速发展,基于业务接口远程调用的服务体系该提供给更多平台提供通讯的便利性;为了解决这些问题EC组件提供了一套基于业务接口远程调用方法实现,借助于mono和xamarin可以使些功能简