{"id":13805947,"url":"https://github.com/ienaga/RedisPlugin","last_synced_at":"2025-05-13T21:32:03.210Z","repository":{"id":31634110,"uuid":"35199287","full_name":"ienaga/RedisPlugin","owner":"ienaga","description":"RedisPlugin for Phalcon","archived":false,"fork":false,"pushed_at":"2019-04-08T21:37:30.000Z","size":270,"stargazers_count":16,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-04-16T22:21:25.955Z","etag":null,"topics":["mysql","phalcon","php7","redis"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ienaga.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-05-07T04:47:37.000Z","updated_at":"2022-10-07T05:53:40.000Z","dependencies_parsed_at":"2022-09-10T06:51:58.669Z","dependency_job_id":null,"html_url":"https://github.com/ienaga/RedisPlugin","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ienaga%2FRedisPlugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ienaga%2FRedisPlugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ienaga%2FRedisPlugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ienaga%2FRedisPlugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ienaga","download_url":"https://codeload.github.com/ienaga/RedisPlugin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":213870459,"owners_count":15650178,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mysql","phalcon","php7","redis"],"created_at":"2024-08-04T01:01:06.510Z","updated_at":"2024-08-04T01:05:30.328Z","avatar_url":"https://github.com/ienaga.png","language":"PHP","funding_links":[],"categories":["ORM"],"sub_categories":[],"readme":"RedisPlugin for Phalcon (The correspondence of MySQL sharding.)\n======\n\n[![Build Status](https://travis-ci.org/ienaga/RedisPlugin.svg?branch=master)](https://travis-ci.org/ienaga/RedisPlugin)\n\n[![Latest Stable Version](https://poser.pugx.org/ienaga/phalcon-redis-plugin/v/stable)](https://packagist.org/packages/ienaga/phalcon-redis-plugin) [![Total Downloads](https://poser.pugx.org/ienaga/phalcon-redis-plugin/downloads)](https://packagist.org/packages/ienaga/phalcon-redis-plugin) [![Latest Unstable Version](https://poser.pugx.org/ienaga/phalcon-redis-plugin/v/unstable)](https://packagist.org/packages/ienaga/phalcon-redis-plugin) [![License](https://poser.pugx.org/ienaga/phalcon-redis-plugin/license)](https://packagist.org/packages/ienaga/phalcon-redis-plugin)\n\n# Composer\n\n```json\n{\n    \"require\": {\n       \"ienaga/phalcon-redis-plugin\": \"3.*\"\n    }\n}\n```\n\n\n## Version\n```\nPHP: 7.0.x, 7.1.x, 7.2.x\nPhalcon: 3.x\n```\n\n\n## phpredis and YAML\n\n```linux\nsudo yum install libyaml libyaml-devel php-pecl-yaml php-pecl-redis\n```\n\n## app/config/config.php\n\n### @see [PhalconConfig](https://github.com/ienaga/PhalconConfig)\n\n```php\n$loader = new Phalcon\\Config\\Adapter\\Yaml\\Loader();\nreturn $loader\n    -\u003esetIgnore([\"routing\"]) // ignore yml names\n    -\u003esetEnvironment(\"stg\") // default dev\n    -\u003esetBasePath(realpath(dirname(__FILE__) . \"/../..\"))\n    -\u003eload();\n```\n\n\n## app/config/database.yml\n\n```yaml\nprd:\nstg:\ndev:\n  database:\n    dbAdminMaster:\n      adapter:  Mysql\n      host:     127.0.0.1\n      port:     3301\n      username: root\n      password: XXXXX\n      dbname:   admin\n      charset:  utf8\n      transaction: true\n    dbAdminSlave:\n      adapter:  Mysql\n      host:     127.0.0.1\n      port:     3311\n      username: root\n      password: XXXXX\n      dbname:   admin\n      charset:  utf8\n      transaction: false\n    dbCommonMaster:\n      adapter:  Mysql\n      host:     127.0.0.1\n      port:     3301\n      username: root\n      password: XXXXX\n      dbname:   common\n      charset:  utf8\n      transaction: false\n    dbCommonSlave:\n      adapter:  Mysql\n      host:     127.0.0.1\n      port:     3311\n      username: root\n      password: XXXXX\n      dbname:   common\n      charset:  utf8\n      transaction: false\n    dbUser1Master:\n      adapter:  Mysql\n      host:     127.0.0.1\n      port:     3306\n      username: root\n      password: XXXXX\n      dbname:   user\n      charset:  utf8\n      transaction: true\n    dbUser1Slave:\n      adapter:  Mysql\n      host:     127.0.0.1\n      port:     3316\n      username: root\n      password: XXXXX\n      dbname:   user\n      charset:  utf8\n      transaction: false\n    dbUser2Master:\n      adapter:  Mysql\n      host:     127.0.0.1\n      port:     3307\n      username: root\n      password: XXXXX\n      dbname:   user\n      charset:  utf8\n      transaction: true\n    dbUser2Slave:\n      adapter:  Mysql\n      host:     127.0.0.1\n      port:     3317\n      username: root\n      password: XXXXX\n      dbname:   user\n      charset:  utf8\n      transaction: false\n```\n\n## app/config/redis.yml\n\n```yaml\nprd:\nstg:\ndev:\n  redis:\n    # log出力\n    logger:\n      logging: true # logging ON OFF\n      output:  /var/www/project/log/sql.log # output log file path\n      \n    enabled:   true # false =\u003e cache off\n    autoIndex: true # false =\u003e auto index off\n\n    # 対象のカラムがModelに存在したら使用。上から順に優先。存在が確認できた時点でbreak\n    prefix:\n      columns:  # e.g. user_id, id, social_id, [account, password]\n        - user_id\n        - social_id\n        - [account, password]\n        - id\n\n    # 共通のマスタがあれば登録「table_」と共有部分だけの記載はtable_*と同義\n    # common\n    common:\n      enabled: false\n      service:\n        name: dbCommon\n\n      dbs: # e.g.  master_, access_log\n        - mst_\n\n    # Sharding設定\n    shard:\n      enabled: true # Shardingを使用しない時はfalse\n\n    # Shardingのマスタ設定\n    admin:\n      service:\n        name: dbAdmin\n        \n    # Shardingのマスタ設定\n    admin:\n      service:\n        name: dbAdmin\n      # ユーザマスタ\n      # e.g.\n      #    CREATE TABLE IF NOT EXISTS `admin_user` (\n      #      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,\n      #      `social_id` varchar(255) NOT NULL,\n      #      `admin_db_config_id` int(10) unsigned NOT NULL,\n      #      PRIMARY KEY (`id`)\n      #    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;\n      model: AdminUser # e.g. AdminUser or namespace \\Project\\AdminUser\n      column: admin_db_config_id # e.g. admin_db_config_id\n\n      # ユーザマスタの登録「table_」と共有部分だけの記載はtable_*と同義\n      dbs: # e.g. admin_, user_ranking\n        - admin_\n        \n      # Shardingをコントロールするテーブルとカラム\n      #\n      # e.g.\n      #    CREATE TABLE IF NOT EXISTS `admin_db_config` (\n      #      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,\n      #      `name` varchar(50) NOT NULL,\n      #      `gravity` tinyint(3) unsigned NOT NULL DEFAULT '0',\n      #      PRIMARY KEY (`id`)\n      #    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;\n      #    INSERT INTO `admin_db_config` (`id`, `name`, `gravity`) VALUES\n      #    (1, 'dbUser1', 50),\n      #    (2, 'dbUser2', 50);\n      # shard config master\n      control:\n        model: AdminDbConfig # e.g. AdminConfigDb or namespace \\Project\\AdminConfigDb\n        column: name # e.g. name\n\n    # schemaをキャッシュ\n    metadata:\n      host:   127.0.0.1\n      port:   6379\n      select: 0\n      \n    # servers\n    server:\n      dbMaster:\n        host: 127.0.0.1\n        port: 6379\n        select: 0 # redis select [データベースインデックス]\n      dbSlave:\n        host: 127.0.0.1\n        port: 6379\n        select: 0\n      dbCommonMaster:\n        host: 127.0.0.1\n        port: 6379\n        select: 0\n      dbCommonSlave:\n        host: 127.0.0.1\n        port: 6379\n        select: 0\n      dbUser1Master:\n        host: 127.0.0.1\n        port: 6379\n        select: 0\n      dbUser1Slave:\n        host: 127.0.0.1\n        port: 6379\n        select: 0\n      dbUser2Master:\n        host: 127.0.0.1\n        port: 6379\n        select: 0\n      dbUser2Slave:\n        host: 127.0.0.1\n        port: 6379\n        select: 0\n```\n\n\n## app/config/services.php\n\n```php\n/**\n * Database connection is created based in the parameters defined in the configuration file\n */\n$dbService = new \\Phalcon\\Mvc\\Model\\Adapter\\Redis\\Service();\n$dbService-\u003eregistration();\n\n/**\n * If the configuration specify the use of metadata adapter use it or use memory otherwise\n */\n$di-\u003esetShared('modelsMetadata', function () {\n    return new \\Phalcon\\Mvc\\Model\\Adapter\\Redis\\Metadata\\Redis(\n        $this-\u003egetConfig()\n            -\u003eget(\"redis\")\n            -\u003eget(\"metadata\")\n            -\u003etoArray()\n    );\n});\n```\n\n\n## findFirst\n\n```php\nclass Robot extends \\Phalcon\\Mvc\\Model\\Adapter\\Redis\\Model {}\n\n# findFirst\n$robot = Robot::criteria()\n    -\u003eadd('id', $id)\n    -\u003eadd('type', $type, Criteria::NOT_EQUAL)\n    -\u003egroup('type')\n    -\u003efindFirst();\n```\n\n\n## find\n\n```php\nclass Robot extends \\Phalcon\\Mvc\\Model\\Adapter\\Redis\\Model {}\n\n$robot = Robot::criteria()\n    -\u003eadd('id', array($id), Criteria::IN)\n    -\u003eadd('type', array($start, $end), Criteria::BETWEEN)\n    -\u003elimit(10, 5) // limit, offset\n    -\u003eorder('type DESC')\n    -\u003efind();\n```\n            \n            \n## cache Control\n\n```php\nclass Robot extends \\Phalcon\\Mvc\\Model\\Adapter\\Redis\\Model {}\n\n$robot = Robot::criteria()\n    -\u003eadd('id', array($id), Criteria::IN)\n    -\u003eadd('type', array($start, $end), Criteria::BETWEEN)\n    -\u003elimit(10, 30)\n    -\u003eorder('type DESC')\n    -\u003ecache(false)\n    -\u003efind();\n```\n\n\n## autoIndex Control\n\n```php\nclass Robot extends \\Phalcon\\Mvc\\Model\\Adapter\\Redis\\Model {}\n\n$robot = Robot::criteria()\n    -\u003eadd('id', array($id), Criteria::IN)\n    -\u003eadd('type', array($start, $end), Criteria::BETWEEN)\n    -\u003elimit(10, 30)\n    -\u003eorder('type DESC')\n    -\u003eautoIndex(false)\n    -\u003efind();\n```\n\n\n## save\n\n```php\nclass UserItem extends \\Phalcon\\Mvc\\Model\\Adapter\\Redis\\Model {}\n\n$userItem = new UserItem();\n$userItem-\u003esetId($id);\n$userItem-\u003esetType($type);\n$userItem-\u003esave();\n\n```\n\n\n## update\n\n```php\nclass Robot extends \\Phalcon\\Mvc\\Model\\Adapter\\Redis\\Model {}\n\nRobot::criteria()\n    -\u003eadd(\"user_status\", 1)\n    -\u003eadd(\"power\", 100)\n    -\u003eset(\"status\", 2)\n    -\u003eset(\"name\", \"robot\")\n    -\u003eupdate();\n```\n\n```mysql\nUPDATE `robot` SET `status` = 2, `name` = \"robot\" WHERE `user_status` = 1 AND `power` = 100;\n```\n\n\n## delete\n\n```php\nclass Robot extends \\Phalcon\\Mvc\\Model\\Adapter\\Redis\\Model {}\n\nRobot::criteria()\n    -\u003eadd(\"user_status\", 1)\n    -\u003eadd(\"power\", 100, Robot::GREATER_EQUAL)\n    -\u003edelete();\n```\n\n```mysql\nDELETE FROM `robot` WHERE `user_status` = 1 AND `power` \u003e= 100;\n```\n\n\n## count\n\n```php\nclass Robot extends \\Phalcon\\Mvc\\Model\\Adapter\\Redis\\Model {}\n\n$count = Robot::criteria()\n    -\u003eadd(\"user_status\", 1)\n    -\u003eadd(\"power\", 100)\n    -\u003eadd(\"status\", 2)\n    -\u003ecount();\n```\n\n\n## sum\n\n```php\nclass Robot extends \\Phalcon\\Mvc\\Model\\Adapter\\Redis\\Model {}\n\n$sum = Robot::criteria()\n    -\u003eadd(\"user_status\", 1)\n    -\u003esum(\"price\");\n```\n\n\n## autoIndex\n\ne.g. PRIMARY = type, INDEX = id, status\n※autoIndexをtrueにする事で、PRIMARYもしくはINDEXに一番マッチするクエリに並び替えて発行。\n\n \n```php\nclass Robot extends \\Phalcon\\Mvc\\Model\\Adapter\\Redis\\Model {}\n\n$robot = Robot::criteria()\n    -\u003elimit(10)\n    -\u003eadd(\"type\", $type)\n    -\u003eaddGroup(\"type\")\n    -\u003eaddOrder(\"id\", \"DESC\")\n    -\u003eadd(\"status\", $status)\n    -\u003eadd(\"id\", $id)\n    -\u003efind();\n```\n\n```mysql\nSELECT * FROM `robot` \nWHERE `id` = :id: \nAND `type` = :type:\nAND `status` = :status: \nGROUP BY `type`\nORDER BY `id` DESC\nLIMIT 10\n```\n\n## Index Test Mode\n\nテストモードをtrueにしてSQLを発行。\nどのIndexにもマッチしない時はErrorを出力。\n\n\n* 単体\n```php\nclass Robot extends \\Phalcon\\Mvc\\Model\\Adapter\\Redis\\Model {}\n\n$robot = Robot::criteria()\n    -\u003elimit(10)\n    -\u003eadd(\"type\", $type)\n    -\u003eaddGroup(\"type\")\n    -\u003eaddOrder(\"id\", \"DESC\")\n    -\u003eadd(\"status\", $status)\n    -\u003eadd(\"id\", $id)\n    -\u003etest(true)\n    -\u003efind();\n```\n\n* 全体\n\n```php\nclass Robot extends \\Phalcon\\Mvc\\Model\\Adapter\\Redis\\Model {}\n\n\\RedisPlugin\\Mvc\\Model::test(true);\n\n$robot = Robot::criteria()\n    -\u003elimit(10)\n    -\u003eadd(\"type\", $type)\n    -\u003eaddGroup(\"type\")\n    -\u003eaddOrder(\"id\", \"DESC\")\n    -\u003eadd(\"status\", $status)\n    -\u003eadd(\"id\", $id)\n    -\u003efind();\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fienaga%2FRedisPlugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fienaga%2FRedisPlugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fienaga%2FRedisPlugin/lists"}