REDIS实践之使用sort set完成商品筛选排序

来源:互联网 发布:电视盒子免费视频软件 编辑:程序博客网 时间:2024/05/21 14:43

我们知道 redis中 有个用来排序的函数 sort,我们先看看手册对它的描述

描述:按条件取得数据
参数:
array(
'by' => 'pattern', //匹配模式
'limit' => array(0, 1),
'get' => 'pattern'
'sort' => 'asc' or 'desc',
'alpha' => TRUE,
'store' => 'external-key'
)

返回或保存给定列表集合有序集合key中经过排序的元素。


其中可以 使用外部key进行排序 这个外部key可以在 列表、集合、有序集合下。


没错,就是利用这个特性, 我们来实现今天所说的业务。


以前做电商web时候 有个筛选商品的业务逻辑,涉及到 七天包退换,货到付款,可分期这样的标记或者标签(Tag),而且还有按照销量进行排序,这理所当然的就想到了 redis中的 set   和 sort,下面就模拟下一个简单的实现逻辑:

首先我们使用伪造数据:

//note  商品销售量  和  商品信息for ($i=1; $i < 200; $i++) {    $redis->set("001|goods_sellhot:good_id_{$i}", mt_rand(0, 1000));    $arr = range('a', 'z');    shuffle($arr);    $redis->set("001|goods_info:good_id_{$i}", json_encode(['name'=>join("", array_slice( $arr, 0, 4 )), 'image'=>'https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png']) );}//note  对应的商品id扔进对应的tag set里for ($i=1; $i < 100; $i++) {    $redis->sadd("001|goods_tag:7dayback", mt_rand(1, 200));    $redis->sadd("001|goods_tag:pay_on_delivery", mt_rand(1, 200));}

在组合筛选时候 利用集合 的inter 来实现,然后用sort排序

$redis->sInterStore("001|goods_tag:7dayback_And_pay_on_delivery", "001|goods_tag:7dayback", "001|goods_tag:pay_on_delivery");$sort = array(                'BY'    =>  "001|goods_sellhot:good_id_*",                'SORT'  =>  'DESC',                'limit' =>  array(0, 10),                'get'   =>  [   "#",                            //id值                                "001|goods_sellhot:good_id_*",  //销量                                "001|goods_info:good_id_*" ]    //商品信息    );$result = $redis->sort("001|goods_tag:7dayback_And_pay_on_delivery", $sort);print_r($result);


就这样  一个快速,高效的tag筛选功能就实现了

0 0
原创粉丝点击