欢迎关注方志朋的博客,回复”666“获面试宝典

目录

  • 缓存

  • 数据共享分布式

  • 分布式锁

  • 全局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

public static boolean getLock(String key) {Long flag = jedis.setnx(key, "1");if (flag == 1) {jedis.expire(key, 10);}return flag == 1;
}public static void releaseLock(String key) {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位二进制存储的

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

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

setbit onlineusers 01
setbit onlineusers 11
setbit onlineusers 20

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

BITOPANDdestkeykey[key...] ,对一个或多个 key 求逻辑并,并将结果保存到 destkey 。
BITOPORdestkeykey[key...] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey 。
BITOPXORdestkeykey[key...] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey 。
BITOPNOTdestkeykey ,对给定 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都可以做

  • 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、抽奖

自带一个随机获得值

spop myset

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:i5001 来维护商品所有的标签。

  • sadd tags:i5001 画面清晰细腻

  • sadd tags:i5001 真彩清晰显示屏

  • sadd tags:i5001 流程至极

14、商品筛选

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

假如:iPhone11 上市了

sadd brand:apple iPhone11sadd brand:ios iPhone11sad screensize:6.0-6.24 iPhone11sad screentype:lcd iPhone 11

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

sinter brand:apple brand:ios screensize:6.0-6.24 screentype: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:

zincrby hotNews:20190926 1 n6001

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

zrevrange hotNews:20190926 0 15 withscores

地址:https://blog.csdn.net/weixin_43878826/article/details/119461093
热门内容:
  • JetBrains 宣布:IntelliJ 平台彻底停用 Log4j 组件,建议切换至 java.util.logging

  • 面试官:private修饰的方法可以通过反射访问,那么private的意义是什么?

  • 最新 955 不加班的公司名单(2022版)

  • SpringCloud 微服务架构,适合接私活(附源码)

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡

一口气说出 Redis 16 个常见使用场景相关推荐

  1. 一口气说出 Redis 16 个常见使用场景,绝活啊!

    大家好,我是宝哥. 目录 缓存 数据共享分布式 分布式锁 全局ID 计数器 限流 位统计 购物车 用户消息时间线timeline 消息队列 抽奖 点赞.签到.打卡 商品标签 商品筛选 用户关注.推荐模 ...

  2. 面试官:说出Redis 16 个常见使用场景

    常见的16种应用场景: 缓存.数据共享分布式.分布式锁.全局 ID.计数器.限流.位统计.购物车.用户消息时间线 timeline.消息队列.抽奖.点赞.签到.打卡.商品标签.商品筛选.用户关注.推荐 ...

  3. Redis 16 个常见使用场景

    1. 缓存 作为Key-Value形态的内存数据库,Redis 最先会被想到的应用场景便是作为数据缓存.而使用 Redis 缓存数据非常简单,只需要通过string类型将序列化后的对象存起来即可,不过 ...

  4. Redis 16 个常见,使用场景

    常见的16种应用场景: 缓存.数据共享分布式.分布式锁.全局 ID.计数器.限流.位统计.购物车.用户消息时间线 timeline.消息队列.抽奖.点赞.签到.打卡.商品标签.商品筛选.用户关注.推荐 ...

  5. Redis 16 个常见的使用场景

    常见的16种应用场景: 缓存.数据共享分布式.分布式锁.全局 ID.计数器.限流.位统计.购物车.用户消息时间线 timeline.消息队列.抽奖.点赞.签到.打卡.商品标签.商品筛选.用户关注.推荐 ...

  6. 一口气说出 6种 @Transactional 注解失效场景

    引言 昨天公众号粉丝咨询了一个问题,说自己之前面试被问@Transactional注解哪些场景下会失效,一时语塞致使面试失败.所以今天简单的和大家分享一下@Transactional相关的知识. @T ...

  7. Avoiding 16 Common OpenGL Pitfalls(避免 16 个常见的 OpenGL 陷阱)

    前言 避免 16 个常见的 OpenGL 陷阱原文 Avoiding 16 Common OpenGL Pitfalls Copyright 1998, 1999 by Mark J. Kilgard ...

  8. redis多实例常见部署方法和使用

    文章目录 前言 一.主从复制 1.一主多从架构 1.1应用场景 1.2安装步骤 1.3客户端使用方法 1.4故障处理 2.主从从架构 2.1应用场景 2.2安装步骤 2.3客户端使用方法 2.4故障处 ...

  9. 盘点16种常见的PCB可靠性测试,您的板经得起测试吗?

    一个可靠性的PCB板,需要经过多轮测试.下面我们一起来看看16种常见的PCB可靠性测试,有兴趣的客户可以测试下自己的板子是否过关. 1. 阻焊膜硬度测试 测试目的: 检测阻焊膜硬度 测试原理/设备: ...

最新文章

  1. UDSMProt:蛋白质分类通用深度序列模型
  2. Nature Protocols:整合高通量组学数据集鉴定潜在机制联系的计算框架
  3. 清理disuz垃圾用户信息SQL语句
  4. C指针原理(43)-helloworld的C程序汇编剖析
  5. Cause: org.postgresql.util.PSQLException: ERROR: column province_id does not exist
  6. “局域网聊天”开始了
  7. 测试负责人和测试工程师在日常工作有什么不同
  8. [源码和文档分享]基于C++的一元多项式的计算
  9. OBS Windows10 1909版本黑屏问题解决方案
  10. 使用XUtils进行文件的断点下载
  11. IOS-Run loop学习总结
  12. d盘信号灯超时时间已到_20下教师资格证笔试成绩什么时候公布?今年面试是什么时候?这些时间节点抢先了解!...
  13. 基于PHP+Web+Mysql的在线问卷调查系统
  14. 数据分析几大常见效应和定律。
  15. 飓风“桑迪”的蝴蝶效应:扇起桑迪域名注册潮
  16. 教你如何焊接BGA芯片技巧
  17. debian之网易云音乐的安装
  18. 你必需知道的5个开源游戏引擎
  19. 关于公文计算机考试的题目,2015计算机等级考试模拟题
  20. 程序设计与算法(三)期末考试(2020春季)

热门文章

  1. Java面试题汇总及答案2021最新(序列化含答案)
  2. 《数据科学家养成手册》第十一章----算法学(非线性回归)
  3. MATLAB 2014a (8.3) Compiler Runtime (MCR)
  4. 网上搜集了点资料,学web的人互相分享共同进步吧(php编码的好习惯必须养成)...
  5. POJ-1185 炮兵阵地 动态规划+状态压缩
  6. jquery即时搜索查询插件jquery.search.js
  7. EBS上用过的一些接口表整理信息
  8. 技术图文:如何利用 Python 做一个简单的定时器类?
  9. STL queue priority_queue
  10. 【ACM】POJ 3069