前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >redis妙用-list类型

redis妙用-list类型

原创
作者头像
并发笔记
修改2020-10-22 10:13:14
1.3K0
修改2020-10-22 10:13:14
举报
文章被收录于专栏:并发笔记并发笔记

    list类型存储结构如下,它区分正数索引、负数索引。索引可以帮我定位到具体几个元素,类似java中List的下标。

redis list结构
redis list结构
api

命令

说明

LPUSH key value value ...

往key的列表中的左边放入一个元素,key不存在则新建

RPUSH key value value ...

往key的列表中的右边放入一个元素,key不存在则新建

LPOP key

从key的列表中的左边弹出一个元素

RPOP key

从key的列表中的右边弹出一个元素

LRANGE key start stop

获取列表下标为start到stop中的元素

BLPOP keykey... timeout

阻塞的从key的列表中的左边弹出一个元素,timeout=0,一直阻塞

BRPOP keykey... timeout

阻塞的从key的列表中的右边弹出一个元素,timeout=0,一直阻塞

代码语言:txt
复制
127.0.0.1:6379> LPUSH user ally far jayden
(integer) 3
127.0.0.1:6379> LPOP user
"jayden"
127.0.0.1:6379> LRANGE user 0 -1
1) "far"
2) "ally"

    lrange user 0 -1当你的key经过多次修改之后,你不知道有多少个值时,想拿到所有的值,使用该语句。0代表正数索引的开始,-1代表负数索引的结束。

应用场景
实现消息队列

    由于list的BLPOP命令的特性,我们是不是可以实现一个简单消息队列,其实在github,你可以找到类似的基于redis的消息队列框架,实现思路图如下。

list实现消息队列
list实现消息队列

    生产者在队列的左边push消息进去,而消费者使用BRPOP阻塞的监听队列,有消息到达时,消费者就会马上收到。

新浪/twitter用户消息列表

    far关注了ally,jayden...当他们发推文的时候,far在首页需要倒叙的显示出来。

    先回想一下,如果是关系型数据,你怎么实现。

    你将你所有的关注的人的微博使用关联查询关联起来,然后倒序?或者维护一张消息关系表,发微博时将哪些关注你的人都维护在这张消息关系表中?那么像eason这样的热点用户,关注的人可能有几千万,那么你怎么去维护消息的关系。

    看看使用redis怎么处理

  1. ally发微博,消息id为10086LPUSH msgline::{farId} 10086LPUSH msgline::{farId} 10087# 第一页,每页10条 LRANGE msgline::{farId} 0 1*10
  2. jayden发微博,消息id为10087
  3. far登陆时,查看消息

    那么用redis存储这么多数据,合适吗?传言,新浪微博组建了160T的redis集群来干这么一件事情。但是可以断定先期新浪微博就是这样实现的。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • api
  • 应用场景
    • 实现消息队列
      • 新浪/twitter用户消息列表
      相关产品与服务
      云数据库 Redis
      腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档