for 知乎链接图标抓取
Redis的应用场景
2022-12-29 1660 作者:
字号:【小】【中】【大】
分享到:

先介绍一下Redis

简介:REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的 key-value存储系统,是跨平台的非关系型数据库。

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的API。

Redis通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

优势

1:速度快,因为数据存在于内存中,类似hashmap的优势就是查找和操作的时间复杂度都是o(1)

2:支持丰富的数据类型,string、list、hash、set、zset

3:支持事务,操作都是原子性的。

4:丰富的特性:可用于缓存、消息,按key设置过期时间,过期自动删除

应用场景

1、缓存

可以使用String类型

例如:热点数据缓存(例如报表、热销商品),对象缓存、全页缓存、可以提升热点数据的访问数据。

image1.png

2、数据共享分布式

String 类型,因为 Redis 是分布式的独立服务,可以在多个应用之间共享

例如:分布式Session需要引入此依赖

image2.png

3、分布式锁

String 类型setnx方法,只有不存在时才能添加成功,返回true

image3.png

将key 的值设为value ,当且仅当key不存在。

若给定的 key已经存在,则SETNX不做任何动作。

4、全局ID

int类型,incrby,利用原子性

image4.png

如果是分库分表的场景,一次性拿一段。

5、计数器

int类型,incr方法

例如:文章的阅读量、微博点赞数、允许一定的延迟,先写入Redis再定时同步到数据库

image5.png

6、限流

基于redis的数据结构zset

zset是set的一个升级版本,他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以对指定键的值进行排序权重的设定,它应用排名模块比较多。

我们可以将请求打造成一个zset数组,当每一次请求进来的时候,value保持唯一,可以用UUID生成,而score可以用当前时间戳表示,因为score我们可以用来计算当前时间戳之内有多少的请求数量。而zset数据结构也提供了range方法让我们可以很轻易的获取到2个时间戳内有多少请求。

image6.png

7、位统计

String类型的bitcount(1.6.6的bitmap数据结构介绍)

image7.png

字符是以8位二进制存储的

例如:在线用户统计,留存用户统计,支持按位与、按位或等等操作,计算出7天都在线的用户。

8、购物车

传统的购物车实现有很多种方式,如session,cookie,数据库等,如果用Redis相当于一个内存数据库,可以用来做缓存,存储数据等。

类型用String 或hash。所有String可以做的hash都可以做。

image8.png

9、用户消息时间线

list,双向链表,直接作为timeline就好了。插入有序。

10、消息队列

List提供了两个阻塞的弹出操作:blpop/brpop,可以设置超时时间。

blpop:blpop key1 timeout 移除并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

brpop:brpop key1 timeout 移除并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

上面的操作。其实就是java的阻塞队列。学习的东西越多。学习成本越低。

队列:先进先除:rpush blpop,左头右尾,右边进入队列,左边出队列。

栈:先进后出:rpush brpop。

11、抽奖

移除并返回集合中的一个随机元素。

image9.png

返回集合中一个或多个随机数。

image10.png

将所有的奖品通过SADD添加到SET集合中,然后通过随机命令获取对应的奖品即可。而且,抽奖一般是有时效性,正好可以配合redis的key的失效时间使用。使得抽奖功能很完美的解决。

12、点赞、签到、打卡

假如上面的微博ID是t1001,用户ID是u3001

用 like:t1001 来维护 t1001 这条微博的所有点赞用户

点赞了这条微博:sadd like:t1001 u3001

取消点赞:srem like:t1001 u3001

是否点赞:sismember like:t1001 u3001

点赞的所有用户:smembers like:t1001

点赞数:scard like:t1001

相对于数据库简单很多

13、商品标签

使用tags:来给对象打标签,然后可以直接查找出来。

image11.png

14、商品筛选

一个集合进行查找

image12.png

多个集合进行运算是按照顺序,一路算下去的结果

SDIFF计算差集   

SINTER 计算并集

SUNION 计算交集

15、用户关注、推荐模型

实际上就是redis的交集,并集差集的使用交错

举例:

image13.png

16、排行榜

实现这个功能主要用到的 redis 数据类型是 redis 的有序集合 zset。zset 是 set 类型的一个扩展,比原有的类型多了一个顺序属性。此属性在每次插入数据时会自动调整顺序值,保证 value 值按照一定顺序连续排列。

image14.png

查看用户 e 的实际排名 (ZREVRANK 为降序,ZRANK 为升序)、实时分数。


最新标签
最新更新
我要试用
验证码
奖励领取
验证码
关注或联系我们

微信公众号

业务咨询:400-9969-069(24小时服务) 028-86052918
售后热线:028-86052836
公司地址:成都市武侯区天益街38号理想中心3栋1810

在线客服
Copyright© 2022天健世纪. All Rights Reserved. 蜀ICP备16016808号
for 知乎链接图标抓取
×
快速定制通道
获取验证码
快速咨询