ienaga/ phalcon-redis-plugin
Phalcon的Redis插件(对应MySQL分片)
3.0.0
2019-04-08 21:37 UTC
Requires
- php: >=7.0
- ienaga/phalcon-config-loader-for-yaml: 2.0.0
Requires (Dev)
- phalcon/zephir: 0.9.*
- phpunit/phpunit: 4.8.*
This package is auto-updated.
Last update: 2024-09-09 09:31:46 UTC
README
Composer
{ "require": { "ienaga/phalcon-redis-plugin": "3.*" } }
版本
PHP: 7.0.x, 7.1.x, 7.2.x
Phalcon: 3.x
phpredis和YAML
sudo yum install libyaml libyaml-devel php-pecl-yaml php-pecl-redis
app/config/config.php
@see PhalconConfig
$loader = new Phalcon\Config\Adapter\Yaml\Loader(); return $loader ->setIgnore(["routing"]) // ignore yml names ->setEnvironment("stg") // default dev ->setBasePath(realpath(dirname(__FILE__) . "/../..")) ->load();
app/config/database.yml
prd: stg: dev: database: dbAdminMaster: adapter: Mysql host: 127.0.0.1 port: 3301 username: root password: XXXXX dbname: admin charset: utf8 transaction: true dbAdminSlave: adapter: Mysql host: 127.0.0.1 port: 3311 username: root password: XXXXX dbname: admin charset: utf8 transaction: false dbCommonMaster: adapter: Mysql host: 127.0.0.1 port: 3301 username: root password: XXXXX dbname: common charset: utf8 transaction: false dbCommonSlave: adapter: Mysql host: 127.0.0.1 port: 3311 username: root password: XXXXX dbname: common charset: utf8 transaction: false dbUser1Master: adapter: Mysql host: 127.0.0.1 port: 3306 username: root password: XXXXX dbname: user charset: utf8 transaction: true dbUser1Slave: adapter: Mysql host: 127.0.0.1 port: 3316 username: root password: XXXXX dbname: user charset: utf8 transaction: false dbUser2Master: adapter: Mysql host: 127.0.0.1 port: 3307 username: root password: XXXXX dbname: user charset: utf8 transaction: true dbUser2Slave: adapter: Mysql host: 127.0.0.1 port: 3317 username: root password: XXXXX dbname: user charset: utf8 transaction: false
app/config/redis.yml
prd: stg: dev: redis: # log出力 logger: logging: true # logging ON OFF output: /var/www/project/log/sql.log # output log file path enabled: true # false => cache off autoIndex: true # false => auto index off # 対象のカラムがModelに存在したら使用。上から順に優先。存在が確認できた時点でbreak prefix: columns: # e.g. user_id, id, social_id, [account, password] - user_id - social_id - [account, password] - id # 共通のマスタがあれば登録「table_」と共有部分だけの記載はtable_*と同義 # common common: enabled: false service: name: dbCommon dbs: # e.g. master_, access_log - mst_ # Sharding設定 shard: enabled: true # Shardingを使用しない時はfalse # Shardingのマスタ設定 admin: service: name: dbAdmin # Shardingのマスタ設定 admin: service: name: dbAdmin # ユーザマスタ # e.g. # CREATE TABLE IF NOT EXISTS `admin_user` ( # `id` int(10) unsigned NOT NULL AUTO_INCREMENT, # `social_id` varchar(255) NOT NULL, # `admin_db_config_id` int(10) unsigned NOT NULL, # PRIMARY KEY (`id`) # ) ENGINE=InnoDB DEFAULT CHARSET=utf8; model: AdminUser # e.g. AdminUser or namespace \Project\AdminUser column: admin_db_config_id # e.g. admin_db_config_id # ユーザマスタの登録「table_」と共有部分だけの記載はtable_*と同義 dbs: # e.g. admin_, user_ranking - admin_ # Shardingをコントロールするテーブルとカラム # # e.g. # CREATE TABLE IF NOT EXISTS `admin_db_config` ( # `id` int(10) unsigned NOT NULL AUTO_INCREMENT, # `name` varchar(50) NOT NULL, # `gravity` tinyint(3) unsigned NOT NULL DEFAULT '0', # PRIMARY KEY (`id`) # ) ENGINE=InnoDB DEFAULT CHARSET=utf8; # INSERT INTO `admin_db_config` (`id`, `name`, `gravity`) VALUES # (1, 'dbUser1', 50), # (2, 'dbUser2', 50); # shard config master control: model: AdminDbConfig # e.g. AdminConfigDb or namespace \Project\AdminConfigDb column: name # e.g. name # schemaをキャッシュ metadata: host: 127.0.0.1 port: 6379 select: 0 # servers server: dbMaster: host: 127.0.0.1 port: 6379 select: 0 # redis select [データベースインデックス] dbSlave: host: 127.0.0.1 port: 6379 select: 0 dbCommonMaster: host: 127.0.0.1 port: 6379 select: 0 dbCommonSlave: host: 127.0.0.1 port: 6379 select: 0 dbUser1Master: host: 127.0.0.1 port: 6379 select: 0 dbUser1Slave: host: 127.0.0.1 port: 6379 select: 0 dbUser2Master: host: 127.0.0.1 port: 6379 select: 0 dbUser2Slave: host: 127.0.0.1 port: 6379 select: 0
app/config/services.php
/** * Database connection is created based in the parameters defined in the configuration file */ $dbService = new \Phalcon\Mvc\Model\Adapter\Redis\Service(); $dbService->registration(); /** * If the configuration specify the use of metadata adapter use it or use memory otherwise */ $di->setShared('modelsMetadata', function () { return new \Phalcon\Mvc\Model\Adapter\Redis\Metadata\Redis( $this->getConfig() ->get("redis") ->get("metadata") ->toArray() ); });
findFirst
class Robot extends \Phalcon\Mvc\Model\Adapter\Redis\Model {} # findFirst $robot = Robot::criteria() ->add('id', $id) ->add('type', $type, Criteria::NOT_EQUAL) ->group('type') ->findFirst();
find
class Robot extends \Phalcon\Mvc\Model\Adapter\Redis\Model {} $robot = Robot::criteria() ->add('id', array($id), Criteria::IN) ->add('type', array($start, $end), Criteria::BETWEEN) ->limit(10, 5) // limit, offset ->order('type DESC') ->find();
缓存控制
class Robot extends \Phalcon\Mvc\Model\Adapter\Redis\Model {} $robot = Robot::criteria() ->add('id', array($id), Criteria::IN) ->add('type', array($start, $end), Criteria::BETWEEN) ->limit(10, 30) ->order('type DESC') ->cache(false) ->find();
自动索引控制
class Robot extends \Phalcon\Mvc\Model\Adapter\Redis\Model {} $robot = Robot::criteria() ->add('id', array($id), Criteria::IN) ->add('type', array($start, $end), Criteria::BETWEEN) ->limit(10, 30) ->order('type DESC') ->autoIndex(false) ->find();
保存
class UserItem extends \Phalcon\Mvc\Model\Adapter\Redis\Model {} $userItem = new UserItem(); $userItem->setId($id); $userItem->setType($type); $userItem->save();
更新
class Robot extends \Phalcon\Mvc\Model\Adapter\Redis\Model {} Robot::criteria() ->add("user_status", 1) ->add("power", 100) ->set("status", 2) ->set("name", "robot") ->update();
UPDATE `robot` SET `status` = 2, `name` = "robot" WHERE `user_status` = 1 AND `power` = 100;
删除
class Robot extends \Phalcon\Mvc\Model\Adapter\Redis\Model {} Robot::criteria() ->add("user_status", 1) ->add("power", 100, Robot::GREATER_EQUAL) ->delete();
DELETE FROM `robot` WHERE `user_status` = 1 AND `power` >= 100;
计数
class Robot extends \Phalcon\Mvc\Model\Adapter\Redis\Model {} $count = Robot::criteria() ->add("user_status", 1) ->add("power", 100) ->add("status", 2) ->count();
求和
class Robot extends \Phalcon\Mvc\Model\Adapter\Redis\Model {} $sum = Robot::criteria() ->add("user_status", 1) ->sum("price");
自动索引
例如,PRIMARY = 类型,INDEX = id,状态※将autoIndex设置为true,则按PRIMARY或INDEX匹配的查询顺序执行。
class Robot extends \Phalcon\Mvc\Model\Adapter\Redis\Model {} $robot = Robot::criteria() ->limit(10) ->add("type", $type) ->addGroup("type") ->addOrder("id", "DESC") ->add("status", $status) ->add("id", $id) ->find();
SELECT * FROM `robot` WHERE `id` = :id: AND `type` = :type: AND `status` = :status: GROUP BY `type` ORDER BY `id` DESC LIMIT 10
索引测试模式
将测试模式设置为true以执行SQL。如果没有任何索引匹配,则输出错误。
- 单独
class Robot extends \Phalcon\Mvc\Model\Adapter\Redis\Model {} $robot = Robot::criteria() ->limit(10) ->add("type", $type) ->addGroup("type") ->addOrder("id", "DESC") ->add("status", $status) ->add("id", $id) ->test(true) ->find();
- 全部
class Robot extends \Phalcon\Mvc\Model\Adapter\Redis\Model {} \RedisPlugin\Mvc\Model::test(true); $robot = Robot::criteria() ->limit(10) ->add("type", $type) ->addGroup("type") ->addOrder("id", "DESC") ->add("status", $status) ->add("id", $id) ->find();