【zcount:统计有序集合分数区间内的成员数量】
 zadd user_login 1 one
 zadd user_login 3 two
 zadd user_login 4 three
 zadd user_login 5 four
ZCOUNT 返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。
 zcount user_login 1 4 => 3 (1<=score<=4)
 zcount user_login 1 (4 => 2 (1<=score<4)
 zcount user_login (1 (4 => 1 (1<score<4)
如果单纯统计整个有序集合的成员个数,使用ZCARD
 zcard user_login //4
【zunionstore :合并若干个有序集合为新的有序集合】
 ZUNIONSTORE 用于合并有序集合,例如把单个月内每天的有序集合key合并为一个总的key,再对这个月的key进行统计。
 #将user_login和user_login_2两个集合合并为新的有序集合all_login。user_login和user_login_2的score分别乘以1和2,最后两个数组相同成员的分数相加(sum)。如果aggregate=max,则取两个数组中分数最大的成员。
zunionstore all_login 2 user_login user_login_2 weights 1 2 aggregate sum
#如果不加weights和aggregate参数,weights默认是传1,aggregate默认是传sum。
zunionstore all_login 2 user_login user_login_2
#单独指定aggregate=max
zunionstore all_login_max 2 user_login user_login_2 aggregate max
#查看合并后的有序集合
zrange all_login 0 -1 withscores
实战

 
zunionstore 可以不带weights和aggregate,weights默认是传1,aggregate默认是传sum。

或者不指定weights,指定aggregate=max.

 【有序集合设置排行榜】
 新增成员
 zadd kyl_rank 30 xsd
 删除成员
 zrem kyl_rank cwx
 为某个成员增加分数
 zincrby kyl_rank 55 xsd
获取所有数据,从小到大排序
 zrange kyl_rank 0 -1 withscores
 获取所有数据,从大到小排序
 zrevrange kyl_rank 0 -1 withscores
 获取分数前三名
 zrevrange kyl_rank 0 2 withscores
获取某个成员的分数
 zscore kyl_rank swl
 获取某个成员的排名
 zrevrank kyl_rank cwx (第一名为0)
 zrank正序 zrevrank倒序
实战

 获取排名前三的成员
 
PHP统计日活和周活的代码实战
 /**
     * 统计日活、周活
     * 每天都会生成一个记录登录用户id的有序集合(UserLogin_20221230),有序集合的存储格式:[用户id => 设备类型(1安卓、2苹果)]
     */
    public function getActiveUserTest()
    {
        $redis = get_redis('redis_conf');//正式环境
        $key = 'UserLogin_'.date('Ymd');
        //获取当日的日活用户
        $actUserCount = $redis->zCard($key);
        //获取当日的日活设备
        $actADCount = $redis->zCount($key,'1','(2');//统计score在[1,2)区间(即score=1)的成员数量。这里是统计使用安卓设备的用户数量。
        $actIOSCount = $redis->zCount($key,'2','(3');//统计score在[2,3)区间 (即score=2)的成员数量。这里是统计使用苹果设备的用户数量。
      
        //获取当周的日期列表
        $week = date('N');//代表今天是星期几 1~7 => 周一~周日
        //$sunday = date('Ymd' ,strtotime( '-' . ($week-1) .' days', time()));//获取本周周一的日期
        $weekDayList = array();
        for ($i =1;$i<=7;$i++) {
            //获取本周的所有日期
            $weekDayList[] = date('Ymd' ,strtotime( '-' . ($week-$i) .' days', time()));
        }
        //合并当周的所有天数的有序集合
        $union_key = 'union_key_test';
        $redis->zUnionStore($union_key,$weekDayList,null,'MAX');
        //统计周活
        $actUserCount_week = $redis->zCard($union_key);
        $actADCount_week = $redis->zCount($union_key,'1','(2');
        $actIOSCount_week = $redis->zCount($key,'2','(3');
        $redis->del($union_key);//删除掉这个临时合并的有序集合
    }

















![[Verilog]Verilog经典电路设计(一)](https://img-blog.csdnimg.cn/fe4f7ebcefc947ae8ac1f1efb5578c61.png)

