文档章节

游戏服务器-数据库封装

l
 leekay
发布于 2016/06/24 10:36
字数 409
阅读 16
收藏 1

一、什么是单例模式

    单例模式就是一个类有且只有一个对象。在第一次使用这个类时,生成一个对象并常驻内存,在后续的使用中都会直接返回改对象而无需额外生成新的对象,在本次会话结束后由php自动回收。这样可以大大减少服务器开销。

二、封装实例

<?php

/**
 * 单例Redis操作类
 * User: LeeKay
 * Date: 2015/12/1
 * Time: 18:20
 */
class MyRedis extends Redis{
    protected static $_user_db = null;    //玩家数据库编号
    // redis实例
    protected static $_user_redis   = null; //玩家
    protected static $_common_redis = null; //逻辑/公共
    protected static $_global_redis = null; //全服
    protected static $_log_redis    = null; //日志

    /**
     * 角色数据库对象
     *
     * @param $puid
     *
     * @return MyRedis
     */
    public function getUserRedis($puid){
        global $cfg;
        $db = database($puid);
        if($db == self::$_user_db AND null !== self::$_user_redis){
            return self::$_user_redis;
        }else{
            $redis_cfg         = $cfg['db_User_Redis_' . $db];
            self::$_user_redis = new self();
            $host              = $redis_cfg['host'];
            $port              = $redis_cfg['port'];
            self::$_user_redis->connect($host, $port);
            self::$_user_db = $db;
            return self::$_user_redis;
        }
    }

    /**
     * 服务器公共数据库对象
     * @return MyRedis
     */
    public function getCommonRedis(){
        global $cfg;
        if(null === self::$_common_redis){
            $redis_cfg           = $cfg['db_Common_Redis'];
            self::$_common_redis = new self();
            $host                = $redis_cfg['host'];
            $port                = $redis_cfg['port'];
            self::$_common_redis->connect($host, $port);
        }
        return self::$_common_redis;
    }

    /**
     * 全服通用数据库对象
     * @return MyRedis
     */
    public function getGlobalRedis(){
        global $cfg;
        if(null === self::$_global_redis){
            $redis_cfg           = $cfg['db_Global_Redis'];
            self::$_global_redis = new self();
            $host                = $redis_cfg['host'];
            $port                = $redis_cfg['port'];
            self::$_global_redis->connect($host, $port);
        }
        return self::$_global_redis;
    }

    /**
     * 服务器日志队列数据库对象
     * @return MyRedis
     */
    public function getLogRedis(){
        global $cfg;
        if(null === self::$_log_redis){
            $redis_cfg        = $cfg['db_Log_Redis'];
            self::$_log_redis = new self();
            $host             = $redis_cfg['host'];
            $port             = $redis_cfg['port'];
            self::$_log_redis->connect($host, $port);
        }
        return self::$_log_redis;
    }

}
三、应用实例
$uid = 1;//用户ID
$my_redis = new MyRedis();
$role_info = $my_redis->getUserRedis($puid)->GET(Redis_Pfx_RoleInfo . $puid); //角色信息
$level_rank = $my_redis->getLogicRedis()->ZREVRANK(Redis_Pfx_LevelRank, $puid); //我的等级排名

© 著作权归作者所有

共有 人打赏支持
上一篇: 项目建议
l
粉丝 1
博文 17
码字总数 6436
作品 0
虹口
程序员
私信 提问
手机游戏服务器引擎Scut免费开源

scut 官网:http://www.scutgame.com/ Scut是一个开源、免费、稳定、快速开发的手机游戏服务器引擎,支持开发人员使用Python脚本语言或C#语言开发;底层采用C#编写,基于MVC框架思想设计, ...

shezjl
2015/06/16
0
0
分布式游戏服务器端框架--Firefly

Firefly是免费、开源、稳定、快速扩展、能 “热更新”的分布式游戏服务器端框架,采用Python编写,基于Twisted框架开发。它包括了开发框架和数据库缓存服务等各种游戏服务器基础服务,节省大...

大鸡蛋
2013/08/19
63.2K
7
棋牌游戏服务器架构: 总体设计

首先要说明的是, 这个棋牌游戏的服务器架构参考了网狐棋牌的架构。网狐棋牌最令人印象深刻的是其稳定性和高网络负载。它的一份压力测试报告上指出:一台双核r的INTEL Xeon 2.8CPU加上2G内存和...

棋牌游戏服务器托管
2016/11/01
84
0
NF GameEngine V4.0 正式版发布

NF GameEngine V4.0 正式版发布了。NF是一个轻量级的分布式游戏服务器架构,内部自带actor模式以及高效网络库,支持插件编程和模块编程,支持lua脚本,并提出重要编程思想-面向数据编程。 NF...

kytoo
2016/06/15
977
0
山西问天科技高薪急聘程序,策划等职位

问天科技是从事于网络游戏研发及运营的极富创造力的互动娱乐企业,是中国网游领先原创力量的发散地之一。自2008年成立至今,问天科技聚盟业内众多精英,致力于中国西部游戏动漫产业基地的孵化...

潘小坏
2011/06/23
429
9

没有更多内容

加载失败,请刷新页面

加载更多

2019 年最好的 7 款虚拟私人网络服务

糟糕的数据安全会带来极大的代价,特别是对企业而言。它会大致大规模的破坏并影响你的品牌声誉。尽管有些企业可以艰难地收拾残局,但仍有一些企业无法从事故中完全恢复。不过现在,你很幸运地...

linuxCool
38分钟前
1
0
OSChina 周一乱弹 —— 加油,还有11个小时就下班了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @_全村的希望 :吴亦凡把大碗面正儿八经做成单曲了,你别说,还挺好听 《大碗宽面》- 吴亦凡 手机党少年们想听歌,请使劲儿戳(这里) @tom_t...

小小编辑
59分钟前
295
13
C++ vector和list的区别

1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连续的,所以在进行插入和删除操作时,会造...

shzwork
今天
7
0
Spring之invokeBeanFactoryPostProcessors详解

Spring的refresh的invokeBeanFactoryPostProcessors,就是调用所有注册的、原始的BeanFactoryPostProcessor。 相关源码 public static void invokeBeanFactoryPostProcessors(Configu......

cregu
昨天
6
0
ibmcom/db2express-c_docker官方使用文档

(DEPRECIATED) Please check DB2 Developer-C Edition for the replacement. What is IBM DB2 Express-C ? ``IBM DB2 Express-C``` is the no-charge community edition of DB2 server, a si......

BG2KNT
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部