zoukankan      html  css  js  c++  java
  • redis link 链表结构

    lpush key value 

    作用: 把值插入到链接头部

    rpop key

    作用: 返回并删除链表尾元素

    lrange key start  stop
    

    作用: 返回链表中[start ,stop]中的元素

    规律: 左数从0开始,右数从-1开始

    lrem key count value

    作用: 从key链表中删除 value值

    注: 删除count的绝对值个value后结束

    Count>0 从表头删除

    Count<0 从表尾删除

    ltrim key start stop 

    作用: 剪切key对应的链接,[start,stop]一段,并把该段重新赋给key

    lindex key index

    作用: 返回index索引上的值,

      lindex key 2

     

    llen key

    作用:计算链接表的元素个数

    redis 127.0.0.1:6379> llen task

    (integer) 3

    redis 127.0.0.1:6379>

     

    linsert  key after|before search value 

    作用: key链表中寻找’search’,并在search值之前|之后,.插入value

    : 一旦找到一个search,命令就结束了,因此不会插入多个value  

     

    rpoplpush source dest
    作用: 把source的尾部拿出,放在dest的头部,
    并返回 该单元值
    
    场景: task + bak 双链表完成安全队列
    Task列表                             bak列表
            
     1   1   1                         1   1   1      
    
    
    业务逻辑:
    1:Rpoplpush task bak
    2:接收返回值,并做业务处理
    3:如果成功,rpop bak 清除任务. 如不成功,下次从bak表里取任务

     

    brpop ,blpop  key timeout

    作用:等待弹出key的尾/头元素,

    Timeout为等待超时时间

    如果timeout0,则一直等待

     场景: 长轮询Ajax,在线聊天时,能够用到

     

    Setbit 的实际应用
    
    场景: 1亿个用户, 每个用户 登陆/做任意操作  ,记为 今天活跃,否则记为不活跃
    
    每周评出: 有奖活跃用户: 连续7天活动
    每月评,等等...
    
    思路: 
    
    Userid   dt  active
    1        2013-07-27  1
    1       2013-0726   1
    
    如果是放在表中, 1:表急剧增大,2:要用group ,sum运算,计算较慢
    
    
    用: 位图法 bit-map
    Log0721:  ‘011001...............0’
    
    ......
    log0726 :   ‘011001...............0’
    Log0727 :  ‘0110000.............11: 记录用户登陆:
    每天按日期生成一个位图, 用户登陆后,把user_id位上的bit值置为1
    
    2: 把1周的位图  and 计算, 
    位上为1的,即是连续登陆的用户
    
    
    redis 127.0.0.1:6379> setbit mon 100000000 0
    (integer) 0
    redis 127.0.0.1:6379> setbit mon 3 1
    (integer) 0
    redis 127.0.0.1:6379> setbit mon 5 1
    (integer) 0
    redis 127.0.0.1:6379> setbit mon 7 1
    (integer) 0
    redis 127.0.0.1:6379> setbit thur 100000000 0
    (integer) 0
    redis 127.0.0.1:6379> setbit thur 3 1
    (integer) 0
    redis 127.0.0.1:6379> setbit thur 5 1
    (integer) 0
    redis 127.0.0.1:6379> setbit thur 8 1
    (integer) 0
    redis 127.0.0.1:6379> setbit wen 100000000 0
    (integer) 0
    redis 127.0.0.1:6379> setbit wen 3 1
    (integer) 0
    redis 127.0.0.1:6379> setbit wen 4 1
    (integer) 0
    redis 127.0.0.1:6379> setbit wen 6 1
    (integer) 0
    redis 127.0.0.1:6379> bitop and  res mon feb wen
    (integer) 12500001
    
    
    如上例,优点:
    1: 节约空间, 1亿人每天的登陆情况,用1亿bit,约1200WByte,约10M 的字符就能表示
    2: 计算方便

     

      

    ltrim key start stop

  • 相关阅读:
    二分法查找算法
    [Java]事件驱动程序设计
    spring 事件驱动模型简介
    事件驱动模型实例详解(Java篇)
    协程
    事件驱动模型的简单Java实现
    负载均衡技术(一)———负载均衡技术介绍
    知物由学 | 未来50年网络安全行业发展愿景
    知物由学 | 如何从勒索软件的攻击中全身而退
    “网易大数据讲堂第一期:数说”直播活动资料:课程回放收看及PPT下载
  • 原文地址:https://www.cnblogs.com/vijayfly/p/5499057.html
Copyright © 2011-2022 走看看