九、redis使用场景

1、分页排序场景

https://weibo.com/2656274875/I7VUM4ob9
String
Hash
List
Set
Zset(SortedSet)
Redis是一个高效的基于内存的key-value数据库,在Redis中通常根据数据的key查询其value值,Redis没有条件查询;
案例:热门事件、热门微博、热门直播、热门主播等,下面会有很多评论,大家会不断地刷新和提交评论;
如何设计?
数据库方案:一个热门微博主题表,一个评论表(评论表有一个主题表的id),对应互动性的应用,性能较差,不能很好满足需要;
Redis方案:
分析:
String类型可以用来存储任何类型的数据;
List主要用于存储一个字符串列表,按照数据加入的顺序排序,列表类型内部使用双向链表实现,所以向列表两端添加元素的时间复杂度为O(1), 获取越接近两端的元素速度就越快。这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是很快的,但是如果尝试访问一个非常大的列表的中间元素,则速度会很慢,因为这是一个时间复杂度o(n)操作。
如果我们删除中间的一个评论,会比较慢,那么性能上不是很好;

Set类型是一个无顺序的字符串集合,集合中每个元素都是不同的,也就是不允许有重复数据,多次添加同一个元素,集合中只会有一个该元素,我们要排序,那肯定不适合;

zset: 和Set类型相似,但是zset是一个有序集合,可以排序,那么可以考虑一下;
Hash: key : value( field:value)
zset
key
value

热门微博ID
分数:评论时间戳
值:评论的ID
分数:评论时间戳
值:评论的ID
分数:评论时间戳
值:评论的ID

hash
key
value

评论的ID
{id:1, nick:zhangsan,content:祖国70华诞快乐!,…}

评论的ID
{id:2, nick:cat,content:祝祖国永远繁荣昌盛,…}


2、排行榜场景

热销商品排行榜
使用zset
ZINCRBY saleTop 1000 phone (可以搞成商品id)
ZINCRBY saleTop 120 pc
ZINCRBY saleTop 50 tv
ZINCRBY saleTop 8 carZREVRANGEBYSCORE saleTop +inf -inf (+inf -inf # 逆序排列所有成员)
ZREVRANGE saleTop 0 -1
ZRANGE saleTop 0 -1

3、时间线场景

主播动态、最近新帖、好友动态、时间轴、时光轴等,这类信息是按照固定的时间顺序排列,可以使用列表(list)或者有序列表zset来存储;
LPUSH user:1021_active ‘{datetime:578555454,title:涨薪了,content:加油}’
LPUSH user:1021_active ‘{datetime:57885555,title:欢度国庆,content:放假了}’
LRANGE user:1021_active 0 10

4、计数类场景

比如计数器,用户未读消息个数、关注数、粉丝数、经验值等等,这类消息适合以Redis中的散列(hash)结构进行存储。
HSET user:1021 follower 50
HINCRBY user:1021 follower 1 --增加一个粉丝
HGETALL user:1021

用string类型存储计数类的也可以
//id是1021的用户的粉丝数
Key -->user:follower:1021
Value -> 用string类型存储也可以
#现在要增加一个粉丝,那么执行:
incr user:follower:1021
分布式唯一ID
开发中常见的生成全局唯一标识的需求,支付、订单、红包、优惠券、跟踪号等等;
通过Redis原子操作命令INCR和INCRBY(redis自增)实现递增,同时可使用Redis集群提高吞吐量,集群后每台Redis的初始值为1,2,3,4,5,步长为5;
A:1,6,11,16,21
B:2,7,12,17,22
C:3,8,13,18,23
D:4,9,14,19,24
E:5,10,15,20,25
比如:时间戳 + redis自增 (可以保证唯一)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值