码迷,mamicode.com
首页 > 其他好文 > 详细

redis link 链表结构

时间:2016-05-16 20:00:22      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

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

redis link 链表结构

标签:

原文地址:http://www.cnblogs.com/vijayfly/p/5499057.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!