Redis 模型

介绍

Redis 模型适合固定结构的数据结构,可以跟关系型数据库的模型一样,无需关心直接的操作,增删改查一把梭。

模型定义

喜闻乐见的对命名空间、类名无要求,只要按照规定写注解即可!

具体定义看下面代码:

  1. <?php
  2. namespace ImiDemo\HttpDemo\MainServer\Model;
  3. use Imi\Model\RedisModel;
  4. use Imi\Model\Annotation\Table;
  5. use Imi\Model\Annotation\Column;
  6. use Imi\Model\Annotation\Entity;
  7. use Imi\Model\Annotation\RedisEntity;
  8. /**
  9. * Test
  10. * @Entity
  11. * @RedisEntity(poolName="redis", key="{id}-{name}")
  12. */
  13. class TestRedisModel extends RedisModel
  14. {
  15. /**
  16. * id
  17. * @Column(name="id")
  18. * @var int
  19. */
  20. protected $id;
  21. /**
  22. * 获取 id
  23. *
  24. * @return int
  25. */
  26. public function getId()
  27. {
  28. return $this->id;
  29. }
  30. /**
  31. * 赋值 id
  32. * @param int $id id
  33. * @return static
  34. */
  35. public function setId($id)
  36. {
  37. $this->id = $id;
  38. return $this;
  39. }
  40. /**
  41. * name
  42. * @Column(name="name")
  43. * @var string
  44. */
  45. protected $name;
  46. /**
  47. * 获取 name
  48. *
  49. * @return string
  50. */
  51. public function getName()
  52. {
  53. return $this->name;
  54. }
  55. /**
  56. * 赋值 name
  57. * @param string $name name
  58. * @return static
  59. */
  60. public function setName($name)
  61. {
  62. $this->name = $name;
  63. return $this;
  64. }
  65. /**
  66. * age
  67. * @Column(name="age")
  68. * @var string
  69. */
  70. protected $age;
  71. /**
  72. * 获取 age
  73. *
  74. * @return string
  75. */
  76. public function getAge()
  77. {
  78. return $this->age;
  79. }
  80. /**
  81. * 赋值 age
  82. * @param string $age age
  83. * @return static
  84. */
  85. public function setAge($age)
  86. {
  87. $this->age = $age;
  88. return $this;
  89. }
  90. }

需要使用注解将表、字段属性全部标注。并且写上getset方法。

@RedisEntity

指定当前类为Redis实体类
可选属性:
poolNameredis连接池名称
db第几个库,不传为null时使用连接池默认配置
key键,支持定义多个参数,默认为{key},在RedisModel中已经预先定义了setKey()getKey()方法
ttl数据默认的过期时间,null为永不过期

@Column

Redis模型中只有name生效

模型操作

所有操作都是依据上面定义的TestRedisModel

查找一条记录

  1. // 读取-直接传key
  2. $model2 = TestRedisModel::find('123-imi');
  3. // 读取-传参数组成
  4. $model3 = TestRedisModel::find([
  5. 'id' => '123',
  6. 'name' => 'imi'
  7. ]);

查询多条记录

  1. $list = TestRedisModel::select('kkk', '123-imi', [
  2. 'id' => '123',
  3. 'name' => 'imi'
  4. ]);
  5. foreach($list as $item)
  6. {
  7. var_dump($item->toArray());
  8. }

保存记录

  1. $model = TestRedisModel::newInstance();
  2. $model->setId(123);
  3. $model->setName('imi');
  4. $model->setAge(100);
  5. $model->save();

删除记录

  1. $model2 = TestRedisModel::find('123-imi');
  2. $model2->delete();

批量删除

  1. // 删除键为key和123-imi的数据
  2. // 123-imi是以RedisEntity中定义为准
  3. TestRedisModel::deleteBatch('kkk', [
  4. 'id' => '123',
  5. 'name' => 'imi'
  6. ]);