postor / yii2-redis-filter
此包已被废弃,不再维护。没有建议的替代包。
使用排序集进行排序、分页、分类项目
1.1.1
2020-01-03 12:30 UTC
Requires
This package is not auto-updated.
Last update: 2023-04-22 17:28:28 UTC
README
使用Redis的有序集合进行排序、分页、分类项目
快速查看:https://www.youtube.com/watch?v=zLYAlfSTUQE&list=PLM1v95K5B1ntVsYvNJIxgRPppngrO_X4s
安装
php composer.phar require --prefer-dist postor/yii2-redis-filter
配置
'components' => [
....,
'redis' => [
'class' => 'yii\redis\Connection',
'hostname' => REDIS_HOST,
'port' => REDIS_PORT,
'database' => REDIS_DB,
],
'redisfilter'=>[
'class'=>'postor\redisfilter\RedisFilter',
'redis'=>'redis',
],
....
使用
\Yii::$app->redisfilter->getTagList($tag,$offset,$limit); $tag 参数:
- 字符串,就是对应的tag集合
- 数组,深度遍历每个数组并将键和值存储,然后合并所有元素的结果。数组情况下,键和值取交集,然后所有数组元素取并集,可以嵌套
['a','b'=>['c'=>['d','e'=>['f']]]] 表示 a|(b&c&(d|(e&f)))
//set tags 设置标签
$rf = \Yii::$app->redisfilter;
$rf->setTag($a->id, 'base', $a->created_time); //all article sort by created_time 所有文章按时间排序
$rf->setTag($a->id, 'samsung'); //all article tag into tag sets 所有文章按标签类型贴收入对应集合
$rf->removeTag($b->id, 'base');
//filter tags 筛选标签
//by page 按分页
$ids = $rf->getTagList(['seta','setb'=>'setc'],$offset,$pageSize); // seta|(setb&setc)
//$ids array(11) { [0]=> string(7) "1385584" [1]=> string(7) "1385585" [2]=> string(7) "1385586" [3]=> string(7) "1385587" [4]=> string(7) "1385588" [5]=> string(7) "1385589" [6]=> string(7) "1515910" [7]=> string(7) "1515911" [8]=> string(7) "1515912" [9]=> string(7) "1515913" [10]=> string(7) "1515914" }
//by score 按分数
$zsetname = $rf->getZset(['base'=>'samsung']); // base&samsung
$total = $rf->getTagTotalByZset($zsetname);
$ids = $rf->getTagListByScore($zsetname, time()-86400*3, time());
示例
cd example
# config your own redis
vi config/web.php
./yii serve
打开 localhost:8080 并尝试
有关详细信息,请参阅代码: example/models/NumberFilter.php