Redis数据结构应用场景及原理分析

目录

一、Redis介绍

二、应用场景 

2.1 String应用场景 

2.2 Hash应用场景  

2.3 List应用场景

2.4 Set应用场景 

2.5 Zset应用场景 


一、Redis介绍

Redis数据结构应用场景及原理分析_第1张图片

  • 单线程
  • 多路复用
  • 底层数据结构:全局哈希表(key-value)

Redis数据结构应用场景及原理分析_第2张图片

二、应用场景 

2.1 String应用场景 

  • 单值缓存

set key value

get key 

  • 对象缓存

set user:1 userJson(Json格式数据)

  • 分布式锁

set product:1 true ex 10 nx  

  • 计数器

Redis数据结构应用场景及原理分析_第3张图片

incr article:readCount:1

get article:readCount:1

  • 分布式系统全局序列号

incrby orderId 100   // redis批量生成序列号提升性能

2.2 Hash应用场景  

  • 对象存储 

Redis数据结构应用场景及原理分析_第4张图片

hmset user 1:name zhangsan 1:blance 10000

hmset user 1:name zhangsan 1:blance 9000

hmget user 1:name 1:blance 

  • 购物车

Redis数据结构应用场景及原理分析_第5张图片

以用户ID为key,商品ID为filed,商品数量为value

添加购物车->hset cart:1 1001 1

增加数量->hincrby cart:1 1001 1

商品总数->hlen cart:1 1001

删除商品->hdel cart:1 1001

购物车列表->hgetall cart:1

2.3 List应用场景

  • 常用分布式数据结构

Redis数据结构应用场景及原理分析_第6张图片

stack(栈)= lpush+lpop

queue(对列)= lpush+rpop

blocking mq(阻塞队列)= lpush+brpop 

  • 消息流

Redis数据结构应用场景及原理分析_第7张图片

张三关注了李四、王五等大V

李四发微博,消息(ID:1001):lpush msg:zhangsan 1001 

王五发微博,消息(ID:1002):lpush msg:zhangsan 1002

张三查看最新微博消息:lrange msg:zhangsan 0 4

如果李四、王五粉丝数量千万级别,如何处理?

2.4 Set应用场景 

  • 微信小程序抽奖 

Redis数据结构应用场景及原理分析_第8张图片

点击参与抽奖加入集合:sadd 1001(活动ID)1(用户ID)

查看参与抽奖者:smembers 1001

抽取中奖者:

随机抽取2名(不删除集合中元素):srandmember 1001 2

随机抽取2名(删除集合中元素):spop 1001 2

  • 微信微博点赞、收藏、标签

 Redis数据结构应用场景及原理分析_第9张图片

点赞:sadd like:1001(消息ID) 1(用户ID)

取消点赞:srem like:1001 1

获取点赞用户列表:smembers like:1001

检查用户是否点赞:sismember like:1001 1

获取点赞用户数:scard like:1001 

  • 集合操作 

Redis数据结构应用场景及原理分析_第10张图片

交集:sinter set1 set2 set3 -> {c}

并集:sunion set1 set2 set3 -> {a,b,c,d,e}

差集:sdiff set1 set2 set3 -> {a} 

  • 集合操作实现微博微信关注模型 

Redis数据结构应用场景及原理分析_第11张图片

Redis数据结构应用场景及原理分析_第12张图片

Redis数据结构应用场景及原理分析_第13张图片

zhangsan关注的人:zhangsanSet->{lisi,wangwu} 

lisi关注的人:lisiSet->{zhangsan,wangwu,zhaoliu,liuqi} 

wangwu关注的人:wangwuSet->{zhangsan,lisi,zhaoliu}

zhangsan和lisi共同关注的人(zhangsan和lisi的交集):sinter zhangsanSet:lisiSet->{wangwu}

zhangsan关注的人也关注了lisi:sismember zhangsanSet lisiSet

zhangsan可能认识的人(zhangsan和lisi的差集):sdiff zhangsanSet liset->{zhaoliu,liuqi}

2.5 Zset应用场景 

  • 排行榜 

Redis数据结构应用场景及原理分析_第14张图片

获取新闻:zincrby hotNews:20230801 1 总理记着会

获取当日排行榜前十:zrevrange hotNews:20230801 0 9 WITHSCORES

七日搜索榜单计算:zunionstore hotNews:20230801-20230807 7

展示七日排行前十:zrevrang hotNews:20230801-20230807 0 9 WITHSCORES

你可能感兴趣的:(redis,数据库,缓存)