PHPackages                             wuhen/redislib - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. wuhen/redislib

ActiveLibrary[Database &amp; ORM](/categories/database)

wuhen/redislib
==============

redis 数据库,支持orm方式查询,结合lua 支持mongodb方式查询模式,mongoDB inspired JSON filters for redis

18PHP

Since Dec 31Pushed 6y ago1 watchersCompare

[ Source](https://github.com/guoqing1988/redislib)[ Packagist](https://packagist.org/packages/wuhen/redislib)[ RSS](/packages/wuhen-redislib/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

redis 数据库,支持orm方式查询,结合lua 支持mongodb方式查询模式,mongoDB inspired JSON filters for redis
=================================================================================

[](#redis-数据库支持orm方式查询结合lua-支持mongodb方式查询模式mongodb-inspired-json-filters-for-redis)

特性
--

[](#特性)

- 为不同的数据类型封装了统一的命令，支持常用的5种数据类型：string, hash, list, set, zset
- 支持在redis内部 进行mongodb查询模式
- 支持类似SQL的查询方法，如where、where in等
- 使用eval降低在网络通信上的时间消耗
- "set"类命令均支持修改key的ttl或保留当前ttl

已封装的命令
------

[](#已封装的命令)

- create: 创建key
- createNotExists: 当key不存在时创建
- createExists: 当key存在时创建
- findInRedis: mongodb查询模式 进行查询排序
- insert: 类似create，支持披批量创建
- insertNotExists: 批量创建，当所有key不存在时才创建
- insertExists: 批量创建，当所有key存在时才创建
- get: 批量获取key
- getAndSet: 获取key并设置新值
- find: 获取单个key
- findBatch: 批量获取
- update: 批量更新
- destroy: 删除key
- destroyBatch: 批量删除
- delete: 批量删除

安装
--

[](#安装)

推荐使用[composer](https://getcomposer.org/)安装

```
composer require "wuhen/redislib"
```

使用
--

[](#使用)

### 通过拼装key 进行查询

[](#通过拼装key-进行查询)

```
use Wuhen\Redislib\Model\HashModel;
use Wuhen\Redislib\Model\StringModel;

$person = [
   'name' => 'martin',
   'age' => '22',
   'height' => '175',
   'nation' => 'China',
];
$hashModel = new HashModel();
$hashModel->create(1, $person);
$hashModel->find(1);                    // 返回 $person
$hashModel->where('id',1)->first();     // 返回 $person
$hashModel->where('id',1)->get();       // 返回 ['redisun:1:hash' => $person]
$hashModel->where('id',1)->delete();    // 从redis数据库删除"redisun:1:hash"

$nick = 'martin-walk';

$stringModel = new StringModel();
$stringModel->insert([
    'id' => 1,
    'name' => 'martin'
], $nick);
$stringModel->where('id',1)->first();   // 返回 $nick
$stringModel->where('id',1)->get();     // 返回 ['redisun:1:string:martin' => $nick]

```

### redis内部进行 查询

[](#redis内部进行-查询)

```
$data = [
    {
        "type": "1",
        "point": "100",
        "id": "2",
        "image": "http://picture.eclicks.cn/g2/l/2019/11/04/1a9d0eaa63254eb4_240_120.png",
        "name": "国旗",
        "status": "1",
        "level": "1,3,4,5",
        "seq": "1",
    },
    {
        "type": "1",
        "point": "100",
        "id": "5",
        "image": "http://picture.eclicks.cn/g2/l/2019/11/04/1a9d0eaa63254eb4_240_120.png",
        "name": "国旗1",
        "status": "1",
        "level": "2",
        "seq": "1",
    },
    {
        "type": "1",
        "point": "100",
        "id": "6",
        "image": "http://picture.eclicks.cn/g2/l/2019/11/04/1a9d0eaa63254eb4_240_120.png",
        "name": "国旗2",
        "status": "1",
        "level": "3",
        "seq": "1",
    },
];
$table = "test";
$model = new \Wuhen\Redislib\Model\HashModel();
$model->insert(['name'=>$table],$data);
$res = $model->where('name',$table)->findInRedis(["type"=>1,"level"=>['inset',[1,2,4]]],"seq asc",$limit,'id,name,seq');

//返回
[
    {
        "id": "2",
        "name": "国旗",
        "seq": "1",
    },
    {
        "id": "5",
        "name": "国旗1",
        "seq": "1",
    }
];

```

### 与 RDBMS Where 语句比较

[](#与-rdbms-where-语句比较)

范例中用json格式标示 ,使用中转换为 array

操作格式范例RDBMS中的类似语句等于{key:value}
{key:\["eq",value\]}findInRedis({"id":"123"})where id = '123'小于{key:\["lt",value\]}
{key:\["&lt;",value\]}findInRedis({"id":\["&lt;",123\]})where id &lt; '123'小于等于{key:\["lte",value\]}
{key:\["&lt;=",value\]}findInRedis({"id":\["&lt;=",123\]})where id &lt;= '123'大于{key:\["gt",value\]}
{key:\["&gt;",value\]}findInRedis({"id":\["&gt;",123\]})where id &gt; '123'大于等于{key:\["gte",value\]}
{key:\["&gt;=",value\]}findInRedis({"id":\["&gt;=",123\]})where id &gt;= '123'不等于{key:\["ne",value\]}
{key:\["!=",value\]}findInRedis({"id":\["!=",123\]})where id != '123'两个数之间{key:\["between",\[value\]\]}findInRedis({"id":\["between",\[100,200\]\]})where id BETWEEN 100 AND 200like{key:\["like",value\]}findInRedis({"id":\["like",123\]})where id like '%123%'in{key:\["in",\[value\]\]}findInRedis({"id":\["in",\[1,2,3\]})where id in (1,2,3,4)nin{key:\["nin",\[value\]\]}findInRedis({"id":\["nin",\[1,2,3\]})where id not in (1,2,3,4)inset{key:\["inset",\[1,2,3\]\]}findInRedis({"ids":\["inset",\[1,2,3\]})where find\_in\_set(1,ids)### 排序(支持多列排序)

[](#排序支持多列排序)

字符串数组说明id asc\[\["id",1\]\]支持 asc desc,数字 1 2id asc,level desc\[\["id",1\],\["level",2\]\]支持 asc desc,数字 1 2### 显示字段

[](#显示字段)

字符串说明id,name,level按字段获取\*取全部字段概念
--

[](#概念)

#### *Key表征*

[](#key表征)

每一个Model都有自己的key表征。查询时依据key表征来构造key。例如

```
school:{schoolId}:class:{classId}:members

```

对于拥有这个key表征的Model，我们可以使用where和where in来查询redis

```
$model->where('schoolId',1)->whereIn('classId',[1,2])->get();

```

最终构造出的key如下。这也是将要向redis查询的key

```
school:1:class:1:members
school:1:class:2:members

```

#### *Key域*

[](#key域)

Key域是key表征中的动态部分。

以上面的key表征为例，它有两个域

- schoolId
- classId

#### *完全key*

[](#完全key)

一个构造出的key不包含未绑定的域时，这个key被认为是完全的。例如

```
school:1:class:2:members

```

相反，一个不完全的key类似于

```
school:1:class:{classId}:members

```

返回的数据集
------

[](#返回的数据集)

批量查询时，返回的数据集是由key索引的关联数组，索引对应的值为key对应的值。

当上面构造出的两个key都存在时，返回的数据集如下

```
[
    'school:1:class:1:members' => ,
    'school:1:class:2:members' => ,
]

```

如果某个key不存在，数据集的索引将没有该key

数据集中元素的值的类型，根据不同的redis数据类型，可以是

- string: 字符串
- hash: 关联数组
- list: 数组
- set: 数组
- zset: 数组

命令手册
----

[](#命令手册)

### create

[](#create)

当一个model的key表征只有一个域时，可以使用该方法

ttl参数可选。

key表征如下的Hash类型的Model

```
user:{id}:info

```

```
$model->create(1, [
    'name' => 'maria',
    'age' => 22,
], 10);   // key "user:1:info" 将在10s后过期

```

key表征如下的Zset类型的Model

```
shop:{id}:customers

```

```
// key -> 成员, value -> 分值
$model->create(1, [
    'maria' => 1,
    'martin' => 2,
]);   // "shop:1:customers"将不会过期

```

### createNotExists

[](#createnotexists)

类似setnx，支持多种数据类型

### createExists

[](#createexists)

类似setxx，支持多种数据类型

### insert

[](#insert)

可选参数用于检查key是否存在，使insert的行为类似setnx或setxx.

key表征如下的Zset类型的Model

```
user:{id}:code

```

```
$model->insert([
    'id' => 1,
], 10010, 20);

```

### insertNotExists

[](#insertnotexists)

类似createNotExists

### insertExists

[](#insertexists)

类似createExists

### find

[](#find)

使用条件同create

```
$model->find(1);

```

### findBatch

[](#findbatch)

类型于find，返回的数据集由"id"索引

```
$model->findBatch([1,2,3]);
// [
//     1 => ,
//     2 => ,
//     3 => ,
// ]

```

### updateBatch

[](#updatebatch)

类似于findBatch.

不存在的key将被创建。

如果不传入ttl参数，key的ttl将不被改变。

```
$model->updateBatch([1,2,3], $value);

```

### all

[](#all)

key表征如下的model

```
user:{id}:code

```

```
$model->all();      // 返回匹配模式user:*:code（keys user:*:code）的所有key的值

```

### where

[](#where)

绑定一个key域

```
$model->where('id', 1)->where('name', 'maria');

```

### whereIn

[](#wherein)

类似于where，为一个key域绑定多个值

```
$model->whereIn('id', [1,2,3]);

```

### first

[](#first)

获取构造出的key中第一个存在的key，如果所有构造的key都不存在，返回null

```
$model->whereIn('id', [1,2,3])->first();    // return string|array|null

```

### update

[](#update)

如果key不存在，将被创建

如果不传入ttl参数，key的ttl将不被改变。

```
$model->where('id',1)->update($value);

```

### delete

[](#delete)

删除构造的key

```
$model->where('id',1)->delete();

```

### orderBy, sort

[](#orderby-sort)

用户对返回的数据集进行排序。 key表征如下的string类型的Model

```
user:{id}:code

```

```
$model->insert([
    'id' => 1,
], 10010);
$model->insert([
    'id' => 2,
], 10011);

$model->whereIn('id', [1,2])->orderBy('id')->get();
// returned data set
// [
//     'user:1:code' => 10010,
//     'user:2:code' => 10011,
// ]

```

```
$model->newQuery()->whereIn('id', [1,2])->orderBy('id', 'desc')->get();
// returned data set
// [
//     'user:2:code' => 10011,
//     'user:1:code' => 10010,
// ]

```

```
$model->newQuery()->whereIn('id', [1,2])->sort();
// returned data set
// [
//     'user:1:code' => 10010,
//     'user:2:code' => 10011,
// ]

```

### count

[](#count)

返回存在的key的数量。

```
$model->where('id', 1)->count();    // 返回整数

```

### max

[](#max)

返回数据集中的最大值

```
$model->where('id', 1)->max();

```

### min

[](#min)

返回数据集中的最小值

```
$model->where('id', 1)->min();

```

### sum

[](#sum)

返回查询到的数据集的和

```
$model->where('id', 1)->sum();

```

Predis的原生方法
-----------

[](#predis的原生方法)

当一个查询只构造出一个完整的key时，可以使用Predis的原生方法，例如

```
// string model
$model->where('id', 1)->set('maria');

// hash model
$model->where('id', 1)->update([
    'name' => 'Maria',
    'age' => '22',
]);
// 等同于
$model->where('id', 1)->hmset([
    'name' => 'Maria',
    'age' => '22',
]);

```

查询构造器
-----

[](#查询构造器)

负责为model构造待查询的key

key表征

```
user:{id}:{name}

```

```
$queryBuilder->whereIn('id', [1,2])->whereIn('name', ['maria', 'cat']);
// 构造出的key
// user:1:maria
// user:1:cat
// user:2:maria
// user:2:cat

$queryBuilder->refresh()->whereIn('id', [1,2]);
// 构造出的key
// user:1:{name}
// user:2:{name}
```

开发
--

[](#开发)

###  Health Score

18

—

LowBetter than 8% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity35

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/1d3d3167bf065726343c46204b3de018bfb6084e80e6eda6312e3a53aa085eee?d=identicon)[liuguoqing](/maintainers/liuguoqing)

---

Top Contributors

[![guoqing1988](https://avatars.githubusercontent.com/u/6872140?v=4)](https://github.com/guoqing1988 "guoqing1988 (4 commits)")

### Embed Badge

![Health badge](/badges/wuhen-redislib/health.svg)

```
[![Health](https://phpackages.com/badges/wuhen-redislib/health.svg)](https://phpackages.com/packages/wuhen-redislib)
```

###  Alternatives

[doctrine/orm

Object-Relational-Mapper for PHP

10.2k285.3M6.2k](/packages/doctrine-orm)[jdorn/sql-formatter

a PHP SQL highlighting library

3.9k115.1M102](/packages/jdorn-sql-formatter)[illuminate/database

The Illuminate Database package.

2.8k52.4M9.4k](/packages/illuminate-database)[mongodb/mongodb

MongoDB driver library

1.6k64.0M546](/packages/mongodb-mongodb)[ramsey/uuid-doctrine

Use ramsey/uuid as a Doctrine field type.

90340.3M211](/packages/ramsey-uuid-doctrine)[reliese/laravel

Reliese Components for Laravel Framework code generation.

1.7k3.4M16](/packages/reliese-laravel)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
