php redis(2)

【config_inc.php】
<?php
//APP的读账号
//$config[‘appServer‘][‘servername‘] = ‘app.com‘;
$config[‘appServer‘][‘servername‘] = ‘127.0.0.1‘;
$config[‘appServer‘][‘port‘] = 3306;
$config[‘appServer‘][‘username‘] = ‘app‘;
$config[‘appServer‘][‘password‘] = ‘fjdi23ksKdj‘;
$config[‘appServer‘][‘pconnect‘] = 0;
$config[‘appServer‘][‘dbname‘] = ‘research‘;
$config[‘appServer‘][‘charset‘] = ‘utf8‘;
 
 
/*redis 队列配置文件*/
//默认配置
$redis_cfg[‘default‘][‘server‘] = ‘127.0.0.1‘;//write
$redis_cfg[‘default‘][‘port‘] = ‘6379‘;//write
$redis_cfg[‘read‘][‘server‘] = ‘127.0.0.1‘;
$redis_cfg[‘read‘][‘port‘] = ‘6379‘;
?>
 
 
 
【redis.class.php】
<?php
 /**
 * redis 公共类
 * 使用phpredis扩展,根据目前应用只提供如下方法,请不要随意添加,如有需要请与作者联系
 * @version 1.00
 * @author sean
 */
class redis_class{
    private $ret = Null;
    private $rets = Array();
 
    public function __construct(){}
 
    public function connect($redis_cfg){
        //iflese用来处理是否连接过,连接过则直接返回
        if(isset($this -> rets[$redis_cfg[‘server‘]]) === TRUE){
            $this -> ret = $this -> rets[$redis_cfg[‘server‘]];
            return TRUE;
        }else{
            $this -> ret = new Redis();
            //判断是否连接成功
            if($this -> ret -> connect($redis_cfg[‘server‘], $redis_cfg[‘port‘]) === TRUE){
                $this -> rets[$redis_cfg[‘server‘]] = $this -> ret;
                return TRUE;
            }
        }
    }
 
    public function close(){
        foreach($this -> rets as $rets){
            $rets -> close();
        }
    }
 
    public function sadd($key, $message = ‘‘){
        global $redis_cfg;
        $this -> connnect($redis_cfg[‘default‘]);
        //sAdd:向键为Key的Set中加值,如果值存在,则不写入,返回FALSE
        return $this -> ret -> sAdd($key, $message);
    }
 
    public function sget($key){
        global $redis_cfg;
        $this -> connect($redis_cfg[‘read‘]);
        //sort:对名称为Key的set集合进行排序 默认升序
        return $this -> ret -> sort($key);
    }
 
    public function srem($key, $value){
        global $redis_cfg;
        $this -> connect($redis_cfg[‘default‘]);
        //sRem:删除名为Key的set中的一个value
        return $this -> ret -> sRem($key, $value);
    }
     
    public function setex($key, $value = ‘‘, $time = 86400){
        global $redis_cfg;
        $this -> connect($redis_cfg[‘default‘]);
        //setex: 设置数据缓存时间
        return $this -> ret -> setex($key, $time, serialize($value));
    }
 
    public function set($key, $value){
        global $redis_cfg;
        $this -> connect($redis_cfg[‘default‘]);
        //set:写入key 和 value
        return $this -> ret -> set($key, serialize($value));
    }
 
    public function get($key){
        global $redis_cfg;
        $this -> connect($redis_cfg[‘read‘]);
        //get:读取某个key的值,如果key不存在,返回FALSE
        return unserialize($this -> ret -> get($key));
    }
 
    public function delete($key){
        global $redis_cfg;
        $this -> connect($redis_cfg[‘default‘]);
        //delete: 删除指定key的值 返回已删除key的个数(长整数)
        return $this -> ret -> delete($key);
    }
 
    public function hincrby($hash, $key, $num){
        global $redis_cfg;
        $this -> connect($redis_cfg[‘default‘]);
        //hIncrBy:将名称为hash中的key的值增加num
        return $this -> ret -> hIncrBy($hash, $key, $num);
    }
 
    public function hget($hash, $key){
        global $redis_cfg;
        $this -> connect($redis_cfg[‘read‘]);
        //hGet: 返回名称为hash中key的值
        return $this -> ret -> hGet($hash, $key);
    }
 
    public function hgetall($hash){
        global $redis_cfg;
        $this -> connect($redis_cfg[‘read‘]);
        //hGetAll: 返回名称为hash中所有的键及其对应的Value
        return $this -> ret -> hGetAll($hash);
    }
 
    //key不能md5加密, 否则无法读取信息
    public function redis_mc_set($key, $value, $max_cache_file_time = 86400){
         
        //只提取第一个表名
        preg_match_all(‘/[\s]+from[\s]+([^,\s(.*)]*)/i‘,$key, $out);
        if(isset($out[1][0]) === TRUE){
            $table_name = $out[1][0];
            $all_tables = $this -> sget(‘TABLE_ALL‘);
            //验证数据库的合法性
            if(in_array($table_name, $all_tables) === FALSE){
                return FALSE;
            }
        }else{
            $talbe_name = ‘other_keys‘;
        }
         
        $tmp_res = $this -> sadd(‘TABLE_‘ . $table_name, $key);
        if($tmp_res){
            $this -> hincrby(‘KEY_SIZE‘, $key, strlen(serialize($value)));
        }
        $this -> hincrby(‘KEY_WRITE_NUMBER‘,$key, 1);
        return $this -> setex(md5($key), $value, $max_cache_file_time);
    }
 
