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");
} }
?>
php 远程调用redis的更多相关文章
- Spring远程调用技术<2>-Hessian和Burlap
上篇谈到RMI技术,加上Spring的封装,用起来很方便,但也有一些限制 这里的Hessian和Burlap解决了上篇提到的限制,因为他们是基于http的轻量级远程服务. Hessian,和RMI一样 ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- 架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)
在深入学习zookeeper我想先给大家介绍一个和zookeeper相关的应用实例,我把这个实例命名为远程调用服务.通过对这种应用实例的描述,我们会对zookeeper应用场景会有深入的了解. 远程调 ...
- 【Java EE 学习 78 中】【数据采集系统第十天】【Spring远程调用】
一.远程调用概述 1.远程调用的定义 在一个程序中就像调用本地中的方法一样调用另外一个远程程序中的方法,但是整个过程对本地完全透明,这就是远程调用.spring已经能够非常成熟的完成该项功能了. 2. ...
- 深入浅出Alljoyn——实例分析之远程调用(Method)篇
深入浅出就是很深入的学习了很久,还是只学了毛皮,呵呵! 服务端完整代码: #include <qcc/platform.h> #include <assert.h> #incl ...
- .Net组件程序设计之远程调用(二)
.Net组件程序设计之远程调用(二) 激活模式 引用封送对象激活类型两种, 一种是客户端激活类型,一种是服务器端激活. 客户端激活对象 客户端激活方式:当客户端创建一个远程对象时,客户端得到的是一个新 ...
- .Net组件程序设计之远程调用(一)
.Net组件程序设计之远程调用(一) 1应用程序域 我们知道我们写的C#代码是在操作系统逻辑体系结构中最上层的,然而操作系统本身是不会认识C#代码的,它只认识机器代码.那我们写的程序经过编译后是编译成 ...
- Spring远程调用技术<3>-Spring的HTTP Invoker
前面提到RMI使用java标准的对象序列化机制,但是很难穿透防火墙. 另一方面,Hessian和Burlap能很好地穿透防火墙,但是使用私有的对象序列化机制. Spring提供的http invke ...
- Spring远程调用技术<1>-RMI
在java中,我们有多种可以使用的远程调用技术 1.远程方法调用(remote method invocation, RMI) 适用场景:不考虑网络限制时(例如防火墙),访问/发布基于java的服务 ...
随机推荐
- js 鼠标左键拖动滚动
鼠标左键拖动滚动 原作者: http://blog.csdn.net/lisatisfy/article/details/6606026 本文在源代码的基础上 增加支持水平滚动 的功能 html &l ...
- HTML5无刷新实现跳转页面技术
window.onpopstate window.onpopstate是popstate事件在window对象上的事件句柄. 每当处于激活状态的历史记录条目发生变化时,popstate事件就会在对应w ...
- MORMOT数据库连接池
MORMOT数据库连接池 MORMOT封装了一堆的PROPS控件,用于连接各种数据库. MORMOT的封装是武装到了牙齿的,这堆PROPS控件居然数据库连接池也封装好了.这就为我们省了不少事,笔者非常 ...
- Ubuntu -- 安装和部署php5.6 nginx php5.6-fpm
1.首先输入用户名和密码进行登录 2.升级更新软件包 sudo apt-get update sudo apt-get upgrade 判断都填y 3.安装nginx sudo apt-get i ...
- javascript中常见的函数封装 :判断是否是手机,判断是否是微信,获取url地址?后面的具体参数值,毫秒格式化时间,手机端px、rem尺寸转换等
// 判断是否是手机function plat_is_mobile(){ var sUserAgent = navigator.userAgent.toLowerCase(); var bIsIpad ...
- python3用pyqt5开发简易浏览器
http://python.jobbole.com/82715/ 在这篇教程中,我们会用 Python 的 PyQt 框架编写一个简单的 web 浏览器.关于 PyQt ,你可能已经有所耳闻了,它是 ...
- mac 安装PyQt5
PyQt5官方安装教程指出2种安装方法: Installing from Wheels Building and Installing from Source 网上搜罗的大多是按照第二种方法安装的,本 ...
- Codeforces D. Giving Awards 412 题解
就是依照一定顺序输出排序. 比方a欠b的钱就不能先输出a然后输出b. 本题的技巧就是.要求的是不能先输出a然后输出b,可是能够先输出b然后输出a. 故此能够依照a欠b的钱的关系.建立图,然后DFS深度 ...
- Python \xd7\xaa\xd5\xbdOTT TV\xb1\xa6\xbd\xe0 编码
import chardet s = '\xd7\xaa\xd5\xbdOTT TV\xb1\xa6\xbd\xe0\xc7\xa3\xca\xd6\xd2\xf8\xba\xd3\xa1\xa4\x ...
- 关于 iOS 证书,你必须了解的知识
收录待用,修改转载已取得腾讯云授权 最新腾讯云技术公开课直播,提问腾讯W3C代表,如何从小白成为技术专家?点击了解活动详情. 作者 |陈泽滨 编辑 | 顾乡 从事iOS开发几年,越来越发现,我们的开发 ...