Redis常见使用场景

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis常见使用场景

一、前言

redis是很常用的缓存技术了,但是它的能力远远不止缓存这么简单,以下总结了16种应用场景:缓存、数据共享分布式、分布式锁、全局 ID、计数器、限流、位统计、购物车、用户消息时间线 timeline、消息队列、抽奖、点赞、签到、打卡、商品标签、商品筛选、用户关注、推荐模型、排行榜。

二、详解

1、缓存

String类型

例如:热点数据缓存(例如报表、明星出轨),对象缓存、全页缓存、可以提升热点数据的访问数据。

2、数据共享分布式

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

例如:分布式Session

<dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId></dependency>

3、分布式锁

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

publicstaticbooleangetLock(Stringkey) {
Longflag=jedis.setnx(key, "1");
if (flag==1) {
jedis.expire(key, 10);
    }
returnflag==1;
}
publicstaticvoidreleaseLock(Stringkey) {
jedis.del(key);
}

4、全局ID

int类型,incrby,利用原子性


incrby userid 1000


分库分表的场景,一次性拿一段


5、计数器

int类型,incr方法


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


6、限流

int类型,incr方法


以访问者的ip和其他信息作为key,访问一次增加一次计数,超过次数则返回false


7、位统计

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


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

setk1asetbitk161setbitk170getk1/* 6 7 代表的a的二进制位的修改a 对应的ASCII码是97,转换为二进制数据是01100001b 对应的ASCII码是98,转换为二进制数据是01100010因为bit非常节省空间(1 MB=8388608 bit),可以用来做大数据量的统计。*/

例如:在线用户统计,留存用户统计

setbitonlineusers01setbitonlineusers11setbitonlineusers20

支持按位与、按位或等等操作

BITOPANDdestkeykey[key...] ,对一个或多个key求逻辑并,并将结果保存到destkeyBITOPORdestkeykey[key...] ,对一个或多个key求逻辑或,并将结果保存到destkeyBITOPXORdestkeykey[key...] ,对一个或多个key求逻辑异或,并将结果保存到destkeyBITOPNOTdestkeykey,对给定key求逻辑非,并将结果保存到destkey

计算出7天都在线的用户

BITOP"AND""7_days_both_online_users""day_1_online_users""day_2_online_users" ..."day_7_online_users"

8、购物车

String 或hash。所有String可以做的hash都可以做

image.png

  • key:用户id;field:商品id;value:商品数量。
  • +1:hincr。-1:hdecr。删除:hdel。全选:hgetall。商品数:hlen。

9、用户消息时间线timeline

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


10、消息队列

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


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


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


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


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


栈:先进后出:rpush brpop


11、抽奖

自带一个随机获得值

spopmyset

12、点赞、签到、打卡

image.png

假如上面的微博ID是t1001,用户ID是u3001like:t1001来维护t1001这条微博的所有点赞用户点赞了这条微博:saddlike:t1001u3001取消点赞:sremlike:t1001u3001是否点赞:sismemberlike:t1001u3001点赞的所有用户:smemberslike:t1001点赞数:scardlike:t1001是不是比数据库简单多了。


13、商品标签

image.png

老规矩,用 tags:i5001 来维护商品所有的标签。

  • sadd tags:i5001 画面清晰细腻
  • sadd tags:i5001 真彩清晰显示屏
  • sadd tags:i5001 流程至极


14、商品筛选

// 获取差集sdiff set1 set2// 获取交集(intersection )sinter set1 set2// 获取并集sunion set1 set2


image.png

假如:iPhone11 上市了

saddbrand:appleiPhone11saddbrand:iosiPhone11sadscreensize:6.0-6.24iPhone11sadscreentype:lcdiPhone11


赛选商品,苹果的、ios的、屏幕在6.0-6.24之间的,屏幕材质是LCD屏幕


sinterbrand:applebrand:iosscreensize:6.0-6.24screentype:lcd

15、用户关注、推荐模型

follow 关注 fans 粉丝


相互关注:


sadd 1:follow 2


sadd 2:fans 1


sadd 1:fans 2


sadd 2:follow 1


我关注的人也关注了他(取交集):


sinter 1:follow 2:fans


可能认识的人:


用户1可能认识的人(差集):sdiff 2:follow 1:follow


用户2可能认识的人:sdiff 1:follow 2:follow


16、排行榜

id 为6001 的新闻点击数加1:

zincrbyhotNews:201909261n6001


获取今天点击最多的15条:

zrevrangehotNews:20190926015withscores
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
NoSQL Redis 数据安全/隐私保护
redis的 rdb 和 aof 持久化方式的区别及使用场景
redis的 rdb 和 aof 持久化方式的区别及使用场景
323 0
|
存储 NoSQL Java
蚂蚁金服Java研发岗二面:redis 常见数据结构以及使用场景分析
redis简单来说 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以存写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。所以在面试中我们经常可以看到redis的身影,今天给大家带来一道redis的面试真题以及解析,后面会给大家分享今年来redis常考试的一些真题。
193 0
|
4月前
|
消息中间件 存储 NoSQL
redis实战——go-redis的使用与redis基础数据类型的使用场景(一)
本文档介绍了如何使用 Go 语言中的 `go-redis` 库操作 Redis 数据库
235 0
redis实战——go-redis的使用与redis基础数据类型的使用场景(一)
|
5月前
|
canal 缓存 NoSQL
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;先删除缓存还是先修改数据库,双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
|
6月前
|
存储 NoSQL Java
【超长文】Redis在项目中的17种使用场景
Redis 是一个开源的高性能键值对数据库,它以其内存中数据存储、键过期策略、持久化、事务、丰富的数据类型支持以及原子操作等特性,在许多项目中扮演着关键角色。以下是V哥整理的17个Redis在项目中常见的使用场景
361 0
|
缓存 NoSQL Java
Java 最常见的面试题:redis 是什么?都有哪些使用场景?
Java 最常见的面试题:redis 是什么?都有哪些使用场景?
|
7月前
|
存储 SQL NoSQL
Redis入门到通关之五大基本数据类型及其使用场景
Redis入门到通关之五大基本数据类型及其使用场景
58 0
|
7月前
|
存储 SQL NoSQL
Redis 入门、基础。(五种基本类型使用场景)
Redis 入门、基础。(五种基本类型使用场景)
38 0
|
NoSQL Java Redis
第一季:17redis在项目中使用场景【Java面试题】
第一季:17redis在项目中使用场景【Java面试题】
112 0
|
缓存 NoSQL 小程序