    public function redis_mc_get($key){
        $this -> hincrby(‘KEY_NUMBER‘, $key, 1);
        return $this -> get(md5($key));
    }
}
?>
 
 
 
【produc.class.php 数据读取放入redis】
<?php
require_once(‘config_inc.php‘);
class product{
    function get_sql_array($db,$sql,$flash=0,$max_cache_file_time=3600){
        require_once(‘redis.class.php‘);
        $redis = new redis_class();
        if ($flash == 0)
        {
            $res = $redis->redis_mc_get($sql);
        }
        if ((isset($res) === FALSE) || ($res === FALSE))
        {
            $res = $db->fetch_array($db->query($sql));
            $redis -> redis_mc_set($sql , $res, $max_cache_file_time);
        }
        return $res;
    }
}
 
//实例
$prd = new product();
$result = $prd -> get_sql_array($db,$sql,$flash=0,$max_cache_file_time=3600);
var_dump($result);
?>
时间: 2025-01-04 15:27:36

php redis(2)的相关文章

Redis+keepalived实现双机热备

一. 简介 安装使用centos 5.6(64) Master 192.168.2.235 Slave 192.168.2.236 Vip 192.168.2.200 编译环境 yum -y install gcc gcc+ gcc-c++ openssl openssl-devel pcre pcre-devel 当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby: 当 Master 挂掉,Slave 正常时, Slave接管服务,同时关闭主从

Python操作数据库(mysql redis)

一.python操作mysql数据库: 数据库信息:(例如211.149.218.16   szz  123456) 操作mysql用pymysql模块 #操作其他数据库,就安装相应的模块 import  pymysql ip='211.149.218.16' port=3306 passwd='123456' user='root' db='szz' conn=pymysql.connect(host=ip,user=user,port=port,passwd=passwd,db=db,cha

Redis在Linux中安装使用

一.安装$ wget http://download.redis.io/releases/redis-x.x.x.tar.gz $ tar xzf redis-x.x.x.tar.gz $ cd redis-x.x.x $ make sudo cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-cli redis-check-rdb redis-trib.rb redis-sentinel redis-server /usr/loca

redis 学习 四 队列

<?php /** * redis实战 * * 利用列表list实现简单队列 * * @example php cache.php */ header('content-type:text/html;chaeset=utf-8'); $redis = new \Redis(); $redis->connect('127.0.0.1', 6379); // 进队列 $userId = mt_rand(000000, 999999); $redis->rpush('QUEUE_NAME',j

Redis实战(三)Redis主从复制

从架构 1.主从架构图 2.通过命令 mkdir redisCluster创建redis集群文件夹 3.通过命令mkdir 6380   mkdir 6381   mkdir 6382在redisCluster文件夹下创建三个文件夹 4.通过以下命令将redis.conf分别拷贝到6380.6381. 6382文件夹下 cp /usr/local/redis/redis-3.0.2/redis.conf  ./6380 cp /usr/local/redis/redis-3.0.2/redis.

Redis Cluster集群部署搭建

在Oracle的路上走了许多年,换换感觉,尝试一下新的知识,也是一个不错的感觉.Redis,一个超轻量化的内存数据库,只做一小块数据库功能实现,却非常优秀的一个产品.今天,就分享一下安装Redis集群的过程. 搭建redis集群,建议至少需要准备3台服务器,共搭建6个节点,3个master,3个slave,并且要求3个master节点不能全部跑到同一台服务器上,保证节点安全,3台服务器的配置相同,使用redistest账号搭建,对应的端口是7000/7001/7002端口 我的集群分配如下,每个

redis的单机安装与配置以及生产环境启动方案

简单介绍一下redis的单机安装与配置,方便自己记录安装步骤的同时方便他人获取知识. 首先,从官网下载最新版的(稳定版)的redis安装包.官网地址如下:https://redis.io/download 下载源码包后,redis需要编译安装.需要安装gcc和tcl,gcc用于编译tcl用于测试. 使用命令安装gcc,yum install gcc,一路选择yes,gcc就可以安装成功. 接下来安装tcl,首先获取tcl源码包(见百度云盘)或者使用命令:wget http://downloads

Redis学习之Sort Set详解

本文和大家分享的主要是Redis中Sort Set相关内容,一起来看看吧,希望对大家学习redis有所帮助. 游戏服务器需要做一个排行榜实时更新,如果沿用传统的方法,一般是通过后端的定时任务去跑数据来生成排行榜数据,这种方法一方面无法满足产品对功能实时性的要求,另一方面也一定程度上消耗服务器端有限的资源.如果从每次数据库读取数据并进行排名(使用Mysql的sort关键字进行排序),在关卡数据量的级数大时是一种效率低的方法.在查阅大量资料后,发现了Redis中的有序集合(Sort Set). Re

redis 集群

redis 集群 redis集群是redis提供分布式数据库方案, 集群通过分片(Sharding)来进行数据共享,并提供复制和故障转移功能. 节点 redis集群通常由多个节点(node)组成,在开始每个node 都是相互独立的. 要组建成真正可工作的集群,我们必须将各个独立的节点连接起来,构成一个包含多个节点的集群. 命令 cluster meet <ip> <port> 向一个node 发送命令 cluster meet,让节点与ip/port所指定的节点 进行握手(hand

常见redis.conf解析

参数说明redis.conf 配置项说明如下:1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程daemonize no2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定pidfile /var/run/redis.pid3. 指定Redis监听端口,默认端口为6379,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码